]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-5943: Retrieve only a single column of ID values. Allow specifying max limit...
authorAron Roberts <aron@socrates.berkeley.edu>
Wed, 3 Apr 2013 21:37:43 +0000 (14:37 -0700)
committerAron Roberts <aron@socrates.berkeley.edu>
Wed, 3 Apr 2013 21:37:43 +0000 (14:37 -0700)
services/client/src/main/java/org/collectionspace/services/client/IQueryManager.java
services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto.xml
services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/RepositoryJavaClientImpl.java

index 61b4feedb99e3aeec711022aaa62cb1d651926cc..33f0d465b57d0a5fd84b1b95111490c6ede3294b 100644 (file)
@@ -93,6 +93,7 @@ public interface IQueryManager {
        final static String CMIS_TARGET_UPDATED_AT = CMIS_TARGET_PREFIX + "." + CMIS_CS_UPDATED_AT;\r
        \r
        final static String TENANT_USES_STARTING_WILDCARD_FOR_PARTIAL_TERM = "ptStartingWildcard";\r
+        final static String MAX_LIST_ITEMS_RETURNED_LIMIT_ON_JDBC_QUERIES = "maxListItemsReturnedLimitOnJdbcQueries";\r
 \r
        public void execQuery(String queryString);\r
        \r
index ac8b358593465d4019322bd259e26584b6e0f6b0..ed2da9e89210e4f21a5b068aa8e5f0aca02a2248 100644 (file)
                 <types:value>da</types:value>
             </types:item>
             -->
+            <types:item xmlns:types="http://collectionspace.org/services/config/types">
+                <types:key>maxListItemsReturnedLimitOnJdbcQueries</types:key>
+                <types:value>40</types:value>
+           </types:item>
         </tenant:properties>        
         
         <!-- begin idgenerator service meta-data -->
index 32ea43ba1a4c26147a47fc6b5a254c1e9db24a03..aa42de7db927fe246353f90af533e37a0056cb23 100644 (file)
@@ -919,8 +919,6 @@ public class RepositoryJavaClientImpl implements RepositoryClient<PoxPayloadIn,
             DocumentHandler handler, QueryContext queryContext) throws Exception {
         DocumentModelList result = new DocumentModelListImpl();
         
-        final int LIMIT_SIZE = 40; // FIXME: Get from configuration and/or pagination query params
-
         String dataSourceName = JDBCTools.NUXEO_DATASOURCE_NAME;
         String repositoryName = ctx.getRepositoryName();
         
@@ -945,7 +943,7 @@ public class RepositoryJavaClientImpl implements RepositoryClient<PoxPayloadIn,
         
         // Start with the default query
         String selectStatement =
-                "SELECT DISTINCT hierarchy_termgroup.id as id, hierarchy_termgroup.parentid as parentid"
+                "SELECT DISTINCT hierarchy_termgroup.parentid as id"
                 + " FROM " + handler.getJDBCQueryParams().get(TERM_GROUP_TABLE_NAME_PARAM) + " termgroup ";
         
         String joinClauses =
@@ -957,17 +955,19 @@ public class RepositoryJavaClientImpl implements RepositoryClient<PoxPayloadIn,
         String whereClause =
                 " WHERE (termgroup.termdisplayname ILIKE ?) ";
         
+        TenantBindingConfigReaderImpl tReader =
+                ServiceMain.getInstance().getTenantBindingConfigReader();
+        TenantBindingType tenantBinding = tReader.getTenantBinding(ctx.getTenantId());
+        String maxListItemsLimit = TenantBindingUtils.getPropertyValue(tenantBinding,
+                IQueryManager.MAX_LIST_ITEMS_RETURNED_LIMIT_ON_JDBC_QUERIES);
         String limitClause =
-                " LIMIT " + LIMIT_SIZE;
+                " LIMIT " + getMaxItemsLimitOnJdbcQueries(maxListItemsLimit); // implicit int-to-String conversion
         
         List<String> params = new ArrayList<>();
 
         // Read tenant bindings configuration to determine whether
         // to automatically insert leading, as well as trailing, wildcards
         // into the term matching string.
-        TenantBindingConfigReaderImpl tReader =
-                ServiceMain.getInstance().getTenantBindingConfigReader();
-        TenantBindingType tenantBinding = tReader.getTenantBinding(ctx.getTenantId());
         String usesStartingWildcard = TenantBindingUtils.getPropertyValue(tenantBinding,
                 IQueryManager.TENANT_USES_STARTING_WILDCARD_FOR_PARTIAL_TERM);
         // Handle user-provided leading wildcard characters, in the
@@ -1038,11 +1038,7 @@ public class RepositoryJavaClientImpl implements RepositoryClient<PoxPayloadIn,
             String id;
             crs.beforeFirst();
             while (crs.next()) {
-                // Obtain parent IDs in the hierarchy table from column 2
-                // of results. These IDs correspond to parent (authority item)
-                // document records, rather than to term information group
-                // records.
-                id = crs.getString(2);
+                id = crs.getString(1);
                 if (Tools.notBlank(id)) {
                     docIds.add(id);
                 }
@@ -1668,4 +1664,18 @@ public class RepositoryJavaClientImpl implements RepositoryClient<PoxPayloadIn,
         }
         return partialTerm;
     }
+
+    private int getMaxItemsLimitOnJdbcQueries(String maxListItemsLimit) {
+        final int DEFAULT_ITEMS_LIMIT = 40;
+        int itemsLimit;
+        try {
+            itemsLimit = Integer.parseInt(maxListItemsLimit);
+            if (itemsLimit < 1) {
+                itemsLimit = DEFAULT_ITEMS_LIMIT;
+            }
+        } catch (NumberFormatException nfe) {
+            itemsLimit = DEFAULT_ITEMS_LIMIT;
+        }
+        return itemsLimit;
+    }
 }