Search in sources :

Example 41 with ExternalDataIdentifier

use of org.vcell.util.document.ExternalDataIdentifier in project vcell by virtualcell.

the class FieldDataDBOperationDriver method getAllExternalDataIdentifiers.

public static synchronized HashMap<User, Vector<ExternalDataIdentifier>> getAllExternalDataIdentifiers() throws DataAccessException {
    String sql = "SELECT " + ExternalDataTable.table.getTableName() + ".*" + "," + UserTable.table.userid.getQualifiedColName() + " FROM " + ExternalDataTable.table.getTableName() + "," + UserTable.table.getTableName() + " WHERE " + UserTable.table.id.getQualifiedColName() + " = " + ExternalDataTable.table.ownerRef.getQualifiedColName();
    Statement stmt = null;
    HashMap<User, Vector<ExternalDataIdentifier>> allUserExtDataIDH = new HashMap<User, Vector<ExternalDataIdentifier>>();
    try {
        stmt = getConnection().createStatement();
        ResultSet rset = stmt.executeQuery(sql);
        while (rset.next()) {
            ExternalDataIdentifier extDataID = ExternalDataTable.table.getExternalDataIdentifier(rset);
            Vector<ExternalDataIdentifier> userExtDataIDV = allUserExtDataIDH.get(extDataID.getOwner());
            if (userExtDataIDV == null) {
                userExtDataIDV = new Vector<ExternalDataIdentifier>();
                allUserExtDataIDH.put(extDataID.getOwner(), userExtDataIDV);
            }
            userExtDataIDV.add(extDataID);
        }
    } catch (Exception e) {
        e.printStackTrace();
        throw new DataAccessException("Error: getAllExternalDataIdentifiers", e);
    } finally {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    return allUserExtDataIDH;
}
Also used : User(org.vcell.util.document.User) HashMap(java.util.HashMap) Statement(java.sql.Statement) ExternalDataIdentifier(org.vcell.util.document.ExternalDataIdentifier) ResultSet(java.sql.ResultSet) Vector(java.util.Vector) SQLException(java.sql.SQLException) DataAccessException(org.vcell.util.DataAccessException) DataAccessException(org.vcell.util.DataAccessException)

Example 42 with ExternalDataIdentifier

use of org.vcell.util.document.ExternalDataIdentifier in project vcell by virtualcell.

the class FieldDataDBOperationDriver method fieldDataDBOperation.

public static FieldDataDBOperationResults fieldDataDBOperation(Connection con, KeyFactory keyFactory, User user, FieldDataDBOperationSpec fieldDataDBOperationSpec) throws SQLException, DataAccessException {
    if (fieldDataDBOperationSpec.opType == FieldDataDBOperationSpec.FDDBOS_COPY_NO_CONFLICT) {
        // get all current ExtDataIDs
        ExternalDataIdentifier[] existingExtDataIDArr = FieldDataDBOperationDriver.fieldDataDBOperation(con, keyFactory, user, FieldDataDBOperationSpec.createGetExtDataIDsSpec(user)).extDataIDArr;
        // Rename FieldFunc names if necessary
        Hashtable<String, String> newNameOrigNameHash = new Hashtable<String, String>();
        for (int i = 0; i < fieldDataDBOperationSpec.sourceNames.length; i += 1) {
            String newFieldFuncName = fieldDataDBOperationSpec.sourceNames[i];
            while (true) {
                boolean bNameConflictExists = false;
                for (int j = 0; j < existingExtDataIDArr.length; j += 1) {
                    if (existingExtDataIDArr[j].getName().equals(newFieldFuncName)) {
                        bNameConflictExists = true;
                        break;
                    }
                }
                bNameConflictExists = bNameConflictExists || newNameOrigNameHash.containsKey(newFieldFuncName);
                if (!bNameConflictExists) {
                    newNameOrigNameHash.put(newFieldFuncName, fieldDataDBOperationSpec.sourceNames[i]);
                    break;
                }
                newFieldFuncName = TokenMangler.getNextEnumeratedToken(newFieldFuncName);
            }
        }
        // Add new ExternalDataIdentifier (FieldData ID) to DB
        // Copy source annotation
        FieldDataDBOperationResults sourceUserExtDataInfo = fieldDataDBOperation(con, keyFactory, user, FieldDataDBOperationSpec.createGetExtDataIDsSpec(fieldDataDBOperationSpec.sourceOwner.getVersion().getOwner()));
        ExternalDataIdentifier[] sourceUserExtDataIDArr = sourceUserExtDataInfo.extDataIDArr;
        Hashtable<String, ExternalDataIdentifier> oldNameNewIDHash = new Hashtable<String, ExternalDataIdentifier>();
        Hashtable<String, KeyValue> oldNameOldExtDataIDKey = new Hashtable<String, KeyValue>();
        String[] newFieldFuncNamesArr = newNameOrigNameHash.keySet().toArray(new String[0]);
        for (int i = 0; i < newFieldFuncNamesArr.length; i += 1) {
            // find orig annotation
            String origAnnotation = "Copy Field Data name used Field Data function\r\n" + "Source type: " + fieldDataDBOperationSpec.sourceOwner.getVType().getTypeName() + "\r\n" + "Source owner: " + fieldDataDBOperationSpec.sourceOwner.getVersion().getOwner().getName() + "\r\n" + "Source name: " + fieldDataDBOperationSpec.sourceOwner.getVersion().getName() + "\r\n" + "Original Field Data name: " + newNameOrigNameHash.get(newFieldFuncNamesArr[i]) + "\r\n" + "New Field Data name: " + newFieldFuncNamesArr[i] + "\r\n" + "Source Annotation: " + newFieldFuncNamesArr[i] + "\r\n";
            for (int j = 0; j < sourceUserExtDataInfo.extDataAnnotArr.length; j += 1) {
                String originalName = newNameOrigNameHash.get(newFieldFuncNamesArr[i]);
                if (sourceUserExtDataIDArr[j].getName().equals(originalName)) {
                    oldNameOldExtDataIDKey.put(originalName, sourceUserExtDataInfo.extDataIDArr[j].getKey());
                    origAnnotation += sourceUserExtDataInfo.extDataAnnotArr[j];
                    break;
                }
            }
            // 
            FieldDataDBOperationResults fieldDataDBOperationResults = fieldDataDBOperation(con, keyFactory, user, FieldDataDBOperationSpec.createSaveNewExtDataIDSpec(user, newFieldFuncNamesArr[i], origAnnotation));
            // errorCleanupExtDataIDV.add(fieldDataDBOperationResults.extDataID);
            String origFieldFuncName = newNameOrigNameHash.get(fieldDataDBOperationResults.extDataID.getName());
            if (origFieldFuncName == null) {
                throw new DataAccessException("couldn't find original FieldFuncName using new ExternalDataId");
            }
            oldNameNewIDHash.put(origFieldFuncName, fieldDataDBOperationResults.extDataID);
        }
        FieldDataDBOperationResults fieldDataDBOperationResults = new FieldDataDBOperationResults();
        fieldDataDBOperationResults.oldNameNewIDHash = oldNameNewIDHash;
        fieldDataDBOperationResults.oldNameOldExtDataIDKeyHash = oldNameOldExtDataIDKey;
        return fieldDataDBOperationResults;
    } else if (fieldDataDBOperationSpec.opType == FieldDataDBOperationSpec.FDDBOS_GETEXTDATAIDS) {
        String sql;
        ResultSet rset;
        if (fieldDataDBOperationSpec.bIncludeSimRefs) {
            sql = "SELECT " + ExternalDataTable.table.id.getQualifiedColName() + "," + ExternalDataTable.table.externalDataName.getQualifiedColName() + "," + ExternalDataTable.table.ownerRef.getQualifiedColName() + "," + UserTable.table.userid.getQualifiedColName() + "," + SimulationTable.table.id.getQualifiedColName() + " FROM " + ExternalDataTable.table.getTableName() + "," + MathDescTable.table.getTableName() + "," + SimulationTable.table.getTableName() + "," + MathDescExternalDataLinkTable.table.getTableName() + "," + UserTable.table.getTableName() + " WHERE " + UserTable.table.id.getQualifiedColName() + " = " + fieldDataDBOperationSpec.owner.getID() + " AND " + UserTable.table.id.getQualifiedColName() + " = " + ExternalDataTable.table.ownerRef.getQualifiedColName() + " AND " + ExternalDataTable.table.id.getQualifiedColName() + " = " + MathDescExternalDataLinkTable.table.extDataRef.getQualifiedColName() + " AND " + MathDescTable.table.id.getQualifiedColName() + " = " + MathDescExternalDataLinkTable.table.mathDescRef.getQualifiedColName() + " AND " + MathDescTable.table.id.getQualifiedColName() + " = " + SimulationTable.table.mathRef.getQualifiedColName();
        } else {
            sql = "SELECT " + ExternalDataTable.table.getTableName() + ".*" + "," + UserTable.table.userid.getQualifiedColName() + " FROM " + ExternalDataTable.table.getTableName() + "," + UserTable.table.getTableName() + " WHERE " + ExternalDataTable.table.ownerRef + "=" + fieldDataDBOperationSpec.owner.getID() + " AND " + UserTable.table.id.getQualifiedColName() + " = " + ExternalDataTable.table.ownerRef.getQualifiedColName();
        }
        Statement stmt = con.createStatement();
        Vector<ExternalDataIdentifier> extDataIDV = new Vector<ExternalDataIdentifier>();
        Vector<String> extDataAnnotV = new Vector<String>();
        HashMap<ExternalDataIdentifier, Vector<KeyValue>> extDataIDSimRefsH = null;
        try {
            rset = stmt.executeQuery(sql);
            while (rset.next()) {
                ExternalDataIdentifier extDataID = ExternalDataTable.table.getExternalDataIdentifier(rset);
                if (!fieldDataDBOperationSpec.bIncludeSimRefs && !extDataIDV.contains(extDataID)) {
                    extDataIDV.add(extDataID);
                    extDataAnnotV.add(ExternalDataTable.table.getExternalDataAnnot(rset));
                }
                if (fieldDataDBOperationSpec.bIncludeSimRefs) {
                    if (extDataIDSimRefsH == null) {
                        extDataIDSimRefsH = new HashMap<ExternalDataIdentifier, Vector<KeyValue>>();
                    }
                    Vector<KeyValue> simRefV = extDataIDSimRefsH.get(extDataID);
                    if (simRefV == null) {
                        simRefV = new Vector<KeyValue>();
                        extDataIDSimRefsH.put(extDataID, simRefV);
                    }
                    simRefV.add(new KeyValue(rset.getBigDecimal(SimulationTable.table.id.getUnqualifiedColName())));
                }
            }
        } finally {
            stmt.close();
        }
        FieldDataDBOperationResults fieldDataDBOperationResults = new FieldDataDBOperationResults();
        fieldDataDBOperationResults.extDataIDArr = extDataIDV.toArray(new ExternalDataIdentifier[extDataIDV.size()]);
        fieldDataDBOperationResults.extDataAnnotArr = extDataAnnotV.toArray(new String[extDataAnnotV.size()]);
        fieldDataDBOperationResults.extdataIDAndSimRefH = extDataIDSimRefsH;
        return fieldDataDBOperationResults;
    } else if (fieldDataDBOperationSpec.opType == FieldDataDBOperationSpec.FDDBOS_SAVEEXTDATAID) {
        if (!fieldDataDBOperationSpec.newExtDataIDName.equals(TokenMangler.fixTokenStrict(fieldDataDBOperationSpec.newExtDataIDName))) {
            throw new DataAccessException("Error inserting Field Data name " + fieldDataDBOperationSpec.newExtDataIDName + "\n" + "Field Data names can contain only letters,digits and underscores");
        }
        KeyValue newKey = keyFactory.getNewKey(con);
        String sql = "INSERT INTO " + ExternalDataTable.table.getTableName() + " " + ExternalDataTable.table.getSQLColumnList() + " VALUES " + ExternalDataTable.table.getSQLValueList(newKey, user, fieldDataDBOperationSpec.newExtDataIDName, fieldDataDBOperationSpec.annotation);
        DbDriver.updateCleanSQL(con, sql);
        ExternalDataIdentifier[] fdiArr = FieldDataDBOperationDriver.fieldDataDBOperation(con, keyFactory, user, FieldDataDBOperationSpec.createGetExtDataIDsSpec(user)).extDataIDArr;
        for (int i = 0; i < fdiArr.length; i++) {
            if (fdiArr[i].getName().equals(fieldDataDBOperationSpec.newExtDataIDName)) {
                FieldDataDBOperationResults fieldDataDBOperationResults = new FieldDataDBOperationResults();
                fieldDataDBOperationResults.extDataID = fdiArr[i];
                ;
                return fieldDataDBOperationResults;
            }
        }
        throw new DataAccessException("Unable to retrieve inserted ExternalDataIdentifier " + fieldDataDBOperationSpec.newExtDataIDName);
    } else if (fieldDataDBOperationSpec.opType == FieldDataDBOperationSpec.FDDBOS_DELETE) {
        String sql = "DELETE" + " FROM " + ExternalDataTable.table.getTableName() + " WHERE " + ExternalDataTable.table.ownerRef + " = " + user.getID() + " AND " + ExternalDataTable.table.id + " = " + fieldDataDBOperationSpec.specEDI.getKey().toString();
        DbDriver.updateCleanSQL(con, sql);
        return new FieldDataDBOperationResults();
    }
    throw new DataAccessException("Unknown FieldDataDBOperation " + fieldDataDBOperationSpec.opType);
}
Also used : KeyValue(org.vcell.util.document.KeyValue) HashMap(java.util.HashMap) Hashtable(java.util.Hashtable) Statement(java.sql.Statement) ExternalDataIdentifier(org.vcell.util.document.ExternalDataIdentifier) ResultSet(java.sql.ResultSet) FieldDataDBOperationResults(cbit.vcell.field.FieldDataDBOperationResults) Vector(java.util.Vector) DataAccessException(org.vcell.util.DataAccessException)

Example 43 with ExternalDataIdentifier

use of org.vcell.util.document.ExternalDataIdentifier in project vcell by virtualcell.

the class ExternalDataTable method getExternalDataIdentifier.

public org.vcell.util.document.ExternalDataIdentifier getExternalDataIdentifier(ResultSet rset) throws SQLException {
    KeyValue extDataIDKey = new KeyValue(rset.getBigDecimal(ExternalDataTable.table.id.getUnqualifiedColName()));
    String externalDataName = rset.getString(ExternalDataTable.table.externalDataName.getUnqualifiedColName());
    String sourceUserID = rset.getString(UserTable.table.userid.getUnqualifiedColName());
    KeyValue sourceUserKey = new KeyValue(rset.getBigDecimal(ExternalDataTable.table.ownerRef.getUnqualifiedColName()));
    User sourceUser = new User(sourceUserID, sourceUserKey);
    // String annot = rset.getString(ExternalDataTable.table.annotation.getUnqualifiedColName());
    return new ExternalDataIdentifier(extDataIDKey, sourceUser, externalDataName);
}
Also used : KeyValue(org.vcell.util.document.KeyValue) User(org.vcell.util.document.User) ExternalDataIdentifier(org.vcell.util.document.ExternalDataIdentifier)

Example 44 with ExternalDataIdentifier

use of org.vcell.util.document.ExternalDataIdentifier in project vcell by virtualcell.

the class RunRefSimulationFastOp method getROIDataGenerator.

private ROIDataGenerator getROIDataGenerator(LocalContext localWorkspace, ROI[] rois) throws ImageException, IOException {
    // create ROI image
    short[] roiFieldData = null;
    if (rois.length > 0) {
        Origin origin = new Origin(0, 0, 0);
        Extent extent = rois[0].getRoiImages()[0].getExtent();
        ISize isize = rois[0].getISize();
        int numROIX = rois[0].getISize().getX();
        int numROIY = rois[0].getISize().getY();
        roiFieldData = new short[numROIX * numROIY];
        short regionCounter = 1;
        for (int roiIdx = 0; roiIdx < rois.length; roiIdx++) {
            short[] roiImg = rois[roiIdx].getPixelsXYZ();
            for (int pixelIdx = 0; pixelIdx < (numROIX * numROIY); pixelIdx++) {
                if (roiImg[pixelIdx] > 0) {
                    roiFieldData[pixelIdx] = regionCounter;
                }
            }
            regionCounter++;
        }
        // create field data
        int NumTimePoints = 1;
        // 8 rois integrated into 1 image
        int NumChannels = 1;
        short[][][] pixData = new short[NumTimePoints][NumChannels][];
        pixData[0][0] = roiFieldData;
        // get extental data id
        VCImage vcImage = new VCImageUncompressed(null, new byte[isize.getXYZ()], extent, isize.getX(), isize.getY(), isize.getZ());
        RegionImage regionImage = new RegionImage(vcImage, 0, null, null, RegionImage.NO_SMOOTHING);
        CartesianMesh simpleCartesianMesh = CartesianMesh.createSimpleCartesianMesh(origin, extent, isize, regionImage);
        ExternalDataIdentifier newROIExtDataID = createNewExternalDataInfo(localWorkspace, ROI_SUMDATA_NAME).getExternalDataIdentifier();
        try {
            FieldDataFileOperationSpec fdos = new FieldDataFileOperationSpec();
            fdos.opType = FieldDataFileOperationSpec.FDOS_ADD;
            fdos.cartesianMesh = simpleCartesianMesh;
            fdos.shortSpecData = pixData;
            fdos.specEDI = newROIExtDataID;
            fdos.varNames = new String[] { "roiSumDataVar" };
            fdos.owner = LocalWorkspace.getDefaultOwner();
            fdos.times = new double[] { 0.0 };
            fdos.variableTypes = new VariableType[] { VariableType.VOLUME };
            fdos.origin = origin;
            fdos.extent = extent;
            fdos.isize = isize;
            localWorkspace.getDataSetControllerImpl().fieldDataFileOperation(fdos);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return new ROIDataGenerator(ROI_EXTDATA_NAME, /*name*/
        new int[] { 0 }, /* volumePoints*/
        new int[0], /* membranePoints*/
        regionCounter, /*numRegions*/
        0, /*zSlice*/
        newROIExtDataID.getKey(), /* fieldDataKey, sample image*/
        new FieldFunctionArguments(ROI_SUMDATA_NAME, ROI_SUMDATA_VARNAME, new Expression(0), VariableType.VOLUME), /*FieldFunctionArguments, sample image*/
        false);
    }
    return null;
}
Also used : Origin(org.vcell.util.Origin) Extent(org.vcell.util.Extent) FieldFunctionArguments(cbit.vcell.field.FieldFunctionArguments) ISize(org.vcell.util.ISize) FieldDataFileOperationSpec(cbit.vcell.field.io.FieldDataFileOperationSpec) VCImage(cbit.image.VCImage) VCImageUncompressed(cbit.image.VCImageUncompressed) ImageException(cbit.image.ImageException) ObjectNotFoundException(org.vcell.util.ObjectNotFoundException) IOException(java.io.IOException) UserCancelException(org.vcell.util.UserCancelException) ROIDataGenerator(org.vcell.vmicro.workflow.data.ROIDataGenerator) CartesianMesh(cbit.vcell.solvers.CartesianMesh) Expression(cbit.vcell.parser.Expression) RegionImage(cbit.vcell.geometry.RegionImage) ExternalDataIdentifier(org.vcell.util.document.ExternalDataIdentifier)

Example 45 with ExternalDataIdentifier

use of org.vcell.util.document.ExternalDataIdentifier in project vcell by virtualcell.

the class MathDescriptionDbDriver method insertMathDescExternalDataLink.

private void insertMathDescExternalDataLink(Connection con, User user, MathDescription mathDesc, KeyValue newMathDescKey) throws DataAccessException {
    try {
        ExternalDataIdentifier[] extDataIDArr = fieldDataDBOperation(con, keyFactory, user, FieldDataDBOperationSpec.createGetExtDataIDsSpec(user)).extDataIDArr;
        boolean[] bExtDataInserted = new boolean[extDataIDArr.length];
        FieldFunctionArguments[] fieldFuncArgsArr = FieldUtilities.getFieldFunctionArguments(mathDesc);
        for (int i = 0; i < fieldFuncArgsArr.length; i += 1) {
            for (int k = 0; k < extDataIDArr.length; k += 1) {
                if (!bExtDataInserted[k] && extDataIDArr[k].getName().equals(fieldFuncArgsArr[i].getFieldName())) {
                    bExtDataInserted[k] = true;
                    KeyValue newKey = keyFactory.getNewKey(con);
                    updateCleanSQL(con, "INSERT INTO " + MathDescExternalDataLinkTable.table.getTableName() + " VALUES " + MathDescExternalDataLinkTable.table.getSQLValueList(newKey, newMathDescKey, extDataIDArr[k].getKey()));
                    break;
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace(System.out);
        throw new DataAccessException("Error inserting MathDescription-ExtrnalData link\n" + e.getMessage());
    }
}
Also used : KeyValue(org.vcell.util.document.KeyValue) FieldFunctionArguments(cbit.vcell.field.FieldFunctionArguments) ExternalDataIdentifier(org.vcell.util.document.ExternalDataIdentifier) PermissionException(org.vcell.util.PermissionException) ObjectNotFoundException(org.vcell.util.ObjectNotFoundException) SQLException(java.sql.SQLException) DependencyException(org.vcell.util.DependencyException) RecordChangedException(cbit.sql.RecordChangedException) DataAccessException(org.vcell.util.DataAccessException) MathException(cbit.vcell.math.MathException) DataAccessException(org.vcell.util.DataAccessException)

Aggregations

ExternalDataIdentifier (org.vcell.util.document.ExternalDataIdentifier)46 DataAccessException (org.vcell.util.DataAccessException)15 KeyValue (org.vcell.util.document.KeyValue)15 FieldFunctionArguments (cbit.vcell.field.FieldFunctionArguments)12 File (java.io.File)12 UserCancelException (org.vcell.util.UserCancelException)12 User (org.vcell.util.document.User)12 FieldDataIdentifierSpec (cbit.vcell.field.FieldDataIdentifierSpec)9 Hashtable (java.util.Hashtable)9 ISize (org.vcell.util.ISize)9 AsynchClientTask (cbit.vcell.client.task.AsynchClientTask)8 Expression (cbit.vcell.parser.Expression)8 Origin (org.vcell.util.Origin)8 FieldDataFileOperationSpec (cbit.vcell.field.io.FieldDataFileOperationSpec)7 Element (org.jdom.Element)7 Extent (org.vcell.util.Extent)7 ObjectNotFoundException (org.vcell.util.ObjectNotFoundException)7 ImageException (cbit.image.ImageException)6 FieldDataDBOperationResults (cbit.vcell.field.FieldDataDBOperationResults)6 RegionImage (cbit.vcell.geometry.RegionImage)6