Search in sources :

Example 6 with VersionableRelationship

use of org.vcell.util.document.VersionableRelationship 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);
    }
}
Also used : KeyValue(org.vcell.util.document.KeyValue) VersionableFamily(org.vcell.util.document.VersionableFamily) VersionableTypeVersion(org.vcell.util.document.VersionableTypeVersion) ReferenceQueryResult(org.vcell.util.document.ReferenceQueryResult) Connection(java.sql.Connection) VersionableType(org.vcell.util.document.VersionableType) VersionInfo(org.vcell.util.document.VersionInfo) VersionableRelationship(org.vcell.util.document.VersionableRelationship) Vector(java.util.Vector) DataAccessException(org.vcell.util.DataAccessException)

Aggregations

VersionableRelationship (org.vcell.util.document.VersionableRelationship)6 VersionableTypeVersion (org.vcell.util.document.VersionableTypeVersion)6 Vector (java.util.Vector)4 DataAccessException (org.vcell.util.DataAccessException)3 ReferenceQueryResult (org.vcell.util.document.ReferenceQueryResult)3 VersionableType (org.vcell.util.document.VersionableType)3 BigDecimal (java.math.BigDecimal)2 ResultSet (java.sql.ResultSet)2 Statement (java.sql.Statement)2 Hashtable (java.util.Hashtable)2 BioModelInfo (org.vcell.util.document.BioModelInfo)2 KeyValue (org.vcell.util.document.KeyValue)2 MathModelInfo (org.vcell.util.document.MathModelInfo)2 ReferenceQuerySpec (org.vcell.util.document.ReferenceQuerySpec)2 Version (org.vcell.util.document.Version)2 VersionableFamily (org.vcell.util.document.VersionableFamily)2 AsynchClientTask (cbit.vcell.client.task.AsynchClientTask)1 FieldDataFileOperationResults (cbit.vcell.field.io.FieldDataFileOperationResults)1 GeometryInfo (cbit.vcell.geometry.GeometryInfo)1 Connection (java.sql.Connection)1