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;
}
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);
}
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);
}
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;
}
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());
}
}
Aggregations