use of org.vcell.util.Pair in project vcell by virtualcell.
the class MolecularTypePropertiesPanel method deleteFromTree.
public void deleteFromTree() {
Object obj = molecularTypeTree.getLastSelectedPathComponent();
if (obj == null || !(obj instanceof BioModelNode)) {
return;
}
BioModelNode selectedNode = (BioModelNode) obj;
TreeNode parent = selectedNode.getParent();
if (!(parent instanceof BioModelNode)) {
return;
}
BioModelNode parentNode = (BioModelNode) parent;
Object selectedUserObject = selectedNode.getUserObject();
if (selectedUserObject instanceof MolecularComponent) {
MolecularComponent mc = (MolecularComponent) selectedUserObject;
Object userObject = parentNode.getUserObject();
if (userObject instanceof MolecularType) {
MolecularType mt = (MolecularType) userObject;
// detailed verifications will be done there, to see if they are being used in reactions, species, observables
if (!mc.getComponentStateDefinitions().isEmpty()) {
String[] options = { "OK" };
String errMsg = mc.getDisplayType() + " '<b>" + mc.getDisplayName() + "</b>' cannot be deleted because it contains explicit States.";
errMsg += "<br>Please delete each individual State first.";
errMsg += "<br><br>Detailed usage information will be provided at that time to help you decide.";
errMsg = "<html>" + errMsg + "</html>";
JOptionPane.showOptionDialog(this.getParent().getParent(), errMsg, "Delete " + mc.getDisplayType(), JOptionPane.NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
return;
}
// we find and display component usage information to help the user decide
Map<String, Pair<Displayable, SpeciesPattern>> usedHere = new LinkedHashMap<String, Pair<Displayable, SpeciesPattern>>();
bioModel.getModel().getRbmModelContainer().findComponentUsage(mt, mc, usedHere);
if (!usedHere.isEmpty()) {
String errMsg = mc.dependenciesToHtml(usedHere);
errMsg += "<br><br>Delete anyway?";
errMsg = "<html>" + errMsg + "</html>";
int dialogButton = JOptionPane.YES_NO_OPTION;
int returnCode = JOptionPane.showConfirmDialog(this.getParent().getParent(), errMsg, "Delete " + mc.getDisplayType(), dialogButton);
if (returnCode == JOptionPane.YES_OPTION) {
// keep this code in sync with MolecularTypeTableModel.setValueAt
if (bioModel.getModel().getRbmModelContainer().delete(mt, mc) == true) {
mt.removeMolecularComponent(mc);
}
} else {
return;
}
} else {
if (bioModel.getModel().getRbmModelContainer().delete(mt, mc) == true) {
mt.removeMolecularComponent(mc);
}
}
}
} else if (selectedUserObject instanceof ComponentStateDefinition) {
ComponentStateDefinition csd = (ComponentStateDefinition) selectedUserObject;
Object userObject = parentNode.getUserObject();
if (!(userObject instanceof MolecularComponent)) {
System.out.println("Unexpected parent in tree hierarchy for " + ComponentStateDefinition.typeName + " " + csd.getDisplayName() + "!");
return;
}
MolecularComponent mc = (MolecularComponent) userObject;
TreeNode grandParent = parentNode.getParent();
BioModelNode grandParentNode = (BioModelNode) grandParent;
userObject = grandParentNode.getUserObject();
if (!(userObject instanceof MolecularType)) {
System.out.println("Unexpected parent in tree hierarchy for " + mc.getDisplayType() + " " + mc.getDisplayName() + "!");
return;
}
MolecularType mt = (MolecularType) userObject;
Map<String, Pair<Displayable, SpeciesPattern>> usedHere = new LinkedHashMap<String, Pair<Displayable, SpeciesPattern>>();
bioModel.getModel().getRbmModelContainer().findStateUsage(mt, mc, csd, usedHere);
if (!usedHere.isEmpty()) {
String errMsg = csd.dependenciesToHtml(usedHere);
errMsg += "<br><br>Delete anyway?";
errMsg = "<html>" + errMsg + "</html>";
int dialogButton = JOptionPane.YES_NO_OPTION;
int returnCode = JOptionPane.showConfirmDialog(this.getParent().getParent(), errMsg, "Delete " + ComponentStateDefinition.typeName, dialogButton);
if (returnCode == JOptionPane.YES_OPTION) {
// keep this code in sync with MolecularTypeTableModel.setValueAt
if (bioModel.getModel().getRbmModelContainer().delete(mt, mc, csd) == true) {
// this stays
mc.deleteComponentStateDefinition(csd);
}
} else {
return;
}
} else {
if (bioModel.getModel().getRbmModelContainer().delete(mt, mc, csd) == true) {
// this stays
mc.deleteComponentStateDefinition(csd);
}
}
// mc.deleteComponentStateDefinition(csd);
}
}
use of org.vcell.util.Pair in project vcell by virtualcell.
the class SEDMLExporter method getTargetAttributeXPath.
private XPathTarget getTargetAttributeXPath(SymbolTableEntry ste, Map<Pair<String, String>, String> l2gMap) {
// to get Xpath string for variables.
SBMLSupport sbmlSupport = new SBMLSupport();
XPathTarget targetXpath = null;
if (ste instanceof SpeciesContext || ste instanceof SpeciesContextSpecParameter) {
String speciesId = ste.getName();
// can change species initial concentration or amount
String speciesAttr = "";
if (ste instanceof SpeciesContextSpecParameter) {
SpeciesContextSpecParameter scsp = (SpeciesContextSpecParameter) ste;
speciesId = (scsp).getSpeciesContext().getName();
if (scsp.getRole() == SpeciesContextSpec.ROLE_InitialConcentration) {
speciesAttr = scsp.getName();
}
if (scsp.getRole() == SpeciesContextSpec.ROLE_InitialCount) {
speciesAttr = scsp.getName();
}
}
if (speciesAttr.length() < 1) {
targetXpath = new XPathTarget(sbmlSupport.getXPathForCompartment(speciesId));
} else if (speciesAttr.equalsIgnoreCase("initialConcentration") || speciesAttr.equalsIgnoreCase("initConc")) {
targetXpath = new XPathTarget(sbmlSupport.getXPathForSpecies(speciesId, SpeciesAttribute.initialConcentration));
} else if (speciesAttr.equalsIgnoreCase("initialCount")) {
targetXpath = new XPathTarget(sbmlSupport.getXPathForSpecies(speciesId, SpeciesAttribute.initialAmount));
} else {
throw new RuntimeException("Unknown species attribute '" + speciesAttr + "'; cannot get xpath target for species '" + speciesId + "'.");
}
targetXpath = new XPathTarget(sbmlSupport.getXPathForSpecies(speciesId));
} else if (ste instanceof ModelParameter) {
// can only change parameter value.
targetXpath = new XPathTarget(sbmlSupport.getXPathForGlobalParameter(ste.getName(), ParameterAttribute.value));
} else if (ste instanceof Structure || ste instanceof Structure.StructureSize || (ste instanceof StructureMappingParameter && ((StructureMappingParameter) ste).getRole() == StructureMapping.ROLE_Size)) {
String compartmentId = ste.getName();
// can change compartment size or spatial dimension, but in vcell, we cannot change compartment dimension.
String compartmentAttr = "";
if (ste instanceof Structure.StructureSize) {
compartmentId = ((StructureSize) ste).getStructure().getName();
compartmentAttr = ((StructureSize) ste).getName();
}
if (ste instanceof StructureMappingParameter) {
StructureMappingParameter smp = (StructureMappingParameter) ste;
compartmentId = smp.getStructure().getName();
if (smp.getRole() == StructureMapping.ROLE_Size) {
compartmentAttr = smp.getName();
}
}
if (compartmentAttr.length() < 1) {
targetXpath = new XPathTarget(sbmlSupport.getXPathForCompartment(compartmentId));
} else if (compartmentAttr.equalsIgnoreCase("size")) {
targetXpath = new XPathTarget(sbmlSupport.getXPathForCompartment(compartmentId, CompartmentAttribute.size));
} else {
throw new RuntimeException("Unknown compartment attribute '" + compartmentAttr + "'; cannot get xpath target for compartment '" + compartmentId + "'.");
}
} else if (ste instanceof KineticsParameter) {
KineticsParameter kp = (KineticsParameter) ste;
String reactionID = kp.getKinetics().getReactionStep().getName();
String parameterID = kp.getName();
Pair<String, String> key = new Pair(reactionID, parameterID);
String value = l2gMap.get(key);
if (value == null) {
// stays as local parameter
targetXpath = new XPathTarget(sbmlSupport.getXPathForKineticLawParameter(reactionID, parameterID, ParameterAttribute.value));
} else {
// became a global in SBML, we need to refer to that global
targetXpath = new XPathTarget(sbmlSupport.getXPathForGlobalParameter(value, ParameterAttribute.value));
}
} else {
System.err.println("Entity should be SpeciesContext, Structure, ModelParameter : " + ste.getClass());
throw new RuntimeException("Unknown entity in SBML model");
}
return targetXpath;
}
Aggregations