use of org.vcell.model.rbm.ComponentStateDefinition in project vcell by virtualcell.
the class XmlReader method getRbmMolecularComponentPattern.
private MolecularComponentPattern getRbmMolecularComponentPattern(Element e, MolecularTypePattern mtp, MolecularType mt, Model newModel) {
RbmModelContainer mc = newModel.getRbmModelContainer();
String s = e.getAttributeValue(XMLTags.RbmMolecularComponentTag);
if (s == null || s.isEmpty()) {
System.out.println("XMLReader: getRbmMolecularComponentPattern: MolecularComponent name is missing.");
return null;
}
MolecularComponent c = mt.getMolecularComponent(s);
if (c == null) {
System.out.println("XMLReader: getRbmMolecularComponentPattern: encountered reference " + s + " to non-existing MolecularComponent.");
return null;
}
ComponentStatePattern csp = new ComponentStatePattern();
MolecularComponentPattern mcp = new MolecularComponentPattern(c);
s = e.getAttributeValue(XMLTags.RbmMolecularComponentStatePatternTag);
if (s != null && !s.isEmpty()) {
// state may be missing, we set it only if is present
ComponentStateDefinition cs = c.getComponentStateDefinition(s);
if (cs == null) {
System.out.println("XMLReader: getRbmMolecularComponentPattern: encountered reference " + s + " to non-existing MolecularComponentState.");
return null;
}
csp = new ComponentStatePattern(cs);
mcp.setComponentStatePattern(csp);
}
// s = e.getAttributeValue(XMLTags.RbmMolecularTypeAnyTag);
// if(s!=null && !s.isEmpty()) {
// boolean any = Boolean.parseBoolean(s);
// csp.setAny(any);
// }
s = e.getAttributeValue(XMLTags.RbmBondTypeAttrTag);
BondType bondType = BondType.fromSymbol(s);
if (bondType == BondType.Specified) {
int bondId = Integer.parseInt(s);
mcp.setBondId(bondId);
}
mcp.setBondType(bondType);
// sanity check, we only read the names here and make sure they make sense
Element bondElement = e.getChild(XMLTags.RbmBondTag, vcNamespace);
if (bondElement != null) {
// it's actually the name of the MolecularType inside this pattern
String molecularTypeName = bondElement.getAttributeValue(XMLTags.RbmMolecularTypePatternTag);
String molecularComponentName = bondElement.getAttributeValue(XMLTags.RbmMolecularComponentPatternTag);
if (molecularTypeName == null || molecularTypeName.isEmpty()) {
System.out.println("XMLReader: getRbmMolecularComponentPattern: Bond Attribute molecularTypeName missing.");
return mcp;
}
if (molecularComponentName == null || molecularComponentName.isEmpty()) {
System.out.println("XMLReader: getRbmMolecularComponentPattern: Bond Attribute molecularComponentName missing.");
return mcp;
}
// we'll have a bond here, it will be properly initialized during RbmObservable.resolveBonds() call !!!
Bond bond = new Bond();
mcp.setBond(bond);
}
return mcp;
}
use of org.vcell.model.rbm.ComponentStateDefinition in project vcell by virtualcell.
the class XmlReader method getRbmComponentStateDefinition.
private ComponentStateDefinition getRbmComponentStateDefinition(Element e, Model newModel) {
String s = e.getAttributeValue(XMLTags.NameAttrTag);
if (s == null || s.isEmpty()) {
System.out.println("XMLReader: getRbmComponentState: name is missing.");
return null;
}
ComponentStateDefinition cs = new ComponentStateDefinition(s);
// }
return cs;
}
use of org.vcell.model.rbm.ComponentStateDefinition in project vcell by virtualcell.
the class MolecularTypePropertiesPanel method addNewFromTree.
public void addNewFromTree() {
Object obj = molecularTypeTree.getLastSelectedPathComponent();
if (obj == null || !(obj instanceof BioModelNode)) {
return;
}
BioModelNode selectedNode = (BioModelNode) obj;
Object selectedUserObject = selectedNode.getUserObject();
if (selectedUserObject == molecularType) {
MolecularComponent molecularComponent = molecularType.createMolecularComponent();
molecularType.addMolecularComponent(molecularComponent);
bioModel.getModel().getRbmModelContainer().adjustSpeciesContextPatterns(molecularType, molecularComponent);
bioModel.getModel().getRbmModelContainer().adjustObservablesPatterns(molecularType, molecularComponent);
bioModel.getModel().getRbmModelContainer().adjustRulesPatterns(molecularType, molecularComponent);
molecularTypeTree.startEditingAtPath(molecularTypeTreeModel.findObjectPath(null, molecularComponent));
} else if (selectedUserObject instanceof MolecularComponent) {
MolecularComponent molecularComponent = (MolecularComponent) selectedUserObject;
ComponentStateDefinition componentStateDefinition = molecularComponent.createComponentStateDefinition();
molecularComponent.addComponentStateDefinition(componentStateDefinition);
bioModel.getModel().getRbmModelContainer().adjustObservablesPatterns(molecularType, molecularComponent, componentStateDefinition);
molecularTypeTree.startEditingAtPath(molecularTypeTreeModel.findObjectPath(null, componentStateDefinition));
}
}
use of org.vcell.model.rbm.ComponentStateDefinition 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.model.rbm.ComponentStateDefinition in project vcell by virtualcell.
the class MolecularTypeTableModel method pattern.
private String pattern(MolecularType molecularType) {
String str = molecularType.getName() + "(";
List<MolecularComponent> mcl = molecularType.getComponentList();
for (int i = 0; i < mcl.size(); i++) {
MolecularComponent mc = mcl.get(i);
str += mc.getName();
List<ComponentStateDefinition> csdl = mc.getComponentStateDefinitions();
for (int j = 0; j < csdl.size(); j++) {
ComponentStateDefinition cs = csdl.get(j);
str += "~" + cs.getName();
}
if (i < mcl.size() - 1) {
str += ",";
}
}
str += ")";
return str;
}
Aggregations