use of org.vcell.model.rbm.MolecularComponent in project vcell by virtualcell.
the class XmlReader method getRbmMolecularType.
private MolecularType getRbmMolecularType(Element e, Model newModel) {
String s = e.getAttributeValue(XMLTags.NameAttrTag);
if (s == null || s.isEmpty()) {
System.out.println("XMLReader: getRBMMolecularType: name is missing.");
return null;
}
MolecularType mt = new MolecularType(s, newModel);
final String attributeValue = e.getAttributeValue(XMLTags.RbmMolecularTypeAnchorAllAttrTag);
if (attributeValue != null) {
boolean anchorAll = Boolean.parseBoolean(attributeValue);
mt.setAnchorAll(anchorAll);
}
List<Element> anchors = e.getChildren(XMLTags.RbmMolecularTypeAnchorTag, vcNamespace);
for (Element element : anchors) {
String anchor = element.getAttributeValue(XMLTags.StructureAttrTag);
Structure structure = newModel.getStructure(anchor);
if (structure == null) {
System.out.println("XMLReader: getRbmMolecularType: anchor is missing from the structures list.");
}
if (structure != null) {
mt.addAnchor(structure);
}
}
List<Element> children = e.getChildren(XMLTags.RbmMolecularComponentTag, vcNamespace);
for (Element element : children) {
MolecularComponent mc = getRbmMolecularComponent(element, newModel);
if (mc != null) {
mt.addMolecularComponent(mc);
}
}
return mt;
}
use of org.vcell.model.rbm.MolecularComponent in project vcell by virtualcell.
the class RbmTreeCellEditor method getTreeCellEditorComponent.
@Override
public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
Component component = null;
realEditor = defaultCellEditor;
if (value instanceof BioModelNode) {
BioModelNode node = (BioModelNode) value;
Object userObject = node.getUserObject();
String text = null;
Icon icon = null;
if (userObject instanceof MolecularType) {
text = ((MolecularType) userObject).getName();
icon = VCellIcons.rbmMolecularTypeIcon;
} else if (userObject instanceof MolecularTypePattern) {
text = ((MolecularTypePattern) userObject).getMolecularType().getName();
icon = VCellIcons.rbmMolecularTypeIcon;
} else if (userObject instanceof MolecularComponent) {
BioModelNode parentNode = (BioModelNode) node.getParent();
Object parentObject = parentNode == null ? null : parentNode.getUserObject();
// TODO: look for the proper icon
icon = VCellIcons.rbmComponentErrorIcon;
if (parentObject instanceof MolecularType) {
text = ((MolecularComponent) userObject).getName();
} else if (parentObject instanceof MolecularTypePattern) {
realEditor = getMolecularComponentPatternCellEditor();
getMolecularComponentPatternCellEditor().molecularTypePattern = ((MolecularTypePattern) parentObject);
// find SpeciesPattern
while (true) {
parentNode = (BioModelNode) parentNode.getParent();
if (parentNode == null) {
break;
}
if (parentNode.getUserObject() instanceof RbmObservable) {
((MolecularComponentPatternCellEditor) realEditor).owner = MolecularComponentPatternCellEditor.observable;
getMolecularComponentPatternCellEditor().speciesPattern = ((RbmObservable) parentNode.getUserObject()).getSpeciesPattern(0);
break;
}
if (parentNode.getUserObject() instanceof ReactionRule) {
((MolecularComponentPatternCellEditor) realEditor).owner = MolecularComponentPatternCellEditor.reaction;
ReactionRulePropertiesTreeModel tm = (ReactionRulePropertiesTreeModel) tree.getModel();
switch(tm.getParticipantType()) {
case Reactant:
getMolecularComponentPatternCellEditor().speciesPattern = ((ReactionRule) parentNode.getUserObject()).getReactantPattern(0).getSpeciesPattern();
break;
case Product:
getMolecularComponentPatternCellEditor().speciesPattern = ((ReactionRule) parentNode.getUserObject()).getProductPattern(0).getSpeciesPattern();
break;
}
}
if (parentNode.getUserObject() instanceof SpeciesContext) {
((MolecularComponentPatternCellEditor) realEditor).owner = MolecularComponentPatternCellEditor.species;
getMolecularComponentPatternCellEditor().speciesPattern = ((SpeciesContext) parentNode.getUserObject()).getSpeciesPattern();
break;
}
}
}
} else if (userObject instanceof ComponentStateDefinition) {
text = ((ComponentStateDefinition) userObject).getName();
icon = VCellIcons.rbmComponentStateIcon;
} else if (userObject instanceof RbmObservable) {
text = ((RbmObservable) userObject).getName();
icon = VCellIcons.rbmObservableIcon;
}
renderer.setOpenIcon(icon);
renderer.setClosedIcon(icon);
renderer.setLeafIcon(icon);
component = super.getTreeCellEditorComponent(tree, value, isSelected, expanded, leaf, row);
if (editingComponent instanceof JTextField) {
JTextField textField = (JTextField) editingComponent;
textField.setText(text);
}
}
return component;
}
use of org.vcell.model.rbm.MolecularComponent in project vcell by virtualcell.
the class RbmTreeCellRenderer method toHtmlWithTip.
public static final String toHtmlWithTip(MolecularComponentPattern mcp, boolean bShowWords) {
String text = (bShowWords ? MolecularComponent.typeName : "") + " <b>" + mcp.getMolecularComponent().getName() + "</b>";
MolecularComponent mc = mcp.getMolecularComponent();
if (mc.getComponentStateDefinitions().size() > 0) {
// we don't show the state if nothing to choose from
StateLocal sl = new StateLocal(mcp);
text += "   " + toHtmlWorkShort(sl);
}
BondLocal bl = new BondLocal(mcp);
text += "   " + toHtmlWorkShort(bl);
String htmlText = text + VCellErrorMessages.RightClickComponentToEdit;
htmlText = "<html>" + htmlText + "</html>";
return htmlText;
}
use of org.vcell.model.rbm.MolecularComponent in project vcell by virtualcell.
the class ReactionRuleEditorPropertiesPanel method manageComponentPatternFromShape.
public void manageComponentPatternFromShape(final Object selectedObject, PointLocationInShapeContext locationContext, final ReactionRulePropertiesTreeModel treeModel, ShowWhat showWhat, boolean bIsReactant) {
popupFromShapeMenu.removeAll();
final MolecularComponentPattern mcp = (MolecularComponentPattern) selectedObject;
final MolecularComponent mc = mcp.getMolecularComponent();
boolean anyStateProhibited = false;
boolean explicitStateProhibited = false;
boolean existBondProhibited = false;
boolean noneBondProhibited = false;
boolean possibleBondProhibited = false;
boolean specifiedBondProhibited = false;
if (!bIsReactant) {
// product has restrictions for states and bonds, depending on reactant
BondType reactantComponentBondType = reactionRule.getReactantComponentBondType(mcp);
if (reactantComponentBondType != null && reactantComponentBondType == BondType.Exists) {
// has external +
// existBondProhibited = true;
noneBondProhibited = true;
possibleBondProhibited = true;
specifiedBondProhibited = true;
} else if (reactantComponentBondType != null && reactantComponentBondType == BondType.None) {
// is unbound -
existBondProhibited = true;
// noneBondProhibited = true;
possibleBondProhibited = true;
// specifiedBondProhibited = true;
} else if (reactantComponentBondType != null && reactantComponentBondType == BondType.Possible) {
// may be bound ?
existBondProhibited = true;
noneBondProhibited = true;
// possibleBondProhibited = true;
specifiedBondProhibited = true;
} else if (reactantComponentBondType != null && reactantComponentBondType == BondType.Specified) {
existBondProhibited = true;
// noneBondProhibited = true;
possibleBondProhibited = true;
// specifiedBondProhibited = true;
}
// if it's null nothing is prohibited
ComponentStatePattern reactantComponentStatePattern = reactionRule.getReactantComponentState(mcp);
if (reactantComponentStatePattern != null && reactantComponentStatePattern.isAny()) {
explicitStateProhibited = true;
} else if (reactantComponentStatePattern != null && !reactantComponentStatePattern.isAny()) {
anyStateProhibited = true;
}
// if reactantComponentStatePattern is null nothing is prohibited, we may not have a matching reactant for this product
}
// ------------------------------------------------------------------- State
if (showWhat == ShowWhat.ShowState && mc.getComponentStateDefinitions().size() != 0) {
String prefix = "State: ";
String csdCurrentName = "";
final Map<String, String> itemMap = new LinkedHashMap<String, String>();
if (mcp.getComponentStatePattern() == null || mcp.getComponentStatePattern().isAny()) {
csdCurrentName = "<html>" + prefix + "<b>" + ComponentStatePattern.strAny + "</b></html>";
} else {
csdCurrentName = "<html>" + prefix + ComponentStatePattern.strAny + "</html>";
}
itemMap.put(csdCurrentName, ComponentStatePattern.strAny);
for (final ComponentStateDefinition csd : mc.getComponentStateDefinitions()) {
csdCurrentName = "";
if (mcp.getComponentStatePattern() != null && !mcp.getComponentStatePattern().isAny()) {
ComponentStateDefinition csdCurrent = mcp.getComponentStatePattern().getComponentStateDefinition();
csdCurrentName = csdCurrent.getName();
}
String name = csd.getName();
if (name.equals(csdCurrentName)) {
// currently selected menu item is shown in bold
name = "<html>" + prefix + "<b>" + name + "</b></html>";
} else {
name = "<html>" + prefix + name + "</html>";
}
itemMap.put(name, csd.getName());
}
for (String key : itemMap.keySet()) {
JMenuItem menuItem = new JMenuItem(key);
if (!bIsReactant) {
String name = itemMap.get(key);
if (name.equals(ComponentStatePattern.strAny) && anyStateProhibited) {
menuItem.setEnabled(false);
} else if (!name.equals(ComponentStatePattern.strAny) && explicitStateProhibited) {
menuItem.setEnabled(false);
}
}
popupFromShapeMenu.add(menuItem);
menuItem.setIcon(VCellIcons.rbmComponentStateIcon);
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String key = e.getActionCommand();
String name = itemMap.get(key);
ComponentStatePattern csp = new ComponentStatePattern();
if (!name.equals(ComponentStatePattern.strAny)) {
ComponentStateDefinition csd = mcp.getMolecularComponent().getComponentStateDefinition(name);
if (csd == null) {
throw new RuntimeException("Missing ComponentStateDefinition " + name + " for Component " + mcp.getMolecularComponent().getName());
}
csp = new ComponentStatePattern(csd);
}
mcp.setComponentStatePattern(csp);
if (bIsReactant) {
reflectStateToProduct(mcp, csp);
productTreeModel.populateTree();
}
treeModel.populateTree();
shapePanel.repaint();
}
});
}
}
if (showWhat == ShowWhat.ShowState) {
return;
}
// ------------------------------------------------------------------------------------------- Bonds
final MolecularTypePattern mtp = locationContext.getMolecularTypePattern();
final SpeciesPattern sp = locationContext.getSpeciesPattern();
JMenu editBondMenu = new JMenu();
final String specifiedString = mcp.getBondType() == BondType.Specified ? "<html><b>" + "Site bond specified" + "</b></html>" : "<html>" + "Site bond specified" + "</html>";
editBondMenu.setText(specifiedString);
editBondMenu.setToolTipText("Specified");
editBondMenu.removeAll();
editBondMenu.setEnabled(!specifiedBondProhibited);
final Map<String, Bond> itemMap = new LinkedHashMap<String, Bond>();
String noneString = mcp.getBondType() == BondType.None ? "<html><b>" + "Site is unbound" + "</b></html>" : "<html>" + "Site is unbound" + "</html>";
// Site is bound
String existsString = mcp.getBondType() == BondType.Exists ? "<html><b>" + "Site has external bond" + "</b></html>" : "<html>" + "Site has external bond" + "</html>";
String possibleString = mcp.getBondType() == BondType.Possible ? "<html><b>" + "Site may be bound" + "</b></html>" : "<html>" + "Site may be bound" + "</html>";
itemMap.put(noneString, null);
itemMap.put(existsString, null);
itemMap.put(possibleString, null);
if (mtp != null && sp != null && !specifiedBondProhibited) {
List<Bond> bondPartnerChoices = sp.getAllBondPartnerChoices(mtp, mc);
for (Bond b : bondPartnerChoices) {
// if(b.equals(mcp.getBond())) {
// continue; // if the mcp has a bond already we don't offer it
// }
int index = 0;
if (mcp.getBondType() == BondType.Specified) {
index = mcp.getBondId();
} else {
index = sp.nextBondId();
}
itemMap.put(b.toHtmlStringLong(sp, mtp, mc, index), b);
// itemMap.put(b.toHtmlStringLong(sp, index), b);
}
}
int index = 0;
Graphics gc = shapePanel.getGraphics();
for (String name : itemMap.keySet()) {
JMenuItem menuItem = new JMenuItem(name);
if (!bIsReactant) {
if (name.equals(noneString) && noneBondProhibited) {
menuItem.setEnabled(false);
} else if (name.equals(existsString) && existBondProhibited) {
menuItem.setEnabled(false);
} else if (name.equals(possibleString) && possibleBondProhibited) {
menuItem.setEnabled(false);
} else if (!name.equals(noneString) && !name.equals(existsString) && !name.equals(possibleString) && specifiedBondProhibited) {
menuItem.setEnabled(false);
}
}
if (index == 0) {
menuItem.setIcon(VCellIcons.rbmBondNoneIcon);
menuItem.setToolTipText("None");
popupFromShapeMenu.add(menuItem);
} else if (index == 1) {
menuItem.setIcon(VCellIcons.rbmBondExistsIcon);
menuItem.setToolTipText("Exists");
popupFromShapeMenu.add(menuItem);
} else if (index == 2) {
menuItem.setIcon(VCellIcons.rbmBondPossibleIcon);
menuItem.setToolTipText("Possible");
popupFromShapeMenu.add(menuItem);
} else if (index > 2) {
// we skip None, Exists, Possible
Bond b = itemMap.get(name);
// clone of the sp, with only the bond of interest
SpeciesPattern spBond = new SpeciesPattern(bioModel.getModel(), sp);
spBond.resetBonds();
spBond.resetStates();
MolecularTypePattern mtpFrom = spBond.getMolecularTypePattern(mtp.getMolecularType().getName(), mtp.getIndex());
MolecularComponentPattern mcpFrom = mtpFrom.getMolecularComponentPattern(mc);
MolecularTypePattern mtpTo = spBond.getMolecularTypePattern(b.molecularTypePattern.getMolecularType().getName(), b.molecularTypePattern.getIndex());
MolecularComponentPattern mcpTo = mtpTo.getMolecularComponentPattern(b.molecularComponentPattern.getMolecularComponent());
spBond.setBond(mtpTo, mcpTo, mtpFrom, mcpFrom);
Icon icon = new SpeciesPatternSmallShape(3, 4, spBond, gc, reactionRule, false, issueManager);
((SpeciesPatternSmallShape) icon).setDisplayRequirements(DisplayRequirements.highlightBonds);
menuItem.setIcon(icon);
editBondMenu.add(menuItem);
}
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String name = e.getActionCommand();
BondType btBefore = mcp.getBondType();
if (name.equals(noneString)) {
if (btBefore == BondType.Specified) {
// specified -> not specified
// change the partner to possible
mcp.getBond().molecularComponentPattern.setBondType(BondType.Possible);
mcp.getBond().molecularComponentPattern.setBond(null);
}
mcp.setBondType(BondType.None);
mcp.setBond(null);
} else if (name.equals(existsString)) {
if (btBefore == BondType.Specified) {
// specified -> exists
// change the partner to possible
mcp.getBond().molecularComponentPattern.setBondType(BondType.Possible);
mcp.getBond().molecularComponentPattern.setBond(null);
}
mcp.setBondType(BondType.Exists);
mcp.setBond(null);
} else if (name.equals(possibleString)) {
if (btBefore == BondType.Specified) {
// specified -> possible
// change the partner to possible
mcp.getBond().molecularComponentPattern.setBondType(BondType.Possible);
mcp.getBond().molecularComponentPattern.setBond(null);
}
mcp.setBondType(BondType.Possible);
mcp.setBond(null);
} else {
if (btBefore != BondType.Specified) {
// if we go from a non-specified to a specified we need to find the next available
// bond id, so that we can choose the color for displaying the bond
// a bad bond id, like -1, will crash badly when trying to choose the color
int bondId = sp.nextBondId();
mcp.setBondId(bondId);
} else {
// specified -> specified
// change the old partner to possible, continue using the bond id
mcp.getBond().molecularComponentPattern.setBondType(BondType.Possible);
mcp.getBond().molecularComponentPattern.setBond(null);
}
mcp.setBondType(BondType.Specified);
Bond b = itemMap.get(name);
mcp.setBond(b);
mcp.getBond().molecularComponentPattern.setBondId(mcp.getBondId());
sp.resolveBonds();
}
// when the tree will be gone
if (bIsReactant) {
reflectBondToProduct(mcp);
productTreeModel.populateTree();
}
treeModel.populateTree();
shapePanel.repaint();
}
});
index++;
}
popupFromShapeMenu.add(editBondMenu);
}
use of org.vcell.model.rbm.MolecularComponent in project vcell by virtualcell.
the class ReactionRulePropertiesTreeModel method createMolecularTypePatternNode.
private BioModelNode createMolecularTypePatternNode(MolecularTypePattern molecularTypePattern) {
MolecularType molecularType = molecularTypePattern.getMolecularType();
BioModelNode node = new BioModelNode(molecularTypePattern, true);
if (molecularTypePattern.hasExplicitParticipantMatch()) {
ParticipantMatchLabelLocal pmll = new ParticipantMatchLabelLocal(molecularTypePattern.getParticipantMatchLabel());
BioModelNode nm = new BioModelNode(pmll, true);
node.add(nm);
}
for (MolecularComponent mc : molecularType.getComponentList()) {
// dead code, we don't show state and bond
if (bShowDetails || molecularTypePattern.getMolecularComponentPattern(mc).isbVisible()) {
BioModelNode n = createMolecularComponentPatternNode(molecularTypePattern.getMolecularComponentPattern(mc));
if (n != null) {
node.add(n);
}
}
}
return node;
}
Aggregations