use of org.vcell.util.document.ReferenceQueryResult in project vcell by virtualcell.
the class DatabaseWindowManager method findModelsUsingSelectedGeometry.
/**
* Insert the method's description here.
* Creation date: (11/6/2005 9:15:25 AM)
*/
public void findModelsUsingSelectedGeometry() {
AsynchClientTask findModelsTask = new AsynchClientTask("Finding Models...", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {
@Override
public void run(Hashtable<String, Object> hashTable) throws Exception {
VCDocumentInfo selectedDocument = getPanelSelection();
if (!(selectedDocument instanceof GeometryInfo)) {
PopupGenerator.showErrorDialog(DatabaseWindowManager.this, "DatabaseWindowManager.findModelsUsingSelectedGeometry expected a GeometryInfo\nbut got type=" + selectedDocument.getClass().getName() + " instead");
return;
}
ReferenceQuerySpec rqs = new ReferenceQuerySpec(VersionableType.Geometry, selectedDocument.getVersion().getVersionKey());
// try{
ReferenceQueryResult rqr = getRequestManager().getDocumentManager().findReferences(rqs);
// cbit.vcell.modeldb.VersionableTypeVersion[] children = (rqr.getVersionableFamily().bChildren()?rqr.getVersionableFamily().getUniqueChildren():null);
VersionableTypeVersion[] dependants = (rqr.getVersionableFamily().bDependants() ? rqr.getVersionableFamily().getUniqueDependants() : null);
// System.out.println("\n");
// if(children != null){
// for(int i=0;i<children.length;i+= 1){
// if( children[i] != rqr.getVersionableFamily().getTarget()){
// System.out.println("Children "+children[i]+" key="+children[i].getVersion().getVersionKey()+" date="+children[i].getVersion().getDate());
// }
// }
// }else{
// System.out.println("No Children");
// }
// if(dependants != null){
// for(int i=0;i<dependants.length;i+= 1){
// if( dependants[i] != rqr.getVersionableFamily().getTarget()){
// System.out.println("Dependants "+dependants[i]+" key="+dependants[i].getVersion().getVersionKey()+" date="+dependants[i].getVersion().getDate());
// }
// }
// }else{
// System.out.println("No Dependants");
// }
// System.out.println("\nVersionableRelationships");
// cbit.vcell.modeldb.VersionableRelationship[] vrArr = rqr.getVersionableFamily().getDependantRelationships();
// for(int i=0;i<vrArr.length;i+= 1){
// System.out.println(vrArr[i].from() +" -> "+vrArr[i].to());
// }
Hashtable<String, Object> choices = new Hashtable<String, Object>();
if (dependants != null) {
// System.out.println("\nMajor Relationships");
for (int i = 0; i < dependants.length; i += 1) {
boolean isBioModel = dependants[i].getVType().equals(VersionableType.BioModelMetaData);
boolean isTop = isBioModel || dependants[i].getVType().equals(VersionableType.MathModelMetaData);
if (isTop) {
VersionableRelationship[] vrArr2 = rqr.getVersionableFamily().getDependantRelationships();
for (int j = 0; j < vrArr2.length; j += 1) {
if ((vrArr2[j].from() == dependants[i]) && vrArr2[j].to().getVType().equals((isBioModel ? VersionableType.SimulationContext : VersionableType.MathDescription))) {
for (int k = 0; k < vrArr2.length; k += 1) {
if ((vrArr2[k].from() == vrArr2[j].to()) && vrArr2[k].to().getVType().equals(VersionableType.Geometry)) {
String s = (isBioModel ? "BioModel" : "MathModel") + " " + "\"" + dependants[i].getVersion().getName() + "\" (" + dependants[i].getVersion().getDate() + ")" + (isBioModel ? " (App=\"" + vrArr2[k].from().getVersion().getName() + "\")" : /*+" -> "*/
"");
// +" Geometry="+vrArr2[k].to().getVersion().getName()+" "+vrArr2[k].to().getVersion().getDate();
choices.put(s, dependants[i]);
// System.out.println(s);
}
}
}
}
}
}
}
if (choices.size() > 0) {
Object[] listObj = choices.keySet().toArray();
Object o = DialogUtils.showListDialog(getComponent(), listObj, "Models Referencing Geometry (Select To Open) " + selectedDocument.getVersion().getName() + " " + selectedDocument.getVersion().getDate());
if (o != null) {
VersionableTypeVersion v = (VersionableTypeVersion) choices.get(o);
// System.out.println(v);
if (v.getVType().equals(VersionableType.BioModelMetaData)) {
BioModelInfo bmi = getRequestManager().getDocumentManager().getBioModelInfo(v.getVersion().getVersionKey());
getRequestManager().openDocument(bmi, DatabaseWindowManager.this, true);
} else if (v.getVType().equals(VersionableType.MathModelMetaData)) {
MathModelInfo mmi = getRequestManager().getDocumentManager().getMathModelInfo(v.getVersion().getVersionKey());
getRequestManager().openDocument(mmi, DatabaseWindowManager.this, true);
}
}
} else {
if (dependants == null) {
DialogUtils.showInfoDialog(getComponent(), "No Model references found.\n" + (rqr.getVersionableFamily().getTarget().getVersion().getFlag().isArchived() ? "Info: Not Deletable (key=" + rqr.getVersionableFamily().getTarget().getVersion().getVersionKey() + ") because legacy ARCHIVE set" : ""));
} else {
DialogUtils.showInfoDialog(getComponent(), "No current Model references found.\n" + "Geometry has internal database references from\n" + "previously linked Model(s).\n" + "Not Deletable until database is culled (daily).");
}
// return;
}
// }catch(DataAccessException e){
// DialogUtils.showErrorDialog(getComponent(), "Error find Geometry Model references\n"+e.getClass().getName()+"\n"+e.getMessage());
// }
}
};
ClientTaskDispatcher.dispatch(getComponent(), new Hashtable<String, Object>(), new AsynchClientTask[] { findModelsTask }, false);
}
use of org.vcell.util.document.ReferenceQueryResult in project vcell by virtualcell.
the class FieldDataWindowManager method findReferencingModels.
public boolean findReferencingModels(final ExternalDataIdentifier targetExtDataID, boolean bShowReferencingModelsList) throws DataAccessException, UserCancelException {
ReferenceQuerySpec rqs = new ReferenceQuerySpec(targetExtDataID);
ReferenceQueryResult rqr = getRequestManager().getDocumentManager().findReferences(rqs);
VersionableTypeVersion[] dependants = null;
Hashtable<VersionableTypeVersion, String[]> choices = new Hashtable<VersionableTypeVersion, String[]>();
boolean bDanglingReferences = false;
VersionableType bioModelType = VersionableType.BioModelMetaData;
VersionableType mathModelType = VersionableType.MathModelMetaData;
if (rqr != null) {
dependants = (rqr.getVersionableFamily().bDependants() ? rqr.getVersionableFamily().getUniqueDependants() : null);
if (dependants != null) {
for (int i = 0; i < dependants.length; i += 1) {
boolean isBioModel = dependants[i].getVType().equals(bioModelType);
boolean isTop = isBioModel || dependants[i].getVType().equals(mathModelType);
if (isTop) {
VersionableRelationship[] vrArr2 = rqr.getVersionableFamily().getDependantRelationships();
for (int j = 0; j < vrArr2.length; j += 1) {
if ((vrArr2[j].from() == dependants[i]) && vrArr2[j].to().getVType().equals((isBioModel ? VersionableType.SimulationContext : VersionableType.MathDescription))) {
for (int k = 0; k < vrArr2.length; k += 1) {
boolean bAdd = false;
if (k == j && vrArr2[k].from().getVType().equals(mathModelType)) {
bAdd = true;
}
if ((vrArr2[k].from() == vrArr2[j].to()) && vrArr2[k].to().getVType().equals(VersionableType.MathDescription)) {
bAdd = true;
}
if (bAdd) {
choices.put(dependants[i], new String[] { dependants[i].getVersion().getName(), (isBioModel ? bioModelType.getTypeName() : mathModelType.getTypeName()), (isBioModel ? vrArr2[k].from().getVersion().getName() : ""), dependants[i].getVersion().getVersionKey().toString() });
}
}
}
}
}
}
bDanglingReferences = (choices.size() == 0);
} else {
bDanglingReferences = true;
}
}
// FieldDataFileOperationResults fdfor = getRequestManager().getDocumentManager().fieldDataFileOperation(
// FieldDataFileOperationSpec.createDependantFuncsFieldDataFileOperationSpec(targetExtDataID));
FieldDataFileOperationResults fdfor = null;
boolean bHasReferences = false;
if (choices.size() > 0 || fdfor != null) {
bHasReferences = true;
if (bShowReferencingModelsList) {
String[] columnNames = new String[] { "Model", "Type", "Description" };
Vector<VersionableType> varTypeV = new Vector<VersionableType>();
Vector<KeyValue> keyValV = new Vector<KeyValue>();
Vector<String[]> choicesV = new Vector<String[]>();
String[][] modelListData = choices.values().toArray(new String[0][0]);
for (int i = 0; i < modelListData.length; i++) {
choicesV.add(new String[] { modelListData[i][0], modelListData[i][1], "Model Variable - " + (modelListData[i][2].length() == 0 ? "" : "App='" + modelListData[i][2] + "'") + " version[" + modelListData[i][3] + "]" });
varTypeV.add((modelListData[i][1].equals(bioModelType.getTypeName()) ? bioModelType : mathModelType));
keyValV.add(new KeyValue(modelListData[i][3]));
}
for (int i = 0; fdfor != null && i < fdfor.dependantFunctionInfo.length; i++) {
String functionNames = "";
for (int j = 0; j < fdfor.dependantFunctionInfo[i].funcNames.length; j++) {
functionNames += (j > 0 ? "," : "") + fdfor.dependantFunctionInfo[i].funcNames[j];
}
choicesV.add(new String[] { fdfor.dependantFunctionInfo[i].referenceSourceName, fdfor.dependantFunctionInfo[i].referenceSourceType, "Data Viewer Function(s) '" + functionNames + "' - " + (fdfor.dependantFunctionInfo[i].applicationName == null ? "" : "App='" + fdfor.dependantFunctionInfo[i].applicationName + "' ") + (fdfor.dependantFunctionInfo[i].simulationName == null ? "" : "Sim='" + fdfor.dependantFunctionInfo[i].simulationName + "' ") + "version[" + fdfor.dependantFunctionInfo[i].refSourceVersionDate + "]" });
if (fdfor.dependantFunctionInfo[i].referenceSourceType.equals(FieldDataFileOperationResults.FieldDataReferenceInfo.FIELDDATATYPENAME)) {
varTypeV.add(null);
} else if (fdfor.dependantFunctionInfo[i].referenceSourceType.equals(bioModelType.getTypeName())) {
varTypeV.add(bioModelType);
} else if (fdfor.dependantFunctionInfo[i].referenceSourceType.equals(mathModelType.getTypeName())) {
varTypeV.add(mathModelType);
} else {
throw new IllegalArgumentException("Unknown reference source type " + fdfor.dependantFunctionInfo[i].referenceSourceType);
}
keyValV.add(fdfor.dependantFunctionInfo[i].refSourceVersionKey);
}
int[] selectionArr = PopupGenerator.showComponentOKCancelTableList(getComponent(), "References to Field Data (Select To Open) " + targetExtDataID.getName(), columnNames, choicesV.toArray(new String[0][0]), ListSelectionModel.SINGLE_SELECTION);
if (selectionArr != null && selectionArr.length > 0) {
if (varTypeV.elementAt(selectionArr[0]) != null) {
if (varTypeV.elementAt(selectionArr[0]).equals(bioModelType)) {
BioModelInfo bmi = getRequestManager().getDocumentManager().getBioModelInfo(keyValV.elementAt(selectionArr[0]));
getRequestManager().openDocument(bmi, FieldDataWindowManager.this, true);
} else if (varTypeV.elementAt(selectionArr[0]).equals(mathModelType)) {
MathModelInfo mmi = getRequestManager().getDocumentManager().getMathModelInfo(keyValV.elementAt(selectionArr[0]));
getRequestManager().openDocument(mmi, FieldDataWindowManager.this, true);
} else {
throw new IllegalArgumentException("Not expecting varType " + varTypeV.elementAt(selectionArr[0]));
}
} else {
PopupGenerator.showInfoDialog(this, "use FiledDataManager to view FieldData '" + choicesV.elementAt(selectionArr[0])[0] + "'");
}
}
}
} else {
if (!bDanglingReferences) {
bHasReferences = false;
if (bShowReferencingModelsList) {
PopupGenerator.showInfoDialog(this, "No Model references found for Field Data " + targetExtDataID.getName());
}
} else {
bHasReferences = true;
if (bShowReferencingModelsList) {
PopupGenerator.showInfoDialog(this, "No current Model references found.\n" + "Field Data has internal database references from\n" + "previously linked Model(s) that have been deleted.\n" + "Note: Field Data '" + targetExtDataID.getName() + "' is not deletable\n" + "until database is culled (daily).");
}
}
}
return bHasReferences;
}
use of org.vcell.util.document.ReferenceQueryResult in project vcell by virtualcell.
the class DBTopLevel method findReferences.
/**
* Insert the method's description here.
* Creation date: (11/6/2005 10:16:41 AM)
* @return cbit.vcell.modeldb.ReferenceQueryResult
* @param user cbit.vcell.server.User
* @param rqs cbit.vcell.modeldb.ReferenceQuerySpec
*/
ReferenceQueryResult findReferences(User user, ReferenceQuerySpec rqs2, boolean bEnableRetry) throws DataAccessException, java.sql.SQLException {
Object lock = new Object();
Connection con = conFactory.getConnection(lock);
try {
// Use MathDescription for search if ExternalData
VersionableType rqsVType = null;
KeyValue[] vTypeKeys = null;
if (rqs2.isVersionableType()) {
rqsVType = rqs2.getVersionableType();
vTypeKeys = new KeyValue[] { rqs2.getKeyValue() };
} else if (rqs2.isExternalDataIdentiferType()) {
DbDriver.cleanupDeletedReferences(con, user, rqs2.getExternalDataIdentifier(), false);
con.commit();
rqsVType = VersionableType.MathDescription;
vTypeKeys = getMathDescKeysForExternalData(rqs2.getKeyValue(), user, true);
if (vTypeKeys == null || vTypeKeys.length == 0) {
return null;
}
}
if (rqsVType == null) {
throw new DataAccessException("findAllReferences error: Couldn't determine Query type");
}
VersionableFamily finalVersionalbeFamily = null;
for (int k = 0; k < vTypeKeys.length; k += 1) {
// Find references
VersionableFamily vf = getAllReferences(user, vTypeKeys[k], rqsVType, true);
// Check permission
if (vf.bDependants()) {
VersionableTypeVersion[] vtvArr = vf.getUniqueDependants();
for (int i = 0; i < vtvArr.length; i += 1) {
if (vtvArr[i].getVType().equals(VersionableType.BioModelMetaData)) {
Vector<VersionInfo> checkedVInfos = getVersionableInfos(user, vtvArr[i].getVersion().getVersionKey(), VersionableType.BioModelMetaData, false, true, true);
if (checkedVInfos == null || checkedVInfos.size() == 0) {
throw new DataAccessException("References Not Accessible");
}
} else if (vtvArr[i].getVType().equals(VersionableType.MathModelMetaData)) {
Vector<VersionInfo> checkedVInfos = getVersionableInfos(user, vtvArr[i].getVersion().getVersionKey(), VersionableType.MathModelMetaData, false, true, true);
if (checkedVInfos == null || checkedVInfos.size() == 0) {
throw new DataAccessException("References Not Accessible");
}
}
}
}
if (finalVersionalbeFamily == null) {
finalVersionalbeFamily = vf;
} else {
VersionableRelationship[] versRelArr = vf.getDependantRelationships();
for (int r = 0; r < versRelArr.length; r += 1) {
finalVersionalbeFamily.addDependantRelationship(versRelArr[r]);
}
}
}
return new ReferenceQueryResult(finalVersionalbeFamily);
} catch (Throwable e) {
lg.error(e.getMessage(), e);
if (bEnableRetry && isBadConnection(con)) {
conFactory.failed(con, lock);
return findReferences(user, rqs2, false);
} else {
handle_DataAccessException_SQLException(e);
// never gets here;
return null;
}
} finally {
conFactory.release(con, lock);
}
}
Aggregations