std::string SEDMLUtils::translateTargetXpathInSBMLId(const std::string &xpath, std::string& SBMLType) { std::vector<std::string> xpathStrings; std::string id, nextString; splitStrings(xpath, ':', xpathStrings); nextString = xpathStrings[xpathStrings.size() - 1]; splitStrings(nextString, '[', xpathStrings); SBMLType = xpathStrings[0]; nextString = xpathStrings[xpathStrings.size() - 1]; splitStrings(nextString, '=', xpathStrings); nextString = xpathStrings[xpathStrings.size() - 1]; splitStrings(nextString, ']', xpathStrings); id = xpathStrings[0]; //remove the remaining unwanted characters removeCharactersFromString(id, "\"']"); return id; }
GraphSize OperationDrawer::drawClass(DiagramDrawer &drawer, const OperationClass &node, const OperationDrawOptions & /*options*/, bool draw) { GraphPoint startpos = node.getPosition(); const ModelType *type = node.getType(); OovStringRef const typeName = type->getName(); int rectx = 0; int recty = 0; const ModelClassifier *classifier = type->getClass(); if(classifier) { if(draw) { drawer.groupText(true, false); } OovStringVec strs; std::vector<GraphPoint> positions; strs.push_back(typeName); splitStrings(strs, 30, 40); for(auto const &str : strs) { recty += mCharHeight + (mPad * 2); positions.push_back(GraphPoint(startpos.x+mPad, startpos.y + recty - mPad)); int curx = static_cast<int>(drawer.getTextExtentWidth(str)) + mPad*2; if(curx > rectx) rectx = curx; } if(draw) { drawer.groupShapes(true, Color(0,0,0), Color(245,245,255)); drawer.drawRect(GraphRect(startpos.x, startpos.y, rectx, recty)); drawer.groupShapes(false, Color(0,0,0), Color(245,245,255)); for(size_t i=0; i<strs.size(); i++) { drawer.drawText(positions[i], strs[i]); } drawer.groupText(false, false); } } return GraphSize(rectx, recty); }
std::string SEDMLUtils::getXPathAndName(std::string& sbmlId, const std::string &type, const CModel *pModel, const CCopasiDataModel& dataModel) { std::vector<std::string> stringsContainer; std::string targetXPathString; const std::map<CCopasiObject*, SBase*>& copasi2sbmlmap = const_cast<CCopasiDataModel&>(dataModel).getCopasi2SBMLMap(); std::string displayName = sbmlId; if (copasi2sbmlmap.size() == 0) { // this should not be happening, as this is used to verify the element. return ""; } std::map<CCopasiObject*, SBase*>::const_iterator pos; if (type == "Concentration" || type == "InitialConcentration") { targetXPathString = "/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=\'"; //remove unwanted characters from the plot item object name removeCharactersFromString(displayName, "[]"); if (type == "InitialConcentration") { displayName = displayName.substr(0, displayName.length() - 2); } sbmlId = findIdByNameAndType(copasi2sbmlmap, SBML_SPECIES, displayName); if (!sbmlId.empty()) { return targetXPathString + sbmlId + "\']"; } else return ""; } else if (type == "Flux") { targetXPathString = "/sbml:sbml/sbml:model/sbml:listOfReactions/sbml:reaction[@id=\'"; splitStrings(displayName, ')', stringsContainer); displayName = stringsContainer[0]; removeCharactersFromString(displayName, "("); sbmlId = findIdByNameAndType(copasi2sbmlmap, SBML_REACTION, displayName); if (!sbmlId.empty()) { return targetXPathString + sbmlId + "\']"; } else return ""; } else if (type == "Value" || type == "InitialValue") { if (type == "InitialValue") { displayName = displayName.substr(0, displayName.find(".InitialValue")); } targetXPathString = "/sbml:sbml/sbml:model/sbml:listOfParameters/sbml:parameter[@id=\'"; splitStrings(displayName, '[', stringsContainer); if (stringsContainer.size() == 1) { // not found ... might be a local parameter removeCharactersFromString(displayName, "()"); splitStrings(displayName, '.', stringsContainer); if (stringsContainer.size() == 2) { sbmlId = stringsContainer[0] + "_" + stringsContainer[1]; std::stringstream xpath; xpath << "/sbml:sbml/sbml:model/sbml:listOfReactions/sbml:reaction[@id=\'"; xpath << stringsContainer[0]; xpath << "\']/sbml:kineticLaw/sbml:listOfParameters/sbml:parameter[@id=\'"; xpath << stringsContainer[1]; xpath << "\']"; return xpath.str(); } } displayName = stringsContainer[1]; removeCharactersFromString(displayName, "]"); sbmlId = findIdByNameAndType(copasi2sbmlmap, SBML_PARAMETER , displayName); if (sbmlId.empty()) sbmlId = findIdByNameAndType(copasi2sbmlmap, SBML_LOCAL_PARAMETER , displayName); if (!sbmlId.empty()) { return targetXPathString + sbmlId + "\']"; } else return ""; } else if (type == "Volume" || type == "InitialVolume") { targetXPathString = "/sbml:sbml/sbml:model/sbml:listOfCompartments/sbml:compartment[@id=\'"; splitStrings(displayName, '[', stringsContainer); displayName = stringsContainer[1]; if (type == "InitialVolume") { displayName = displayName.substr(0, displayName.find(".InitialVolume")); } if (type == "Volume") { displayName = displayName.substr(0, displayName.find(".Volume")); } removeCharactersFromString(displayName, "]"); sbmlId = findIdByNameAndType(copasi2sbmlmap, SBML_COMPARTMENT, displayName); if (!sbmlId.empty()) { return targetXPathString + sbmlId + "\']"; } else return ""; } else if (type == "Time" || type == "Initial Time") return SEDML_TIME_URN; sbmlId = ""; return targetXPathString; }