use of org.vcell.model.rbm.MolecularComponentPattern in project vcell by virtualcell.
the class ReactionRule method gatherIssues.
// -----------------------------------------------------------------------------------------------------
//
public void gatherIssues(IssueContext issueContext, List<Issue> issueList) {
issueContext = issueContext.newChildContext(ContextType.ReactionRule, this);
if (name == null || name.isEmpty()) {
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, "Label is missing", Issue.Severity.ERROR));
}
if (name != null && name.startsWith("_reverse_")) {
String msg = "The prefix '_reverse_' is a BioNetGen reserved keyword. Please rename the " + typeName + ".";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.ERROR));
}
for (MolecularType mt : model.getRbmModelContainer().getMolecularTypeList()) {
if (mt.getName().equals(name)) {
String msg = "Name '" + name + "' name already used for " + mt.getDisplayType() + " '" + mt.getName() + "'.";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.WARNING));
// no need to look further, we won't find another match since Molecule names are unique
break;
}
}
if (reactantPatterns == null) {
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, "Reactant Pattern is null", Issue.Severity.ERROR));
} else if (reactantPatterns.isEmpty()) {
String msg = typeName + " " + name + " does not have any Reactants.\n";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.ERROR));
} else {
checkReactantPatterns(issueContext, issueList);
for (ReactantPattern rp : reactantPatterns) {
issueContext = issueContext.newChildContext(ContextType.ReactionRule, this);
rp.getSpeciesPattern().gatherIssues(issueContext, issueList);
}
}
if (productPatterns == null) {
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, "Product Pattern is null", Issue.Severity.ERROR));
} else if (productPatterns.isEmpty()) {
String msg = typeName + " " + name + " does not have any Products.\n";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.ERROR));
} else {
checkProductPatterns(issueContext, issueList);
for (ProductPattern pp : productPatterns) {
issueContext = issueContext.newChildContext(ContextType.ReactionRule, this);
pp.getSpeciesPattern().gatherIssues(issueContext, issueList);
}
}
kineticLaw.gatherIssues(issueContext, issueList);
if (molecularTypeMappings == null) {
issueList.add(new Issue(this, issueContext, IssueCategory.KineticsExpressionMissing, MolecularType.typeName + " Mapping is null", Issue.Severity.WARNING));
}
// the structure must be in the list of anchors, if anchors are being used -------------------------------
for (ReactantPattern rp : reactantPatterns) {
SpeciesPattern sp = rp.getSpeciesPattern();
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
MolecularType mt = mtp.getMolecularType();
if (mt.isAnchorAll()) {
// no restrictions for this molecular type
continue;
}
if (!mt.getAnchors().contains(rp.getStructure())) {
String message = "The Structure " + structure.getName() + " is not allowed for the Molecule " + mt.getDisplayName();
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.ERROR));
}
}
}
for (ProductPattern pp : productPatterns) {
SpeciesPattern sp = pp.getSpeciesPattern();
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
MolecularType mt = mtp.getMolecularType();
if (mt.isAnchorAll()) {
// no restrictions for this molecular type
continue;
}
if (!mt.getAnchors().contains(pp.getStructure())) {
String message = "The Structure " + structure.getName() + " is not allowed for the Molecule " + mt.getDisplayName();
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.ERROR));
}
}
}
for (ReactantPattern rp : reactantPatterns) {
SpeciesPattern sp = rp.getSpeciesPattern();
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
String name = mtp.getMolecularType().getDisplayName().toLowerCase();
if (name.equals("trash")) {
String message = "'Trash' is a reserved NFSim keyword and it cannot be used as a reactant.";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.WARNING));
}
}
}
if (bReversible) {
for (ProductPattern pp : productPatterns) {
SpeciesPattern sp = pp.getSpeciesPattern();
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
String name = mtp.getMolecularType().getDisplayName().toLowerCase();
if (name.equals("trash")) {
String message = "'Trash' is a reserved NFSim keyword and it cannot be used as a reactant.";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.WARNING));
}
}
}
}
// match management
issueContext = issueContext.newChildContext(ContextType.ReactionRule, this);
Map<String, Integer> matchedReactants = new LinkedHashMap<String, Integer>();
Map<String, Integer> unmatchedReactants = new LinkedHashMap<String, Integer>();
Map<String, MolecularTypePattern> rMatches = new LinkedHashMap<String, MolecularTypePattern>();
for (ReactantPattern rp : reactantPatterns) {
SpeciesPattern sp = rp.getSpeciesPattern();
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
String thisName = mtp.getMolecularType().getDisplayName();
if (!mtp.hasExplicitParticipantMatch()) {
if (unmatchedReactants.containsKey(thisName)) {
int newCounter = unmatchedReactants.get(thisName) + 1;
unmatchedReactants.put(thisName, newCounter);
} else {
unmatchedReactants.put(thisName, 1);
}
continue;
}
// the value doesn't matter, it's important to be there
matchedReactants.put(thisName, 99);
String key = mtp.getParticipantMatchLabel();
if (rMatches.containsKey(key)) {
// no duplicates in reactants allowed
String message = "Multiple Reactants with the same match id " + key + " are not allowed.";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.WARNING));
} else {
rMatches.put(key, mtp);
}
}
}
Map<String, Integer> matchedProducts = new LinkedHashMap<String, Integer>();
Map<String, Integer> unmatchedProducts = new LinkedHashMap<String, Integer>();
Map<String, MolecularTypePattern> pMatches = new LinkedHashMap<String, MolecularTypePattern>();
for (ProductPattern pp : productPatterns) {
SpeciesPattern sp = pp.getSpeciesPattern();
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
String thisName = mtp.getMolecularType().getDisplayName();
if (!mtp.hasExplicitParticipantMatch()) {
if (unmatchedProducts.containsKey(thisName)) {
int newCounter = unmatchedProducts.get(thisName) + 1;
unmatchedProducts.put(thisName, newCounter);
} else {
unmatchedProducts.put(thisName, 1);
}
continue;
}
matchedProducts.put(thisName, 100);
String key = mtp.getParticipantMatchLabel();
if (pMatches.containsKey(key)) {
// no duplicates in products allowed
String message = "Multiple Products with the same match id " + key + " are not allowed.";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.WARNING));
} else {
pMatches.put(key, mtp);
}
}
}
// 2+ unmatched reactants and 1+ unmatched products of same molecule mean error (or vice-versa: 1+ && 2+)
for (String key : unmatchedReactants.keySet()) {
if (unmatchedProducts.containsKey(key)) {
// both maps have the same unmatched molecule, anything larger than 1 and 1 means matching error
int rCounter = unmatchedReactants.get(key);
int pCounter = unmatchedProducts.get(key);
if ((rCounter > 1 && pCounter > 1) || (rCounter > 0 && pCounter > 1)) {
String message = "Matching missing for Molecule " + key;
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.ERROR));
}
}
}
// must look also for combination with matches and unmatches for the same molecule like pA rA matched AND also pA and rA unmatched - one of each unmatched
for (String key : unmatchedReactants.keySet()) {
if (unmatchedProducts.containsKey(key) && matchedProducts.containsKey(key) && matchedReactants.containsKey(key)) {
int rCounter = matchedReactants.get(key);
int pCounter = matchedProducts.get(key);
if (rCounter == 1 && pCounter == 1) {
// the cases when either is >1 was addressed above, don't need duplicates
String message = "Matching missing for Molecule " + key;
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.ERROR));
}
}
}
// unmatched products must be unambiguous (bond can't be 'possible' and state can't be 'any')
for (ProductPattern pp : productPatterns) {
SpeciesPattern sp = pp.getSpeciesPattern();
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
MolecularTypePattern match = getMatchingReactantMolecule(mtp);
if (match == null) {
// this product has no reactant to match
for (MolecularComponentPattern mcp : mtp.getComponentPatternList()) {
if (mcp.isAmbiguousBond()) {
String message = "Ambiguous bond '" + mcp.getBondType().name() + "' in site '" + mcp.getMolecularComponent().getDisplayName() + "' in unmatched product molecule '" + mtp.getMolecularType().getDisplayName() + "'";
issueList.add(new Issue(this, mcp, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
}
if (mcp.isAmbiguousState()) {
String message = "Ambiguous state 'any' in site '" + mcp.getMolecularComponent().getDisplayName() + "' in unmatched product molecule '" + mtp.getMolecularType().getDisplayName() + "'";
issueList.add(new Issue(this, mcp, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
}
}
}
}
}
if (bReversible) {
// same as above for reactants if the rule is reversible
for (ReactantPattern rp : reactantPatterns) {
SpeciesPattern sp = rp.getSpeciesPattern();
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
MolecularTypePattern match = getMatchingProductMolecule(mtp);
if (match == null) {
for (MolecularComponentPattern mcp : mtp.getComponentPatternList()) {
if (mcp.isAmbiguousBond()) {
String message = "Ambiguous bond '" + mcp.getBondType().name() + "' in site '" + mcp.getMolecularComponent().getDisplayName() + "' in unmatched reactant molecule '" + mtp.getMolecularType().getDisplayName() + "'";
issueList.add(new Issue(this, mcp, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
}
if (mcp.isAmbiguousState()) {
String message = "Ambiguous state 'any' in site '" + mcp.getMolecularComponent().getDisplayName() + "' in unmatched reactant molecule '" + mtp.getMolecularType().getDisplayName() + "'";
issueList.add(new Issue(this, mcp, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
}
}
}
}
}
}
// invalid combinations of bonds / states for corresponding reactant/product component pairs
for (ReactantPattern rp : reactantPatterns) {
SpeciesPattern sp = rp.getSpeciesPattern();
for (MolecularTypePattern mtpReactant : sp.getMolecularTypePatterns()) {
MolecularTypePattern mtpProduct = getMatchingProductMolecule(mtpReactant);
// mtpProduct may be null (perhaps we don't have yet any explicit or implicit match for this reactant)
if (mtpProduct == null) {
continue;
}
for (MolecularComponentPattern mcpReactant : mtpReactant.getComponentPatternList()) {
// search for a match of the component in this product molecule
MolecularComponentPattern mcpProduct = ReactionRule.getMatchingComponent(mtpProduct, mcpReactant);
if (mcpProduct == null) {
throw new RuntimeException("Reactant Site " + mcpReactant.getDisplayName() + " is missing its matching Product Site.");
}
boolean incompatibleBonds = false;
switch(mcpReactant.getBondType()) {
case Exists:
switch(mcpProduct.getBondType()) {
case Exists:
break;
case None:
incompatibleBonds = true;
break;
case Possible:
incompatibleBonds = true;
break;
case Specified:
incompatibleBonds = true;
break;
}
break;
case None:
switch(mcpProduct.getBondType()) {
case Exists:
incompatibleBonds = true;
break;
case None:
break;
case Possible:
incompatibleBonds = true;
break;
case Specified:
break;
}
break;
case Possible:
switch(mcpProduct.getBondType()) {
case Exists:
incompatibleBonds = true;
break;
case None:
incompatibleBonds = true;
break;
case Possible:
break;
case Specified:
incompatibleBonds = true;
break;
}
break;
case Specified:
switch(mcpProduct.getBondType()) {
case Exists:
incompatibleBonds = true;
break;
case None:
break;
case Possible:
incompatibleBonds = true;
break;
case Specified:
break;
}
break;
}
// ----- end of bonds switch
if (incompatibleBonds) {
String message = "Reactant " + MolecularComponentPattern.typeName + " " + mcpReactant.getDisplayName();
message += " and its matching Product " + MolecularComponentPattern.typeName + " " + mcpProduct.getDisplayName() + " have incompatible Bond Types.";
issueList.add(new Issue(this, mcpProduct, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
}
boolean incompatibleStates = true;
if (mcpReactant.getMolecularComponent().getComponentStateDefinitions().isEmpty()) {
// nothing to do if there are no States defined
} else {
ComponentStatePattern cspReactant = mcpReactant.getComponentStatePattern();
ComponentStatePattern cspProduct = mcpProduct.getComponentStatePattern();
if (cspReactant == null) {
String message = "Required " + ComponentStatePattern.typeName + " missing for " + MolecularComponentPattern.typeName + " " + mcpReactant.getDisplayName();
issueList.add(new Issue(this, mcpReactant, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
}
if (cspProduct == null) {
String message = "Required " + ComponentStatePattern.typeName + " missing for " + MolecularComponentPattern.typeName + " " + mcpProduct.getDisplayName();
issueList.add(new Issue(this, mcpProduct, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
}
if (cspReactant.isAny() && cspProduct.isAny()) {
incompatibleStates = false;
} else if (!cspReactant.isAny() && !cspProduct.isAny()) {
incompatibleStates = false;
}
if (incompatibleStates) {
String message = "Reactant " + MolecularComponentPattern.typeName + " " + mcpReactant.getDisplayName();
message += " and its matching Product " + MolecularComponentPattern.typeName + " " + mcpProduct.getDisplayName() + " have incompatible States";
issueList.add(new Issue(this, mcpProduct, issueContext, IssueCategory.Identifiers, message, message, Issue.Severity.ERROR));
}
}
}
}
}
}
use of org.vcell.model.rbm.MolecularComponentPattern in project vcell by virtualcell.
the class SpeciesContext method checkComponentStateConsistency.
public void checkComponentStateConsistency(IssueContext issueContext, List<Issue> issueList, MolecularTypePattern mtpThis) {
issueContext = issueContext.newChildContext(ContextType.SpeciesContext, this);
MolecularType mtThat = mtpThis.getMolecularType();
for (MolecularComponentPattern mcpThis : mtpThis.getComponentPatternList()) {
ComponentStatePattern cspThis = mcpThis.getComponentStatePattern();
String mcNameThis = mcpThis.getMolecularComponent().getName();
MolecularComponent[] mcThatList = mtThat.getMolecularComponents(mcNameThis);
if (mcThatList.length == 0) {
System.out.println("we already fired an issue about component missing");
// nothing to do here, we already fired an issue about component missing
continue;
} else if (mcThatList.length > 1) {
String msg = "Multiple " + MolecularComponent.typeName + "s with the same name are not yet supported.";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.SEVERITY_ERROR));
} else {
// found exactly 1 component
MolecularComponent mcThat = mcThatList[0];
List<ComponentStateDefinition> csdListThat = mcThat.getComponentStateDefinitions();
if (csdListThat.size() == 0) {
// component has no states, we check if mcpThis has any states... it shouldn't
if (cspThis == null) {
// all is well
continue;
}
if (!cspThis.isAny() || (cspThis.getComponentStateDefinition() != null)) {
String msg = MolecularComponentPattern.typeName + " " + mcNameThis + " is in an invalid State.";
issueList.add(new Issue(this, mcpThis, issueContext, IssueCategory.Identifiers, msg, null, Issue.SEVERITY_WARNING));
}
} else {
// we check if mcpThis has any of these states... it should!
if ((cspThis == null) || cspThis.isAny() || (cspThis.getComponentStateDefinition() == null)) {
String msg = MolecularComponentPattern.typeName + " " + mcNameThis + " must be in an explicit State.";
issueList.add(new Issue(this, mcpThis, issueContext, IssueCategory.Identifiers, msg, null, Issue.Severity.ERROR));
} else {
String csdNameThis = cspThis.getComponentStateDefinition().getName();
if (csdNameThis.isEmpty() || (mcThat.getComponentStateDefinition(csdNameThis) == null)) {
String msg = "Invalid State " + csdNameThis + " for " + MolecularComponentPattern.typeName + " " + mcNameThis;
issueList.add(new Issue(this, mcpThis, issueContext, IssueCategory.Identifiers, msg, null, Issue.SEVERITY_WARNING));
}
}
}
}
}
}
use of org.vcell.model.rbm.MolecularComponentPattern in project vcell by virtualcell.
the class SpeciesContext method deleteComponentFromPatterns.
public boolean deleteComponentFromPatterns(MolecularType mt, MolecularComponent mc) {
if (!hasSpeciesPattern()) {
return true;
}
SpeciesPattern sp = getSpeciesPattern();
for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
if (mtp.getMolecularType() == mt) {
List<MolecularComponentPattern> componentPatterns = mtp.getComponentPatternList();
for (Iterator<MolecularComponentPattern> iterator = componentPatterns.iterator(); iterator.hasNext(); ) {
MolecularComponentPattern mcp = iterator.next();
if (mcp.getMolecularComponent() == mc) {
iterator.remove();
}
}
}
}
sp.resolveBonds();
return true;
}
use of org.vcell.model.rbm.MolecularComponentPattern in project vcell by virtualcell.
the class SpeciesContext method gatherIssues.
public void gatherIssues(IssueContext issueContext, List<Issue> issueList) {
issueContext = issueContext.newChildContext(ContextType.SpeciesContext, this);
if (species == null) {
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, "Species is null", Issue.SEVERITY_WARNING));
} else {
if (speciesPattern != null) {
checkBondsSufficiency(issueContext, issueList, speciesPattern);
speciesPattern.checkSpeciesPattern(issueContext, issueList);
speciesPattern.gatherIssues(issueContext, issueList);
for (MolecularType mtThat : model.getRbmModelContainer().getMolecularTypeList()) {
for (MolecularTypePattern mtpThis : speciesPattern.getMolecularTypePatterns()) {
if (mtThat.getName().equals(mtpThis.getMolecularType().getName())) {
// this should never fire issues!!!
checkMolecularTypeConsistency(issueContext, issueList, mtThat, mtpThis);
if (!mtThat.compareEqual(mtpThis.getMolecularType())) {
String msg = MolecularType.typeName + "s " + mtThat.getName() + " and " + mtpThis.getMolecularType().getName() + " do not compare equal.";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.SEVERITY_WARNING));
} else {
// TODO: components cannot be missing, see if this test is really needed
// TODO: the isImplied test is wrong here
// String msg = "All components in the " + mtThat.getDisplayType() + " definition must be present. Missing:";
// boolean isInvalid = false;
// for(int i=0; i< mtpThis.getComponentPatternList().size(); i++) {
// MolecularComponentPattern mcp = mtpThis.getComponentPatternList().get(i);
// if(mcp.isImplied()) {
// if(isInvalid) {
// msg += ",";
// }
// isInvalid = true;
// msg += " " + mcp.getMolecularComponent().getName();
// }
// }
// if(isInvalid) {
// msg += ".";
// issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, msg, Issue.Severity.ERROR));
// }
}
}
}
}
// if the component has states, the component pattern must have ONE of those states
for (MolecularTypePattern mtpThis : speciesPattern.getMolecularTypePatterns()) {
checkComponentStateConsistency(issueContext, issueList, mtpThis);
}
// the bond must not be ambiguous - seed species must be either unbound or specified (explicit) bond
for (MolecularTypePattern mtpThis : speciesPattern.getMolecularTypePatterns()) {
for (MolecularComponentPattern mcpThis : mtpThis.getComponentPatternList()) {
if (mcpThis.getBondType() == BondType.Possible || mcpThis.getBondType() == BondType.Exists) {
String msg = "The Bond of " + mcpThis.getMolecularComponent().getDisplayName() + " must be 'Unbound' or explicit.";
issueList.add(new Issue(this, mcpThis, issueContext, IssueCategory.Identifiers, msg, null, Issue.Severity.ERROR));
}
}
}
// the structure must be in the list of anchors, if anchors are being used
for (MolecularTypePattern mtp : speciesPattern.getMolecularTypePatterns()) {
MolecularType mt = mtp.getMolecularType();
if (mt.isAnchorAll()) {
// no restrictions for this molecular type
continue;
}
if (!mt.getAnchors().contains(structure)) {
String message = "The Structure " + structure.getName() + " is not allowed for the Molecule " + mt.getDisplayName();
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.ERROR));
}
}
// check for reserved name 'trash'
for (MolecularTypePattern mtp : speciesPattern.getMolecularTypePatterns()) {
String name = mtp.getMolecularType().getDisplayName().toLowerCase();
if (name.equals("trash")) {
String message = "'Trash' is a reserved NFSim keyword and it cannot be used as a seed species.";
issueList.add(new Issue(this, issueContext, IssueCategory.Identifiers, message, Issue.Severity.WARNING));
}
}
}
}
}
use of org.vcell.model.rbm.MolecularComponentPattern in project vcell by virtualcell.
the class RbmReactionParticipantTreeCellRenderer method getTreeCellRendererComponent.
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
setBorder(null);
if (value instanceof BioModelNode) {
BioModelNode node = (BioModelNode) value;
Object userObject = node.getUserObject();
obj = userObject;
String text = null;
Icon icon = null;
String toolTip = null;
if (userObject instanceof ReactionRule) {
ReactionRule rr = (ReactionRule) userObject;
text = toHtml(rr);
toolTip = toHtmlWithTip(rr);
icon = rr.isReversible() ? VCellIcons.rbmReactRuleReversIcon : VCellIcons.rbmReactRuleDirectIcon;
} else if (userObject instanceof ReactionRuleParticipantLocal) {
ReactionRuleParticipantLocal rrp = (ReactionRuleParticipantLocal) userObject;
text = toHtml(rrp, true);
toolTip = toHtmlWithTip(rrp, true);
icon = rrp.type == ReactionRuleParticipantType.Reactant ? VCellIcons.rbmReactantIcon : VCellIcons.rbmProductIcon;
} else if (userObject instanceof MolecularTypePattern) {
MolecularTypePattern molecularTypePattern = (MolecularTypePattern) userObject;
text = toHtml(molecularTypePattern, true);
toolTip = toHtmlWithTip(molecularTypePattern, true);
if (owner == null) {
icon = VCellIcons.rbmMolecularTypeSimpleIcon;
;
} else {
Graphics gc = owner.getGraphics();
icon = new MolecularTypeSmallShape(1, 5, molecularTypePattern.getMolecularType(), null, gc, molecularTypePattern.getMolecularType(), null, issueManager);
}
} else if (userObject instanceof MolecularComponentPattern) {
MolecularComponentPattern mcp = (MolecularComponentPattern) userObject;
text = toHtml(mcp, true);
toolTip = toHtmlWithTip(mcp, true);
icon = VCellIcons.rbmComponentGrayIcon;
if (mcp.getMolecularComponent().getComponentStateDefinitions().size() > 0) {
icon = VCellIcons.rbmComponentGrayStateIcon;
}
if (mcp.isbVisible()) {
icon = VCellIcons.rbmComponentGreenIcon;
if (mcp.getMolecularComponent().getComponentStateDefinitions().size() > 0) {
icon = VCellIcons.rbmComponentGreenStateIcon;
}
}
ComponentStatePattern csp = mcp.getComponentStatePattern();
if (csp != null && !csp.isAny()) {
icon = VCellIcons.rbmComponentGreenIcon;
if (mcp.getMolecularComponent().getComponentStateDefinitions().size() > 0) {
icon = VCellIcons.rbmComponentGreenStateIcon;
}
}
BioModelNode parent = (BioModelNode) ((BioModelNode) value).getParent().getParent().getParent();
if (parent == null) {
icon = VCellIcons.rbmComponentErrorIcon;
return this;
}
} else if (userObject instanceof StateLocal) {
StateLocal sl = (StateLocal) userObject;
text = toHtml(sl, true);
toolTip = toHtmlWithTip(sl, true);
icon = VCellIcons.rbmComponentStateIcon;
} else if (userObject instanceof BondLocal) {
BondLocal bl = (BondLocal) userObject;
text = toHtml(bl, sel);
toolTip = toHtmlWithTip(bl, true);
icon = VCellIcons.rbmBondIcon;
} else if (userObject instanceof ParticipantMatchLabelLocal) {
ParticipantMatchLabelLocal pmll = (ParticipantMatchLabelLocal) userObject;
text = toHtml(pmll, sel);
toolTip = toHtmlWithTip(pmll, true);
icon = VCellIcons.rbmBondIcon;
} else {
if (userObject != null) {
System.out.println(userObject.toString());
text = userObject.toString();
} else {
text = "null user object";
}
}
setText(text);
setIcon(icon);
setToolTipText(toolTip == null ? text : toolTip);
}
return this;
}
Aggregations