use of org.vcell.model.rbm.SpeciesPattern.Bond in project vcell by virtualcell.
the class Xmlproducer method getXML.
private Element getXML(MolecularComponentPattern param) {
Element e = new Element(XMLTags.RbmMolecularComponentPatternTag);
// e.setAttribute(XMLTags.NameAttrTag, mangle(param.getId()));
e.setAttribute(XMLTags.RbmMolecularComponentTag, mangle(param.getMolecularComponent().getName()));
ComponentStatePattern cs = param.getComponentStatePattern();
if (cs != null) {
if (cs.isAny()) {
e.setAttribute(XMLTags.RbmMolecularTypeAnyTag, String.valueOf(cs.isAny()));
} else {
if (cs.getComponentStateDefinition() != null) {
e.setAttribute(XMLTags.RbmMolecularComponentStatePatternTag, mangle(cs.getComponentStateDefinition().getName()));
} else {
System.err.println(ComponentStateDefinition.typeName + " is missing!");
}
}
}
Bond b = param.getBond();
if (b != null) {
Element e1 = new Element(XMLTags.RbmBondTag);
String test = mangle(b.molecularTypePattern.getMolecularType().getName());
e1.setAttribute(XMLTags.RbmMolecularTypePatternTag, test);
e1.setAttribute(XMLTags.RbmMolecularComponentPatternTag, mangle(b.molecularComponentPattern.getMolecularComponent().getName()));
e.addContent(e1);
}
BondType bt = param.getBondType();
if (bt == null) {
return e;
}
if (bt.equals(BondType.Specified)) {
String s = Integer.toString(param.getBondId());
e.setAttribute(XMLTags.RbmBondTypeAttrTag, s);
} else {
String s = bt.symbol;
e.setAttribute(XMLTags.RbmBondTypeAttrTag, s);
}
return e;
}
use of org.vcell.model.rbm.SpeciesPattern.Bond in project vcell by virtualcell.
the class RbmTreeCellRenderer method toHtmlWork.
private static final String toHtmlWork(BondLocal bl, boolean bSelected) {
MolecularComponentPattern mcp = bl.getMolecularComponentPattern();
BondType defaultType = BondType.Possible;
String bondText = " Bond(<b>" + defaultType.symbol + "</b>): " + "<b>" + BondType.Possible.name() + "</b>";
if (mcp != null) {
BondType bondType = mcp.getBondType();
if (bondType == BondType.Specified) {
Bond bond = mcp.getBond();
if (bond == null) {
bondText = "";
} else {
int id = mcp.getBondId();
String colorTextStart = bSelected ? "" : "<font color=" + "\"rgb(" + GraphConstants.bondHtmlColors[id].getRed() + "," + GraphConstants.bondHtmlColors[id].getGreen() + "," + GraphConstants.bondHtmlColors[id].getBlue() + ")\">";
String colorTextEnd = bSelected ? "" : "</font>";
// <sub> </sub>
bondText = colorTextStart + "<b>" + mcp.getBondId() + "</b>" + colorTextEnd;
bondText = " Bound(" + bondText + ") to: " + colorTextStart + toHtml(bond) + colorTextEnd;
}
} else {
bondText = " Bond(<b>" + bondType.symbol + "</b>): " + "<b>" + bondType.name() + "</b>";
}
}
return bondText;
}
use of org.vcell.model.rbm.SpeciesPattern.Bond 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.SpeciesPattern.Bond in project vcell by virtualcell.
the class SpeciesContext method checkBondsSufficiency.
private void checkBondsSufficiency(IssueContext issueContext, List<Issue> issueList, SpeciesPattern sp) {
if (sp.getMolecularTypePatterns().size() < 2) {
return;
}
int numberOfMolecularTypeCandidates = 0;
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
if (mtp.getComponentPatternList().size() > 0) {
numberOfMolecularTypeCandidates++;
}
}
if (numberOfMolecularTypeCandidates < 2) {
// we need at least 2 molecular types with at least 1 component each
return;
}
boolean atLeastOneBad = false;
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
boolean bondSpecifiedExists = false;
for (MolecularComponentPattern mcp : mtp.getComponentPatternList()) {
if (mcp.getBondType() == BondType.Specified) {
Bond b = mcp.getBond();
if (b != null) {
bondSpecifiedExists = true;
break;
}
}
}
if (!bondSpecifiedExists) {
atLeastOneBad = true;
}
}
if (atLeastOneBad) {
String msg = "Each Molecular Pattern of the Species Pattern " + sp.toString() + " needs at least one explicit Bond.\n";
IssueSource parent = issueContext.getContextObject();
issueList.add(new Issue(parent, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.ERROR));
}
}
Aggregations