void ApplicationPropertyWindow::updateApplication(const char* item, const char* value) { if(strcmp(item, "Prefix") == 0) { m_pManager->getKnowledgeBase()->setApplicationPrefix(m_pApplication, value); Application* mainApplication = m_pManager->getKnowledgeBase()->getApplication(); for(int i=0; i<m_pApplication->sucCount(); i++) { Module* module = dynamic_cast<Module*>(m_pApplication->getLinkAt(i).to()); if(module) { for(int j=0; j<module->outputCount(); j++) { OutputData *output = &module->getOutputAt(j); for(int i=0; i<mainApplication->connectionCount(); i++) { Connection con = mainApplication->getConnectionAt(i); string strOldFrom = con.from(); Connection updatedCon = con; if(con.getCorOutputData() && (con.getCorOutputData() == output)) { string strFrom = string(module->getPrefix()) + string(output->getPort()); updatedCon.setFrom(strFrom.c_str()); m_pManager->getKnowledgeBase()->updateConnectionOfApplication(mainApplication, con, updatedCon); // updating arrow's connection ArrowModel* arrow = dynamic_cast<ArrowModel*>(con.getModel()); if(arrow) { arrow->setConnection(updatedCon); // updating excitatory links from other connections Glib::RefPtr<PortArbitratorModel> arbPort = Glib::RefPtr<PortArbitratorModel>::cast_dynamic(arrow->getDestination()); if(arbPort) arbPort->updateExcitation(arrow, strOldFrom.c_str(), strFrom.c_str()); } } } } for(int j=0; j<module->inputCount(); j++) { InputData *input = &module->getInputAt(j); for(int i=0; i<mainApplication->connectionCount(); i++) { Connection con = mainApplication->getConnectionAt(i); Connection updatedCon = con; if(con.getCorInputData() && (con.getCorInputData() == input)) { string strTo = string(module->getPrefix()) + string(input->getPort()); updatedCon.setTo(strTo.c_str()); m_pManager->getKnowledgeBase()->updateConnectionOfApplication(mainApplication, con, updatedCon); // updating arrow's connection if(dynamic_cast<ArrowModel*>(con.getModel())) dynamic_cast<ArrowModel*>(con.getModel())->setConnection(updatedCon); } } } } // end of if(module) } // end of for } }
void ModuleWindow::updateWidget() { Module* m_pModule = ModuleWindow::m_pModule; m_refTreeModel->clear(); Gtk::TreeModel::Row row; Gtk::TreeModel::Row childrow; Gtk::TreeModel::Row cchildrow; row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Name"; row[m_Columns.m_col_value] = m_pModule->getName(); row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Version"; row[m_Columns.m_col_value] = m_pModule->getVersion(); row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Description"; row[m_Columns.m_col_value] = m_pModule->getDescription(); row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Parameters"; row[m_Columns.m_col_value] = ""; for(int i=0; i<m_pModule->argumentCount(); i++) { childrow = *(m_refTreeModel->append(row.children())); childrow[m_Columns.m_col_name] = m_pModule->getArgumentAt(i).getParam(); childrow[m_Columns.m_col_value] = m_pModule->getArgumentAt(i).getDescription(); } row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Authors"; row[m_Columns.m_col_value] = ""; for(int i=0; i<m_pModule->authorCount(); i++) { childrow = *(m_refTreeModel->append(row.children())); childrow[m_Columns.m_col_name] = m_pModule->getAuthorAt(i).getName(); childrow[m_Columns.m_col_value] = m_pModule->getAuthorAt(i).getEmail(); } row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Inputs"; row[m_Columns.m_col_value] = ""; for(int i=0; i<m_pModule->inputCount(); i++) { InputData in = m_pModule->getInputAt(i); childrow = *(m_refTreeModel->append(row.children())); childrow[m_Columns.m_col_name] = "Type"; childrow[m_Columns.m_col_value] = in.getName(); cchildrow = *(m_refTreeModel->append(childrow.children())); cchildrow[m_Columns.m_col_name] = "Port"; cchildrow[m_Columns.m_col_value] = in.getPort(); cchildrow = *(m_refTreeModel->append(childrow.children())); cchildrow[m_Columns.m_col_name] = "Description"; cchildrow[m_Columns.m_col_value] = in.getDescription(); childrow = *(m_refTreeModel->append(childrow.children())); childrow[m_Columns.m_col_name] = "Required"; childrow[m_Columns.m_col_value] = (in.isRequired())?"Yes":"No"; } row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Outputs"; row[m_Columns.m_col_value] = ""; for(int i=0; i<m_pModule->outputCount(); i++) { OutputData out = m_pModule->getOutputAt(i); childrow = *(m_refTreeModel->append(row.children())); childrow[m_Columns.m_col_name] = "Type"; childrow[m_Columns.m_col_value] = out.getName(); cchildrow = *(m_refTreeModel->append(childrow.children())); cchildrow[m_Columns.m_col_name] = "Port"; cchildrow[m_Columns.m_col_value] = out.getPort(); cchildrow = *(m_refTreeModel->append(childrow.children())); cchildrow[m_Columns.m_col_name] = "Description"; cchildrow[m_Columns.m_col_value] = out.getDescription(); } }
void ModulePropertyWindow::updateModule(const char* item, const char* value) { if(!m_pModule) return; // updating modules if(strcmp(item, "Node") == 0) { m_pModule->setHost(value); } else if(strcmp(item,"Stdio") == 0) { m_pModule->setStdio(value); } else if(strcmp(item, "Workdir") == 0) { m_pModule->setWorkDir(value); } else if(strcmp(item, "Prefix") == 0) { m_pModule->setBasePrefix(value); string strPrefix; Application* application = m_pManager->getKnowledgeBase()->getApplication(); if(application) { strPrefix = string(application->getPrefix()) + string(value); for(int j=0; j<m_pModule->outputCount(); j++) { OutputData *output = &m_pModule->getOutputAt(j); for(int i=0; i<application->connectionCount(); i++) { Connection con = application->getConnectionAt(i); string strOldFrom = con.from(); Connection updatedCon = con; if(con.getCorOutputData()) { if(con.getCorOutputData() == output) { string strFrom = strPrefix + string(output->getPort()); updatedCon.setFrom(strFrom.c_str()); m_pManager->getKnowledgeBase()->updateConnectionOfApplication(application, con, updatedCon); // updating arrow's connection ArrowModel* arrow = dynamic_cast<ArrowModel*>(con.getModel()); if(arrow) { arrow->setConnection(updatedCon); // updating excitatory links from other connections Glib::RefPtr<PortArbitratorModel> arbPort = Glib::RefPtr<PortArbitratorModel>::cast_dynamic(arrow->getDestination()); if(arbPort) arbPort->updateExcitation(arrow, strOldFrom.c_str(), strFrom.c_str()); } } } } } for(int j=0; j<m_pModule->inputCount(); j++) { InputData *input = &m_pModule->getInputAt(j); for(int i=0; i<application->connectionCount(); i++) { Connection con = application->getConnectionAt(i); Connection updatedCon = con; if(con.getCorInputData()) { if(con.getCorInputData() == input) { string strTo = strPrefix + string(input->getPort()); updatedCon.setTo(strTo.c_str()); m_pManager->getKnowledgeBase()->updateConnectionOfApplication(application, con, updatedCon); // updating arrow's connection if(dynamic_cast<ArrowModel*>(con.getModel())) dynamic_cast<ArrowModel*>(con.getModel())->setConnection(updatedCon); } } } } // updating module prefix. m_pManager->getKnowledgeBase()->setModulePrefix(m_pModule, strPrefix.c_str(), false); } } else if(strcmp(item, "Parameters") == 0) { m_pModule->setParam(value); } else if(strcmp(item, "Deployer") == 0) { m_pModule->setBroker(value); } }
void ModuleWindow::updateWidget() { Module* m_pModule = ModuleWindow::m_pModule; m_refTreeModel->clear(); size_t width = 20; for(int i=0; i<m_pModule->inputCount(); i++) { if(strlen(m_pModule->getInputAt(i).getPort()) > width) width = strlen(m_pModule->getInputAt(i).getPort()); } for(int i=0; i<m_pModule->outputCount(); i++) { if(strlen(m_pModule->getOutputAt(i).getPort()) > width) width = strlen(m_pModule->getOutputAt(i).getPort()); } width *= 8; Gtk::TreeModel::Row row; Gtk::TreeModel::Row childrow; Gtk::TreeModel::Row cchildrow; row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Name"; row[m_Columns.m_col_value] = m_pModule->getName(); row[m_Columns.m_col_width] = width; row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Version"; row[m_Columns.m_col_value] = m_pModule->getVersion(); row[m_Columns.m_col_width] = width; row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Description"; row[m_Columns.m_col_value] = m_pModule->getDescription(); row[m_Columns.m_col_width] = width; row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Parameters"; row[m_Columns.m_col_value] = ""; row[m_Columns.m_col_width] = width; for(int i=0; i<m_pModule->argumentCount(); i++) { childrow = *(m_refTreeModel->append(row.children())); childrow[m_Columns.m_col_name] = m_pModule->getArgumentAt(i).getParam(); childrow[m_Columns.m_col_value] = m_pModule->getArgumentAt(i).getDescription(); childrow[m_Columns.m_col_width] = width; } row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Authors"; row[m_Columns.m_col_value] = ""; row[m_Columns.m_col_width] = width; //char buff[64]; for(int i=0; i<m_pModule->authorCount(); i++) { childrow = *(m_refTreeModel->append(row.children())); //sprintf(buff, "%d", i+1); childrow[m_Columns.m_col_name] = m_pModule->getAuthorAt(i).getName(); childrow[m_Columns.m_col_value] = m_pModule->getAuthorAt(i).getEmail(); childrow[m_Columns.m_col_width] = width; } row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Inputs"; row[m_Columns.m_col_value] = ""; row[m_Columns.m_col_width] = width; for(int i=0; i<m_pModule->inputCount(); i++) { InputData in = m_pModule->getInputAt(i); childrow = *(m_refTreeModel->append(row.children())); childrow[m_Columns.m_col_name] = "Port"; childrow[m_Columns.m_col_value] = in.getPort(); childrow[m_Columns.m_col_width] = width; cchildrow = *(m_refTreeModel->append(childrow.children())); cchildrow[m_Columns.m_col_name] = "Type"; cchildrow[m_Columns.m_col_value] = in.getName(); cchildrow[m_Columns.m_col_width] = width; cchildrow = *(m_refTreeModel->append(childrow.children())); cchildrow[m_Columns.m_col_name] = "Description"; cchildrow[m_Columns.m_col_value] = in.getDescription(); cchildrow[m_Columns.m_col_width] = width; childrow = *(m_refTreeModel->append(childrow.children())); childrow[m_Columns.m_col_name] = "Required"; childrow[m_Columns.m_col_value] = (in.isRequired())?"Yes":"No"; childrow[m_Columns.m_col_width] = 200; } row = *(m_refTreeModel->append()); row[m_Columns.m_col_name] = "Outputs"; row[m_Columns.m_col_value] = ""; row[m_Columns.m_col_width] = width; for(int i=0; i<m_pModule->outputCount(); i++) { OutputData out = m_pModule->getOutputAt(i); childrow = *(m_refTreeModel->append(row.children())); childrow[m_Columns.m_col_name] = "Port"; childrow[m_Columns.m_col_value] = out.getPort(); childrow[m_Columns.m_col_width] = width; cchildrow = *(m_refTreeModel->append(childrow.children())); cchildrow[m_Columns.m_col_name] = "Type"; cchildrow[m_Columns.m_col_value] = out.getName(); cchildrow[m_Columns.m_col_width] = width; cchildrow = *(m_refTreeModel->append(childrow.children())); cchildrow[m_Columns.m_col_name] = "Description"; cchildrow[m_Columns.m_col_value] = out.getDescription(); cchildrow[m_Columns.m_col_width] = width; } }
void PropertiesTable::showModuleTab(Module *mod) { modules.clear(); disconnect(moduleProperties,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(onModItemChanged(QTreeWidgetItem*,int))); disconnect(moduleProperties,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(onModItemDoubleClicked(QTreeWidgetItem*,int))); currentApplication = NULL; currentModule = mod; propertiesTab->clear(); propertiesTab->addTab(moduleProperties,"Module Properties"); propertiesTab->addTab(moduleDescription,"Description"); moduleProperties->clear(); moduleDescription->clear(); appProperties->hide(); moduleProperties->show(); moduleDescription->show(); modName = new QTreeWidgetItem(moduleProperties,QStringList() << "Name" << mod->getName()); modNode = new QTreeWidgetItem(moduleProperties,QStringList() << "Node"); modStdio = new QTreeWidgetItem(moduleProperties,QStringList() << "Stdio" << mod->getStdio()); modWorkDir = new QTreeWidgetItem(moduleProperties,QStringList() << "Workdir" << mod->getWorkDir()); modPrefix = new QTreeWidgetItem(moduleProperties,QStringList() << "Prefix" << mod->getBasePrefix()); modDeployer = new QTreeWidgetItem(moduleProperties,QStringList() << "Deployer"); modParams = new QTreeWidgetItem(moduleProperties,QStringList() << "Parameters" << mod->getParam()); lastPrefix = mod->getBasePrefix(); modStdio->setFlags(modStdio->flags() | Qt::ItemIsEditable); modWorkDir->setFlags(modWorkDir->flags() | Qt::ItemIsEditable); modPrefix->setFlags(modPrefix->flags() | Qt::ItemIsEditable); moduleProperties->addTopLevelItem(modName); moduleProperties->addTopLevelItem(modNode); moduleProperties->addTopLevelItem(modStdio); moduleProperties->addTopLevelItem(modWorkDir); moduleProperties->addTopLevelItem(modPrefix); moduleProperties->addTopLevelItem(modDeployer); moduleProperties->addTopLevelItem(modParams); if(deployerCombo){ delete deployerCombo; deployerCombo = NULL; } if(nodeCombo){ delete nodeCombo; nodeCombo = NULL; } deployerCombo = new QComboBox(); nodeCombo = new QComboBox(); deployerCombo->setEditable(true); nodeCombo->setEditable(true); if(compareString(mod->getBroker(),"yarpdev")){ deployerCombo->addItem("yarpdev"); }else if(compareString(mod->getBroker(),"icubmoddev")){ deployerCombo->addItem("icubmoddev"); }else{ deployerCombo->addItem("local"); deployerCombo->addItem("yarprun"); } if(strlen(mod->getBroker())){ deployerCombo->setCurrentText(mod->getBroker()); }else if(compareString(mod->getHost(),"localhost")){ deployerCombo->setCurrentText("local"); } if(mod->getNeedDeployer()){ deployerCombo->setEditable(false); } nodeCombo->addItem(mod->getHost()); if(QString(mod->getHost()) != "localhost"){ nodeCombo->addItem("localhost"); } ResourcePContainer resources = manager->getKnowledgeBase()->getResources(); for(ResourcePIterator itr=resources.begin(); itr!=resources.end(); itr++){ Computer* comp = dynamic_cast<Computer*>(*itr); if(comp && !compareString(comp->getName(), "localhost")){ nodeCombo->addItem(comp->getName()); } } connect(nodeCombo, SIGNAL(editTextChanged(QString)), paramsSignalMapper, SLOT(map())); connect(nodeCombo, SIGNAL(currentIndexChanged(int)), paramsSignalMapper, SLOT(map())); paramsSignalMapper->setMapping(nodeCombo,nodeCombo); connect(deployerCombo, SIGNAL(editTextChanged(QString)), paramsSignalMapper, SLOT(map())); connect(deployerCombo, SIGNAL(currentIndexChanged(int)), paramsSignalMapper, SLOT(map())); paramsSignalMapper->setMapping(deployerCombo,deployerCombo); /*****************************/ // Populate paramters for(int i=0;i<mod->argumentCount();i++){ Argument a = mod->getArgumentAt(i); QTreeWidgetItem *it = new QTreeWidgetItem(modParams,QStringList() << a.getParam()); QComboBox *paramCombo = new QComboBox(); paramCombo->setEditable(true); paramCombo->addItem(a.getValue()); if(strcmp(a.getDefault(),a.getValue()) != 0 ){ paramCombo->addItem(a.getDefault()); } moduleProperties->setItemWidget(it,1,paramCombo); connect(paramCombo, SIGNAL(editTextChanged(QString)), paramsSignalMapper, SLOT(map())); connect(paramCombo, SIGNAL(currentIndexChanged(int)), paramsSignalMapper, SLOT(map())); paramsSignalMapper->setMapping(paramCombo,paramCombo); } /*****************************/ moduleProperties->setItemWidget(modDeployer,1,deployerCombo); moduleProperties->setItemWidget(modNode,1,nodeCombo); modParams->setExpanded(true); QTreeWidgetItem *nameItem = new QTreeWidgetItem(moduleDescription,QStringList() << "Name" << mod->getName()); QTreeWidgetItem *versionItem = new QTreeWidgetItem(moduleDescription,QStringList() << "Version" << mod->getVersion()); QTreeWidgetItem *descriptionItem = new QTreeWidgetItem(moduleDescription,QStringList() << "Description" << mod->getDescription()); QTreeWidgetItem *parametersItem = new QTreeWidgetItem(moduleDescription,QStringList() << "Parameters"); for(int i=0;i<mod->argumentCount();i++){ Argument a = mod->getArgumentAt(i); QTreeWidgetItem *it = new QTreeWidgetItem(parametersItem,QStringList() << a.getParam() << a.getDescription()); } QTreeWidgetItem *authorsItem = new QTreeWidgetItem(moduleDescription,QStringList() << "Authors" ); for(int i=0;i<mod->authorCount();i++){ Author a = mod->getAuthorAt(i); QTreeWidgetItem *it = new QTreeWidgetItem(authorsItem,QStringList() << a.getName() << a.getEmail()); } QTreeWidgetItem *inputsItem = new QTreeWidgetItem(moduleDescription,QStringList() << "Inputs" ); for(int i=0;i<mod->inputCount();i++){ InputData a = mod->getInputAt(i); QTreeWidgetItem *type = new QTreeWidgetItem(inputsItem,QStringList() << "Type" << a.getName()); QTreeWidgetItem *port = new QTreeWidgetItem(type,QStringList() << "Port" << a.getPort()); QTreeWidgetItem *desc = new QTreeWidgetItem(type,QStringList() << "Description" << a.getDescription()); QTreeWidgetItem *req = new QTreeWidgetItem(type,QStringList() << "Required" << (a.isRequired() ? "yes" : "no")); Q_UNUSED(port); Q_UNUSED(desc); Q_UNUSED(req); } QTreeWidgetItem *outputsItem = new QTreeWidgetItem(moduleDescription,QStringList() << "Outputs" ); for(int i=0;i<mod->outputCount();i++){ OutputData a = mod->getOutputAt(i); //TODO controllare QTreeWidgetItem *type = new QTreeWidgetItem(outputsItem,QStringList() << "Type" << a.getName()); QTreeWidgetItem *port = new QTreeWidgetItem(type,QStringList() << "Port" << a.getPort()); QTreeWidgetItem *desc = new QTreeWidgetItem(type,QStringList() << "Description" << a.getDescription()); Q_UNUSED(port); Q_UNUSED(desc); } moduleDescription->addTopLevelItem(nameItem); moduleDescription->addTopLevelItem(versionItem); moduleDescription->addTopLevelItem(descriptionItem); moduleDescription->addTopLevelItem(parametersItem); moduleDescription->addTopLevelItem(authorsItem); moduleDescription->addTopLevelItem(inputsItem); moduleDescription->addTopLevelItem(outputsItem); connect(moduleProperties,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(onModItemChanged(QTreeWidgetItem*,int))); connect(moduleProperties,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(onModItemDoubleClicked(QTreeWidgetItem*,int))); }
void PropertiesTable::onModItemChanged(QTreeWidgetItem *it,int col) { Qt::ItemFlags tmp = it->flags(); if (!(tmp & Qt::ItemIsEditable)) { return; } if(currentModule){ currentModule->setStdio(modStdio->text(1).toLatin1().data()); currentModule->setWorkDir(modWorkDir->text(1).toLatin1().data()); if(lastPrefix != modPrefix->text(1)){ currentModule->setBasePrefix(modPrefix->text(1).toLatin1().data()); string strPrefix; Application* application = manager->getKnowledgeBase()->getApplication(); if(application){ strPrefix = string(application->getPrefix()) + string(modPrefix->text(1).toLatin1().data()); for(int j=0; j<currentModule->outputCount(); j++){ OutputData *output = ¤tModule->getOutputAt(j); for(int i=0; i<application->connectionCount(); i++){ Connection con = application->getConnectionAt(i); //string strOldFrom = con.from(); Connection updatedCon = con; if(con.getCorOutputData()){ if(con.getCorOutputData() == output){ string strFrom = strPrefix + string(output->getPort()); updatedCon.setFrom(strFrom.c_str()); manager->getKnowledgeBase()->updateConnectionOfApplication(application, con, updatedCon); } } } } } for(int j=0; j<currentModule->inputCount(); j++){ InputData *input = ¤tModule->getInputAt(j); for(int i=0; i<application->connectionCount(); i++){ Connection con = application->getConnectionAt(i); Connection updatedCon = con; if(con.getCorInputData()){ if(con.getCorInputData() == input){ string strTo = strPrefix + string(input->getPort()); updatedCon.setTo(strTo.c_str()); manager->getKnowledgeBase()->updateConnectionOfApplication(application, con, updatedCon); } } } } manager->getKnowledgeBase()->setModulePrefix(currentModule, strPrefix.c_str(), false); } } for(int i=0;i<modules.count();i++){ Module *module = modules.at(i); if(!strcmp(module->getName(),currentModule->getName())){ module->setStdio(currentModule->getStdio()); module->setWorkDir(currentModule->getWorkDir()); } } modified(); }
bool yarp::manager::exportDotGraph(Graph& graph, const char* szFileName) { ofstream dot; dot.open(szFileName); if(!dot.is_open()) return false; dot<<"digraph G {"<<endl; dot<<"rankdir=LR;"<<endl; dot<<"ranksep=0.0;"<<endl; dot<<"nodesep=0.2;"<<endl; for(GraphIterator itr=graph.begin(); itr!=graph.end(); itr++) { switch((*itr)->getType()) { case MODULE: { Module* mod = (Module*)(*itr); dot<<"\""<<mod->getLabel()<<"\""; dot<<" [label=\""<< mod->getName()<<"\""; dot<<" shape=component, color=midnightblue, fillcolor=lightslategrey, peripheries=1, style=filled, penwidth=2];"<<endl; for(int i=0; i<mod->sucCount(); i++) { Link l = mod->getLinkAt(i); InputData* in = (InputData*)l.to(); dot<<"\""<<mod->getLabel()<<"\" -> "; dot<<"\""<<in->getLabel()<<"\""; if(!l.isVirtual()) dot<<" [label=\"\"];"<<endl; else dot<<" [label=\"\" style=dashed];"<<endl; } break; } case INPUTD: { InputData* in = (InputData*)(*itr); dot<<"\""<<in->getLabel()<<"\""; if(in->withPriority()) { dot<<" [color=red, fillcolor=lightgrey, peripheries=1, style=filled"; dot<<" label=\""<< in->getName()<<"\\n"<<in->getPort()<<"\"];"<<endl; } else { dot<<" [color=black, fillcolor=lightgrey, peripheries=1, style=filled"; dot<<" label=\""<< in->getName()<<"\\n"<<in->getPort()<<"\"];"<<endl; } for(int i=0; i<in->sucCount(); i++) { Link l = in->getLinkAt(i); OutputData* out = (OutputData*)l.to(); dot<<"\""<<in->getLabel()<<"\" -> "; dot<<"\""<<out->getLabel()<<"\""; if(!l.isVirtual()) dot<<" [label=\""<<l.weight()<<"\"];"<<endl; else dot<<" [label=\""<<l.weight()<<"\" style=dashed];"<<endl; } break; } case OUTPUTD: { OutputData* out = (OutputData*)(*itr); dot<<"\""<<out->getLabel()<<"\""; dot<<" [color=black, fillcolor=wheat, peripheries=1, style=filled"; dot<<" label=\""<< out->getName()<<"\\n"<<out->getPort()<<"\"];"<<endl; for(int i=0; i<out->sucCount(); i++) { Link l = out->getLinkAt(i); Module* mod = (Module*)l.to(); dot<<"\""<<out->getLabel()<<"\" -> "; dot<<"\""<<mod->getLabel()<<"\""; dot<<" [label=\"\" arrowhead=none];"<<endl; } break; } case APPLICATION: { Application* app = (Application*)(*itr); dot<<"\""<<app->getLabel()<<"\""; dot<<" [shape=folder, color=darkgreen, fillcolor=darkseagreen, peripheries=1, style=filled, penwidth=2"; dot<<" label=\""<<app->getLabel()<<"\""<<"];"<<endl; for(int i=0; i<app->sucCount(); i++) { Link l = app->getLinkAt(i); Module* mod = (Module*)l.to(); dot<<"\""<<app->getLabel()<<"\" -> "; dot<<"\""<<mod->getLabel()<<"\""; if(!l.isVirtual()) dot<<" [label=\"\"];"<<endl; else dot<<" [label=\"\" style=dashed];"<<endl; } break; } case RESOURCE: { GenericResource* res = (GenericResource*)(*itr); dot<<"\""<<res->getLabel()<<"\""; if(res->owner()) dot<<" [shape=rect, color=black, fillcolor=salmon, peripheries=1, style=filled "; else dot<<" [shape=house, color=maroon, fillcolor=indianred, peripheries=1, style=filled, penwidth=2"; dot<<" label=\""<<res->getName()<<"\""<<"];"<<endl; for(int i=0; i<res->sucCount(); i++) { Link l = res->getLinkAt(i); Node* prov = l.to(); dot<<"\""<<res->getLabel()<<"\" -> "; dot<<"\""<<prov->getLabel()<<"\""; dot<<" [label=\""<<l.weight()<<"\"];"<<endl; } break; } default: break; }; } dot<<GRAPH_LEGEND; dot<<"}"<<endl; dot.close(); return true; }