[Rcml-group2] some pseudo code for design
Status: Pre-Alpha
Brought to you by:
jdavidb
From: <jx...@ga...> - 2000-11-03 03:16:12
|
# Design for read() and write() methods of the Archive class. Class: XMLInteracter # purpose is to perform all interaction with Xerces Members: (all private) DOM_Document doc; Methods: get_doc set_doc(private) write_to_file(filename: string) read_from_file(filename: string) read() create a new XMLInteracter, xml xml->read_from_file(filename) doc = xml->get_doc root = doc->getDocumentElement root is a tag of type "ARCHIVE" currev_list = root->getElementsByTagName("CURRENTREVISION") currev_list contains 1 element (no more, no less) currev = currev_list->item(0) currev is an element of type "CURRENTREVISION" create a new RevisionNumber, head_revno head_revno = currev->getAttribute("HEAD") create a new Text object, head_text head_text = currev->getFirstChild->getData diffelem_list = root->getElementsByTagName("DIFF") for each diff in diffelem_list create RevisionNumber revno(diff->getAttribute("REVISION")) patchelem_list = diff->getElementsByTagName("DIFFCMD") foreach patchelem in patchelem_list cmd = patchelem->getAttribute("CMD") lineno = patchelem->getAttribute("LINENO") numdeletedlines = patchelem->getAttribute("NUMDELETED") content = patchelem->getFirstChild->getData create a Patch, curpatch(cmd, lineno, numdeletedlines, content) push curpatch onto patch_list endfor create a Differences, curdiff(patch_list) create a Revision, rev(curdiff, revno) push rev onto rev_list endfor create a RevisionTree, tree(head_text, rev_list) create an Archive(head_revno, tree) return the Archive done write() create a new XMLInteracter, xml doc = xml->getdoc create a new DOM_Element, root("ARCHIVE") root->setAttribute("HEAD", Archive->headID) # redundant? create a new DOM_DocumentType, dtd -- with the DOM_Implementation::createDOM_DocumentType; with the address of the DTD That should be used in creating the DOM_Document in the XMLInteracter revtree = Archive->gettree create a new DOM_Element, currev("CURRENTREVISION") append it to root currev->setAttribute("HEAD", Archive->headID) create a new DOM_Text, head_text append it to currev rev_list = tree->getCollectionOfRevisions foreach revision in rev_list create a new DOM_Element, diff("DIFF") append it to root diff->setAttribute("REVISION", revision->getRevisionID) patch_list = revision->getDifferFromNext foreach patch in patch_list create a new DOM_Element, diffcmd("DIFFCMD") append it to diff diffcmd->setAttribute("CMD", patch->getcmd) diffcmd->setAttribute("LINENO", patch->getlineNumber) if (patch->getcmd is D or C) diffcmd->setAttribute("NUMDELETEDLINES", patch->getNumberOfLines) endif if (patch->getPatchData->length > 0) create a new DOM_Text, patch_contents(patch->getPatchData) append it to diffcmd endif endfor endfor xml->write_to_file(filename) done XMLInteracter::read_from_file() create a DOMParser, parser parser->parse(filename) doc = parser->getDocument() XMLInteracter->setdoc(doc) done XMLInteracter::write_to_file() open filename as an ofstream doc = XMLInteractor->getdoc() file << doc # uses operator<<() from DOMPrint.cpp done |