use of org.vcell.model.rbm.MolecularType in project vcell by virtualcell.
the class MolecularTypeTableModel method checkInputValue.
@Override
public String checkInputValue(String inputValue, int row, int columnIndex) {
String errMsg = null;
final Column col = Column.values()[columnIndex];
MolecularType selectedMolecularType = getValueAt(row);
switch(col) {
case name:
{
if (!inputValue.equals(TokenMangler.fixTokenStrict(inputValue))) {
errMsg = "'" + inputValue + "' not legal identifier, try '" + TokenMangler.fixTokenStrict(inputValue) + "'.";
errMsg += VCellErrorMessages.PressEscToUndo;
errMsg = "<html>" + errMsg + "</html>";
return errMsg;
}
inputValue = TokenMangler.fixTokenStrict(inputValue);
MolecularType mt = getModel().getRbmModelContainer().getMolecularType(inputValue);
if (mt != null && mt != selectedMolecularType) {
errMsg = mt.getDisplayType() + " '" + inputValue + "' already exists!";
errMsg += VCellErrorMessages.PressEscToUndo;
errMsg = "<html>" + errMsg + "</html>";
return errMsg;
}
break;
}
case bngl_pattern:
{
try {
inputValue = inputValue.trim();
if (inputValue.length() > 0) {
MolecularType mt = RbmUtils.parseMolecularType(inputValue);
MolecularType mt1 = getModel().getRbmModelContainer().getMolecularType(mt.getName());
if (mt1 != null && getRowIndex(mt1) != row) {
// molecular type with this name exists already on another row
errMsg = mt.getDisplayType() + " '" + mt.getDisplayName() + "' already exists!";
errMsg += VCellErrorMessages.PressEscToUndo;
errMsg = "<html>" + errMsg + "</html>";
return errMsg;
}
// need to check if any Component we try to delete is not already in use elsewhere
for (MolecularComponent selectedMolecularComponent : selectedMolecularType.getComponentList()) {
if (mt.getMolecularComponent(selectedMolecularComponent.getName()) == null) {
// the user tries to delete this mc
Map<String, Pair<Displayable, SpeciesPattern>> usedHere = new LinkedHashMap<String, Pair<Displayable, SpeciesPattern>>();
bioModel.getModel().getRbmModelContainer().findComponentUsage(selectedMolecularType, selectedMolecularComponent, usedHere);
if (!usedHere.isEmpty()) {
errMsg = selectedMolecularComponent.dependenciesToHtml(usedHere);
errMsg += "<br><br>Deleting and Renaming a Component can be done in the Object Properties tree below.";
errMsg += VCellErrorMessages.PressEscToUndo;
errMsg = "<html>" + errMsg + "</html>";
return errMsg;
}
}
}
// need to check if any State we try to delete is not already in use elsewhere
for (MolecularComponent selectedMolecularComponent : selectedMolecularType.getComponentList()) {
for (ComponentStateDefinition selectedComponentStateDefinition : selectedMolecularComponent.getComponentStateDefinitions()) {
MolecularComponent mc = mt.getMolecularComponent(selectedMolecularComponent.getName());
if (mc.getComponentStateDefinition(selectedComponentStateDefinition.getName()) == null) {
// new list is missing a state which was present in the original
if (!getModel().getRbmModelContainer().isDeleteAllowed(selectedMolecularType, selectedMolecularComponent, selectedComponentStateDefinition)) {
errMsg = "State '" + selectedComponentStateDefinition + "' cannot be deleted because it's already being used.";
errMsg += "<br>Deleting and Renaming a State can be done in the Object Properties tree below.";
errMsg += VCellErrorMessages.PressEscToUndo;
errMsg = "<html>" + errMsg + "</html>";
return errMsg;
}
}
}
}
}
} catch (Exception ex) {
errMsg = ex.getMessage();
errMsg += VCellErrorMessages.PressEscToUndo;
errMsg = "<html>" + errMsg + "</html>";
return errMsg;
}
break;
}
}
return null;
}
use of org.vcell.model.rbm.MolecularType in project vcell by virtualcell.
the class MolecularTypeTableModel method getValueAt.
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Column col = Column.values()[columnIndex];
MolecularType molecularType = getValueAt(rowIndex);
if (molecularType == null) {
if (col == Column.name) {
return ADD_NEW_HERE_TEXT;
}
} else {
switch(col) {
case name:
return molecularType.getName();
case link:
HashSet<RelationshipObject> relObjsHash = bioModel.getRelationshipModel().getRelationshipObjects(molecularType);
if (relObjsHash != null && relObjsHash.size() > 0) {
return relObjsHash.iterator().next().getBioPaxObject();
}
return null;
case bngl_pattern:
return pattern(molecularType);
}
}
return null;
}
use of org.vcell.model.rbm.MolecularType in project vcell by virtualcell.
the class MolecularTypeTableModel method setValueAt.
@Override
public void setValueAt(Object value, int row, int column) {
if (getModel() == null || value == null) {
return;
}
String stringValue = ((String) value);
stringValue = stringValue.trim();
if (stringValue.length() == 0) {
return;
}
Column col = Column.values()[column];
try {
MolecularType ourMt = getValueAt(row);
switch(col) {
case name:
{
if (stringValue.equals(ADD_NEW_HERE_TEXT)) {
return;
}
if (ourMt == null) {
// new molecular type in empty row
getModel().getRbmModelContainer().addMolecularType(new MolecularType(stringValue, getModel()), true);
} else {
// rename it
ourMt.setName(stringValue);
}
fireTableRowsUpdated(row, row);
break;
}
case bngl_pattern:
{
MolecularType tempMolecularType = RbmUtils.parseMolecularType(stringValue);
if (ourMt == null) {
// new
getModel().getRbmModelContainer().addMolecularType(tempMolecularType, true);
} else {
// change it
// if it had been renamed
ourMt.setName(tempMolecularType.getName());
// here we add components
for (MolecularComponent tempMc : tempMolecularType.getComponentList()) {
if (ourMt.getMolecularComponent(tempMc.getName()) == null) {
// component not found in the existing molecular type, it's a new component
// add the new component (and its states, if any)
ourMt.addMolecularComponent(tempMc);
getModel().getRbmModelContainer().adjustSpeciesContextPatterns(ourMt, tempMc);
} else {
// existing component being modified (by adding or removing states)
// check for new states added to the existing components
MolecularComponent ourMc = ourMt.getMolecularComponent(tempMc.getName());
for (ComponentStateDefinition tempCsd : tempMc.getComponentStateDefinitions()) {
if (ourMc.getComponentStateDefinition(tempCsd.getName()) == null) {
// state not found in the existing component, it's a new state
ourMc.addComponentStateDefinition(tempCsd);
}
}
// TODO: check for deleted states from existing components
}
}
// TODO: here we delete components
for (MolecularComponent ourMc : ourMt.getComponentList()) {
if (tempMolecularType.getMolecularComponent(ourMc.getName()) == null) {
// ATTENTION! renaming doesn't work here because we can't know the user's mind, we always consider addition + deletion here
if (getModel().getRbmModelContainer().delete(ourMt, ourMc) == true) {
ourMt.removeMolecularComponent(ourMc);
}
}
}
}
fireTableRowsUpdated(row, row);
break;
}
}
} catch (Exception e) {
e.printStackTrace(System.out);
DialogUtils.showErrorDialog(ownerTable, e.getMessage(), e);
}
}
use of org.vcell.model.rbm.MolecularType in project vcell by virtualcell.
the class MolecularTypeTableModel method propertyChange.
@Override
public void propertyChange(PropertyChangeEvent evt) {
super.propertyChange(evt);
// if (evt.getSource() == getModel().getRbmModelContainer()) {
if (evt.getSource() == getModel()) {
if (evt.getPropertyName().equals(RbmModelContainer.PROPERTY_NAME_MOLECULAR_TYPE_LIST)) {
refreshData();
List<MolecularType> oldValue = (List<MolecularType>) evt.getOldValue();
for (MolecularType molecularType : oldValue) {
RbmUtils.removePropertyChangeListener(molecularType, this);
}
List<MolecularType> newValue = (List<MolecularType>) evt.getNewValue();
for (MolecularType molecularType : newValue) {
RbmUtils.addPropertyChangeListener(molecularType, this);
}
}
refreshData();
// } else if (evt.getSource() == getModel().getRbmModelContainer().getNetworkConstraints()) {
// if (evt.getPropertyName().equals(NetworkConstraints.PROPERTY_NAME_MAX_STOICHIOMETRY)) {
// fireTableRowsUpdated(0, getRowCount() - 1);
// }
// refreshData();
} else if (evt.getSource() instanceof MolecularType) {
MolecularType mt = (MolecularType) evt.getSource();
int changeRow = getRowIndex(mt);
if (changeRow >= 0) {
fireTableRowsUpdated(changeRow, changeRow);
}
if (evt.getPropertyName().equals(MolecularType.PROPERTY_NAME_COMPONENT_LIST)) {
List<MolecularComponent> oldValue = (List<MolecularComponent>) evt.getOldValue();
if (oldValue != null) {
for (MolecularComponent molecularComponent : oldValue) {
RbmUtils.removePropertyChangeListener(molecularComponent, this);
}
}
List<MolecularComponent> newValue = (List<MolecularComponent>) evt.getNewValue();
if (newValue != null) {
for (MolecularComponent molecularComponent : newValue) {
RbmUtils.addPropertyChangeListener(molecularComponent, this);
}
}
}
refreshData();
} else if (evt.getSource() instanceof MolecularComponent) {
fireTableRowsUpdated(0, getRowCount() - 1);
if (evt.getPropertyName().equals(MolecularComponent.PROPERTY_NAME_COMPONENT_STATE_DEFINITIONS)) {
List<ComponentStateDefinition> oldValue = (List<ComponentStateDefinition>) evt.getOldValue();
if (oldValue != null) {
for (ComponentStateDefinition componentState : oldValue) {
componentState.removePropertyChangeListener(this);
}
}
List<ComponentStateDefinition> newValue = (List<ComponentStateDefinition>) evt.getNewValue();
if (newValue != null) {
for (ComponentStateDefinition componentState : newValue) {
componentState.addPropertyChangeListener(this);
}
}
}
refreshData();
} else if (evt.getSource() instanceof ComponentStateDefinition) {
fireTableRowsUpdated(0, getRowCount() - 1);
refreshData();
}
}
use of org.vcell.model.rbm.MolecularType in project vcell by virtualcell.
the class MolecularTypeTableModel method bioModelChange.
@Override
protected void bioModelChange(PropertyChangeEvent evt) {
super.bioModelChange(evt);
BioModel oldValue = (BioModel) evt.getOldValue();
if (oldValue != null) {
RbmModelContainer rbmModelContainer = (RbmModelContainer) (oldValue.getModel().getRbmModelContainer());
// rbmModelContainer.removePropertyChangeListener(this);
for (MolecularType molecularType : rbmModelContainer.getMolecularTypeList()) {
RbmUtils.removePropertyChangeListener(molecularType, this);
}
}
BioModel newValue = (BioModel) evt.getNewValue();
if (newValue != null) {
RbmModelContainer rbmModelContainer = newValue.getModel().getRbmModelContainer();
// rbmModelContainer.addPropertyChangeListener(this);
for (MolecularType molecularType : rbmModelContainer.getMolecularTypeList()) {
RbmUtils.addPropertyChangeListener(molecularType, this);
}
}
}
Aggregations