Search in sources :

Example 16 with MolecularType

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;
}
Also used : MolecularType(org.vcell.model.rbm.MolecularType) Displayable(org.vcell.util.Displayable) MolecularComponent(org.vcell.model.rbm.MolecularComponent) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) SpeciesPattern(org.vcell.model.rbm.SpeciesPattern) Pair(org.vcell.util.Pair) ComponentStateDefinition(org.vcell.model.rbm.ComponentStateDefinition)

Example 17 with MolecularType

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;
}
Also used : MolecularType(org.vcell.model.rbm.MolecularType) RelationshipObject(org.vcell.relationship.RelationshipObject)

Example 18 with MolecularType

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);
    }
}
Also used : MolecularType(org.vcell.model.rbm.MolecularType) MolecularComponent(org.vcell.model.rbm.MolecularComponent) ComponentStateDefinition(org.vcell.model.rbm.ComponentStateDefinition)

Example 19 with MolecularType

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();
    }
}
Also used : MolecularType(org.vcell.model.rbm.MolecularType) MolecularComponent(org.vcell.model.rbm.MolecularComponent) ArrayList(java.util.ArrayList) List(java.util.List) ComponentStateDefinition(org.vcell.model.rbm.ComponentStateDefinition)

Example 20 with MolecularType

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);
        }
    }
}
Also used : MolecularType(org.vcell.model.rbm.MolecularType) RbmModelContainer(cbit.vcell.model.Model.RbmModelContainer) BioModel(cbit.vcell.biomodel.BioModel)

Aggregations

MolecularType (org.vcell.model.rbm.MolecularType)78 SpeciesPattern (org.vcell.model.rbm.SpeciesPattern)25 MolecularComponent (org.vcell.model.rbm.MolecularComponent)23 Structure (cbit.vcell.model.Structure)20 ArrayList (java.util.ArrayList)20 ReactionRule (cbit.vcell.model.ReactionRule)19 SpeciesContext (cbit.vcell.model.SpeciesContext)19 MolecularTypePattern (org.vcell.model.rbm.MolecularTypePattern)16 PropertyVetoException (java.beans.PropertyVetoException)15 ComponentStateDefinition (org.vcell.model.rbm.ComponentStateDefinition)15 RbmObservable (cbit.vcell.model.RbmObservable)14 List (java.util.List)13 RbmModelContainer (cbit.vcell.model.Model.RbmModelContainer)12 Point (java.awt.Point)12 MolecularComponentPattern (org.vcell.model.rbm.MolecularComponentPattern)12 BioPaxObject (org.vcell.pathway.BioPaxObject)11 RelationshipObject (org.vcell.relationship.RelationshipObject)11 BioModelNode (cbit.vcell.desktop.BioModelNode)10 ModelException (cbit.vcell.model.ModelException)10 ParticleMolecularType (cbit.vcell.math.ParticleMolecularType)9