From: Aron Roberts Date: Thu, 8 Oct 2009 03:13:09 +0000 (+0000) Subject: CSPACE-497: Added query parameters to REST call to return lists of ID generator insta... X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=93d0f52be4737314ff7fc0bcc93977d1663a1acd;p=tmp%2Fjakarta-migration.git CSPACE-497: Added query parameters to REST call to return lists of ID generator instances, to specify whether a summary list or a full list is to be returned. This work is preparatory to filtering the list by ID role (aka type or contex). --- diff --git a/services/id/service/src/main/java/org/collectionspace/services/id/IDResource.java b/services/id/service/src/main/java/org/collectionspace/services/id/IDResource.java index 254dcbc3f..fd6ee9109 100644 --- a/services/id/service/src/main/java/org/collectionspace/services/id/IDResource.java +++ b/services/id/service/src/main/java/org/collectionspace/services/id/IDResource.java @@ -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 = ""; final String LIST_ITEM_END = ""; + final String LIST_FORMAT_FULL = "full"; + final String LIST_FORMAT_SUMMARY = "summary"; + try { - List generators = service.readIDGeneratorsList(); + List 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); diff --git a/services/id/service/src/main/java/org/collectionspace/services/id/IDService.java b/services/id/service/src/main/java/org/collectionspace/services/id/IDService.java index 95223fbec..69f8462a1 100644 --- a/services/id/service/src/main/java/org/collectionspace/services/id/IDService.java +++ b/services/id/service/src/main/java/org/collectionspace/services/id/IDService.java @@ -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 readIDGeneratorsList() throws IllegalStateException; - + + // Read a list of objects (aka read multiple) + // and return in a summary list format. + public List 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, diff --git a/services/id/service/src/main/java/org/collectionspace/services/id/IDServiceJdbcImpl.java b/services/id/service/src/main/java/org/collectionspace/services/id/IDServiceJdbcImpl.java index ea27a17aa..0ba4cfaef 100644 --- a/services/id/service/src/main/java/org/collectionspace/services/id/IDServiceJdbcImpl.java +++ b/services/id/service/src/main/java/org/collectionspace/services/id/IDServiceJdbcImpl.java @@ -623,7 +623,7 @@ public class IDServiceJdbcImpl implements IDService { @Override public List readIDGeneratorsList() throws IllegalStateException { - logger.debug("> in readIDGeneratorList"); + logger.debug("> in readIDGeneratorsList"); List generators = new ArrayList(); @@ -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 generators = new ArrayList(); + + 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; + } + ////////////////////////////////////////////////////////////////////// /** diff --git a/services/id/service/src/test/java/org/collectionspace/services/id/test/IDServiceJdbcImplTest.java b/services/id/service/src/test/java/org/collectionspace/services/id/test/IDServiceJdbcImplTest.java index 82d3d9cab..ccf7f200c 100644 --- a/services/id/service/src/test/java/org/collectionspace/services/id/test/IDServiceJdbcImplTest.java +++ b/services/id/service/src/test/java/org/collectionspace/services/id/test/IDServiceJdbcImplTest.java @@ -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); }