Search in sources :

Example 26 with StructureTopology

use of cbit.vcell.model.Model.StructureTopology 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

StructureTopology (cbit.vcell.model.Model.StructureTopology)26 Membrane (cbit.vcell.model.Membrane)19 Feature (cbit.vcell.model.Feature)16 Structure (cbit.vcell.model.Structure)13 Expression (cbit.vcell.parser.Expression)13 MembraneMapping (cbit.vcell.mapping.MembraneMapping)9 StructureMapping (cbit.vcell.mapping.StructureMapping)8 ExpressionException (cbit.vcell.parser.ExpressionException)7 StructureMappingParameter (cbit.vcell.mapping.StructureMapping.StructureMappingParameter)6 Model (cbit.vcell.model.Model)6 Species (cbit.vcell.model.Species)6 SpeciesContext (cbit.vcell.model.SpeciesContext)6 FeatureMapping (cbit.vcell.mapping.FeatureMapping)5 ReactionStep (cbit.vcell.model.ReactionStep)5 VCUnitDefinition (cbit.vcell.units.VCUnitDefinition)5 LocalParameter (cbit.vcell.mapping.ParameterContext.LocalParameter)4 SymbolTableEntry (cbit.vcell.parser.SymbolTableEntry)4 PropertyVetoException (java.beans.PropertyVetoException)4 Vector (java.util.Vector)4 AbstractConstraint (cbit.vcell.constraints.AbstractConstraint)3