Search in sources :

Example 71 with Feature

use of cbit.vcell.model.Feature in project vcell by virtualcell.

the class ModelDbDriver method insertModel.

/**
 * This method was created in VisualAge.
 * @param model cbit.vcell.model.Model
 */
private void insertModel(InsertHashtable hash, Connection con, User user, Model model, Version newVersion) throws SQLException, DataAccessException, RecordChangedException {
    // 
    // insert model record
    // 
    insertModelSQL(con, user, model, newVersion);
    hash.put(model, newVersion.getVersionKey());
    // 
    // make sure all species are in the database and the hashtable
    // 
    StructureTopology structureTopology = model.getStructureTopology();
    ElectricalTopology electricalTopology = model.getElectricalTopology();
    Species[] speciesArray = model.getSpecies();
    for (int i = 0; i < speciesArray.length; i++) {
        // speciesArray[i].getKey();
        KeyValue speciesKey = null;
        // if (speciesKey == null) {
        speciesKey = reactStepDB.insertSpecies(hash, con, speciesArray[i], user);
        // throw new DataAccessException("Database error: species "+species.getName()+" has null key");
        // }else if (speciesArray[i].getOwnerKey()!=null && speciesArray[i].getOwnerKey()==user.getID()){
        // reactStepDB.updateSpecies(con,speciesArray[i],user);
        // }
        // if (hash.getDatabaseKey(speciesArray[i])==null){
        hash.put(speciesArray[i], speciesKey);
    // }
    }
    // 
    // make sure all structures are in the database and the hashtable (add entry to link table)
    // this does not populate the parent, negativeFeature, and positiveFeature columns ... done later with updateStructureKeys()
    // 
    Structure[] structures = model.getStructures();
    for (int i = 0; i < structures.length; i++) {
        Structure structure = (Structure) structures[i];
        KeyValue structureKey = null;
        if (hash.getDatabaseKey(structure) == null) {
            structureKey = reactStepDB.insertStructure(hash, con, structure);
        }
        KeyValue linkKey = keyFactory.getNewKey(con);
        insertModelStructLinkSQL(con, linkKey, newVersion.getVersionKey(), /*modelKey*/
        hash.getDatabaseKey(structure));
    }
    // 
    for (Structure structure : structures) {
        KeyValue structKey = hash.getDatabaseKey(structure);
        KeyValue parentKey = null;
        Structure parentStruct = structureTopology.getParentStructure(structure);
        if (parentStruct != null) {
            parentKey = hash.getDatabaseKey(parentStruct);
        }
        KeyValue negKey = null;
        KeyValue posKey = null;
        if (structure instanceof Membrane) {
            Membrane membrane = (Membrane) structure;
            Feature negFeature = electricalTopology.getNegativeFeature(membrane);
            if (negFeature != null) {
                negKey = hash.getDatabaseKey(negFeature);
            }
            Feature posFeature = electricalTopology.getPositiveFeature(membrane);
            if (posFeature != null) {
                posKey = hash.getDatabaseKey(posFeature);
            }
        }
        StructureKeys structureKeys = new StructureKeys(structKey, parentKey, posKey, negKey);
        reactStepDB.updateStructureKeys(con, structureKeys);
    }
    // 
    // make sure all speciesContexts are in database and the hashtable
    // 
    SpeciesContext[] speciesContexts = model.getSpeciesContexts();
    for (int i = 0; i < speciesContexts.length; i++) {
        SpeciesContext sc = speciesContexts[i];
        if (hash.getDatabaseKey(sc) == null) {
            insertSpeciesContextSQL(hash, con, keyFactory.getNewKey(con), sc, newVersion.getVersionKey());
        }
    }
    // 
    // insert all reactionSteps
    // 
    ReactionStep[] reactionSteps = model.getReactionSteps();
    for (int i = 0; i < reactionSteps.length; i++) {
        ReactionStep rs = reactionSteps[i];
        if (hash.getDatabaseKey(rs) == null) {
            reactStepDB.insertReactionStep(hash, con, user, rs, newVersion.getVersionKey());
        }
    }
    // 
    // insert diagrams
    // 
    Diagram[] diagrams = model.getDiagrams();
    for (int i = 0; i < diagrams.length; i++) {
        Diagram diagram = diagrams[i];
        KeyValue key = keyFactory.getNewKey(con);
        KeyValue structKey = hash.getDatabaseKey(diagram.getStructure());
        if (structKey != null) {
            insertDiagramSQL(con, key, diagram, newVersion.getVersionKey(), /*modelKey*/
            hash.getDatabaseKey(diagram.getStructure()));
        } else {
            if (lg.isWarnEnabled())
                lg.warn("ModelDbDriver.insertModel(),  diagram " + diagram.toString() + " is orphaned, check Model logic");
        }
    }
    // 
    // insert GlobalModelParameters
    // 
    // //-----------------testing remove
    // try{
    // Model.ModelParameter testParam = model.new ModelParameter("test",new Expression("1.0"),Model.ROLE_UserDefined,VCUnitDefinition.UNIT_molecules);
    // model.setModelParameters(new Model.ModelParameter[] {testParam});
    // }catch(Exception e){
    // e.printStackTrace();
    // }
    // //-----------------
    GlobalModelParameterTable.table.insertModelParameters(con, keyFactory, model.getModelParameters(), newVersion.getVersionKey());
}
Also used : KeyValue(org.vcell.util.document.KeyValue) StructureTopology(cbit.vcell.model.Model.StructureTopology) ElectricalTopology(cbit.vcell.model.Model.ElectricalTopology) SpeciesContext(cbit.vcell.model.SpeciesContext) Feature(cbit.vcell.model.Feature) Diagram(cbit.vcell.model.Diagram) StructureKeys(cbit.vcell.modeldb.ReactStepDbDriver.StructureKeys) ReactionStep(cbit.vcell.model.ReactionStep) Membrane(cbit.vcell.model.Membrane) Structure(cbit.vcell.model.Structure) Species(cbit.vcell.model.Species)

Aggregations

Feature (cbit.vcell.model.Feature)71 Membrane (cbit.vcell.model.Membrane)50 Structure (cbit.vcell.model.Structure)36 Expression (cbit.vcell.parser.Expression)29 SpeciesContext (cbit.vcell.model.SpeciesContext)25 PropertyVetoException (java.beans.PropertyVetoException)18 Model (cbit.vcell.model.Model)16 StructureTopology (cbit.vcell.model.Model.StructureTopology)16 SimpleReaction (cbit.vcell.model.SimpleReaction)15 SubVolume (cbit.vcell.geometry.SubVolume)14 MembraneMapping (cbit.vcell.mapping.MembraneMapping)14 SurfaceClass (cbit.vcell.geometry.SurfaceClass)13 FeatureMapping (cbit.vcell.mapping.FeatureMapping)13 ExpressionException (cbit.vcell.parser.ExpressionException)13 FluxReaction (cbit.vcell.model.FluxReaction)12 ReactionStep (cbit.vcell.model.ReactionStep)12 KeyValue (org.vcell.util.document.KeyValue)12 BioModel (cbit.vcell.biomodel.BioModel)11 StructureMapping (cbit.vcell.mapping.StructureMapping)11 ModelUnitSystem (cbit.vcell.model.ModelUnitSystem)11