]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-497: Added query parameters to REST call to return lists of ID generator insta...
authorAron Roberts <aron@socrates.berkeley.edu>
Thu, 8 Oct 2009 03:13:09 +0000 (03:13 +0000)
committerAron Roberts <aron@socrates.berkeley.edu>
Thu, 8 Oct 2009 03:13:09 +0000 (03:13 +0000)
services/id/service/src/main/java/org/collectionspace/services/id/IDResource.java
services/id/service/src/main/java/org/collectionspace/services/id/IDService.java
services/id/service/src/main/java/org/collectionspace/services/id/IDServiceJdbcImpl.java
services/id/service/src/test/java/org/collectionspace/services/id/test/IDServiceJdbcImplTest.java

index 254dcbc3f93dd554d6cd0b59a8c6810ee8a5e43b..fd6ee9109fca110c1f7de7c0daca07664c02b9c2 100644 (file)
@@ -30,6 +30,7 @@ import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.POST;
 import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
@@ -264,15 +265,22 @@ public class IDResource {
     * 
     * Required to facilitate a HEAD method test in ServiceLayerTest.
     *
+    * @param   format  A representation ("format") in which to return list items,
+    *                  such as a "full" or "summary" format.
+    *
     * @return  A list of representations of ID generator instance resources.
     */
     @GET
     @Path("")
     @Produces(MediaType.APPLICATION_XML)
-    public Response readIDGeneratorsList() {
+    public Response readIDGeneratorsList(@QueryParam("format") String format) {
             
         logger.debug("> in readIDGeneratorsList()");
 
+        // @TODO The name of the query parameter above is arbitrary, as
+        // is the type of result returned.  These should be standardized
+        // project-wide, and referenced as project-wide constants/enums.
+
         Response response = null;
         response = response.ok().build();
         String resourceRepresentation = "";
@@ -284,17 +292,38 @@ public class IDResource {
         final String LIST_ITEM_START = "<item>";
         final String LIST_ITEM_END = "</item>";
 
+        final String LIST_FORMAT_FULL = "full";
+        final String LIST_FORMAT_SUMMARY = "summary";
+
         try {
 
-            List<String> generators = service.readIDGeneratorsList();
+            List<String> generators = null;
+            if (format == null || format.equals("")) {
+                generators = service.readIDGeneratorsSummaryList();
+            } else if (format.equalsIgnoreCase(LIST_FORMAT_SUMMARY)) {
+                generators = service.readIDGeneratorsSummaryList();
+            } else if (format.equalsIgnoreCase(LIST_FORMAT_FULL)) {
+                generators = service.readIDGeneratorsList();
+            } else {
+                // @TODO Return an appropriate XML-based entity body upon error.
+                String msg = "Query parameter '" + format + "' was not recognized.";
+                logger.debug(msg);
+                response = Response.status(Response.Status.BAD_REQUEST)
+                    .entity("").type(MediaType.TEXT_PLAIN).build();
+            }
 
             // @TODO Replace this placeholder/expedient, as per above
             StringBuffer sb = new StringBuffer("");
             sb.append(LIST_ROOT_START);
-            for (String generator : generators) {
-                sb.append(LIST_ITEM_START);
-                sb.append(generator);
-                sb.append(LIST_ITEM_END);
+            
+            // @TODO Summary list should return relative URLs,
+            // possibly also human-readable descriptions.
+            if (generators != null) {
+                for (String generator : generators) {
+                    sb.append(LIST_ITEM_START);
+                    sb.append(generator);
+                    sb.append(LIST_ITEM_END);
+                }
             }
             sb.append(LIST_ROOT_END);
 
index 95223fbec743192985ed6cd3f79c30067bf993fc..69f8462a1d88b237455d8b0dffdc224c0a7465e1 100644 (file)
@@ -68,9 +68,14 @@ public interface IDService {
         IllegalArgumentException, IllegalStateException;
     
     // Read a list of objects (aka read multiple)
-    // Read single object
+    // and return in a full list format.
     public List<String> readIDGeneratorsList() throws IllegalStateException;
-    
+
+    // Read a list of objects (aka read multiple)
+    // and return in a summary list format.
+    public List<String> readIDGeneratorsSummaryList() throws BadRequestException,
+       IllegalStateException;
+
     // Update (may need to check for changes in the ID generator structure)
     public void updateIDGenerator(String csid, String serializedIDGenerator)
         throws DocumentNotFoundException, BadRequestException,
index ea27a17aabd384c23eebce196c5327a130877d40..0ba4cfaefb0e8009f612be11b4e8c2ad67bb234c 100644 (file)
@@ -623,7 +623,7 @@ public class IDServiceJdbcImpl implements IDService {
     @Override
     public List readIDGeneratorsList() throws IllegalStateException {
 
-               logger.debug("> in readIDGeneratorList");
+               logger.debug("> in readIDGeneratorsList");
 
                List<String> generators = new ArrayList<String>();
 
@@ -669,6 +669,65 @@ public class IDServiceJdbcImpl implements IDService {
                return generators;
     }
 
+        //////////////////////////////////////////////////////////////////////
+   /**
+    * Returns a list of ID generator instances from persistent storage.
+       *
+       * @return  A list of ID generator instances, with each list item
+    *          constituting a serialized representation of an
+    *          ID generator instance.
+       *
+       * @throws  IllegalStateException if a storage-related error occurred.
+       */
+    @Override
+    public List readIDGeneratorsSummaryList() throws IllegalStateException {
+
+               logger.debug("> in readIDGeneratorsSummaryList");
+
+               List<String> generators = new ArrayList<String>();
+
+               Connection conn = null;
+               try {
+
+                       conn = getJdbcConnection();
+                       Statement stmt = conn.createStatement();
+
+                       ResultSet rs = stmt.executeQuery(
+                         "SELECT id_generator_csid FROM id_generators");
+
+                       boolean moreRows = rs.next();
+                       if (! moreRows) {
+                               return generators;
+                       }
+
+            while (moreRows = rs.next()) {
+                generators.add(rs.getString(1));
+            }
+
+                       rs.close();
+
+               } catch (SQLException e) {
+                       throw new IllegalStateException(
+                               "Error retrieving ID generators " +
+                               " from database: " + e.getMessage());
+               } finally {
+                       try {
+                               if (conn != null) {
+                                       conn.close();
+                               }
+                       } catch(SQLException e) {
+                               // Do nothing here
+                       }
+               }
+
+               logger.debug("> retrieved list: ");
+        for (String generator : generators) {
+            logger.debug("generator=\n" + generator);
+        }
+
+               return generators;
+    }
+
 
        //////////////////////////////////////////////////////////////////////
        /**
index 82d3d9cab4062509ec300dab09af0830cf2e133b..ccf7f200c08acd53f811a983026f7e550fed3640 100644 (file)
@@ -1,4 +1,4 @@
-/**        
+/**
  * This document is a part of the source code and related artifacts
  * for CollectionSpace, an open source collections management system
  * for museums and related institutions:
@@ -89,7 +89,19 @@ public class IDServiceJdbcImplTest {
 
     @Test(dependsOnMethods =
         {"hasRequiredDatabaseTable", "createIDGenerator", "readIDGenerator"})
-    public void readIDGeneratorList() throws IllegalStateException {
+    public void readIDGeneratorsList() throws IllegalStateException {
+
+        List generators = jdbc.readIDGeneratorsList();
+
+        // @TODO Replace this placeholder test, which just
+        // verifies that no error occurred while retrieving the list,
+        // with a more meaningful test.
+        Assert.assertTrue(generators.size() > 0);
+    }
+    @Test(dependsOnMethods =
+        {"hasRequiredDatabaseTable", "createIDGenerator", "readIDGenerator",
+          "readIDGeneratorsList"})
+    public void readIDGeneratorsSummaryList() throws IllegalStateException {
 
         List generators = jdbc.readIDGeneratorsList();
 
@@ -123,7 +135,8 @@ public class IDServiceJdbcImplTest {
     }
 
     @Test(dependsOnMethods = {"hasRequiredDatabaseTable", "createIDGenerator",
-       "readIDGenerator", "updateIDGenerator"})
+       "readIDGenerator", "readIDGeneratorsList",
+        "readIDGeneratorsSummaryList", "updateIDGenerator"})
     public void deleteIDGenerator() throws DocumentNotFoundException {
         jdbc.deleteIDGenerator(DEFAULT_CSID);
     }