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;
*
* 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 = "";
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);
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,
@Override
public List readIDGeneratorsList() throws IllegalStateException {
- logger.debug("> in readIDGeneratorList");
+ logger.debug("> in readIDGeneratorsList");
List<String> generators = new ArrayList<String>();
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;
+ }
+
//////////////////////////////////////////////////////////////////////
/**
-/**
+/**
* 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:
@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();
}
@Test(dependsOnMethods = {"hasRequiredDatabaseTable", "createIDGenerator",
- "readIDGenerator", "updateIDGenerator"})
+ "readIDGenerator", "readIDGeneratorsList",
+ "readIDGeneratorsSummaryList", "updateIDGenerator"})
public void deleteIDGenerator() throws DocumentNotFoundException {
jdbc.deleteIDGenerator(DEFAULT_CSID);
}