#include "UmlDeploymentView.h" #include "File.h" #include "UmlPackage.h" #include "UmlNode.h" #include "UmlDeploymentDiagram.h" #include "UmlCom.h" void UmlDeploymentView::import(File & f) { QCString s; for (;;) { switch (f.read(s)) { case -1: f.eof(); throw 0; case ')': return; case ATOM: if (s == "ProcsNDevs") { f.read("("); f.read("list"); readObjects(f); } else f.skipNextForm(); break; default: f.syntaxError(s); } } } void UmlDeploymentView::readObjects(File & f) { for (;;) { QCString s; switch (f.read(s)) { case ')': return; case '(': break; default: f.syntaxError(s); } f.read("object"); if (f.read(s) != ATOM) f.syntaxError(s, "an atom"); if ((s == "Processor") || (s == "Device")) UmlNode::import(f, this, s.lower()); else if (s == "Process_Diagram") UmlDeploymentDiagram::import(f, this); else { UmlCom::trace("
" + s + " in " + QCString(f.name()) + " NOT MANAGED by DeploymentView::readObject()"); f.skipBlock(); } } } UmlDeploymentView * UmlDeploymentView::create(UmlPackage * parent, const char * s, QCString bn) { UmlDeploymentView * r = UmlBaseDeploymentView::create(parent, s); if (r != 0) r->_base_name = bn; return r; } void UmlDeploymentView::import(UmlPackage * parent, File & f) { QCString s; QCString id; QCString ste; QCString doc; QDict prop; int k; for (;;) { k = f.readDefinitionBeginning(s, id, ste, doc, prop); if (s == "file_name") { if (f.read(s) != STRING) f.syntaxError(s, "a filename"); File f2(s, f.name()); if (! f2.open(IO_ReadOnly)) UmlCom::trace("
cannot open '" + s + "' referenced in " + QCString(f.name())); else { f2.read("("); f2.read("object"); f2.read("Petal"); f2.skipBlock(); f2.read("("); f2.read("object"); f2.read("Processes"); import(parent, f2); } f.skipBlock(); return; } else if (!id.isEmpty()) { f.unread(k, s); UmlDeploymentView * dv; if (scanning) { dv = UmlBaseDeploymentView::create(parent, "Deployment View"); if (dv != 0) newItem(dv, id); if (!ste.isEmpty()) dv->set_Stereotype(ste); if (!doc.isEmpty()) dv->set_Description(doc); dv->setProperties(prop); } else dv = (UmlDeploymentView *) findItem(id, aDeploymentView); if (dv == 0) { UmlCom::trace("
cannot create deployment view in '" + parent->fullName() + "'"); throw 0; } dv->import(f); return; } else f.skipNextForm(); } }