package org.collectionspace.services.id;
+import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
//////////////////////////////////////////////////////////////////////
/**
- * Creates a new ID generator.
+ * Creates a new ID generator instance.
*
- * @param generatorRepresentation A representation of an ID generator.
+ * @param generatorRepresentation
+ * A representation of an ID generator instance.
*/
@POST
@Path("")
//////////////////////////////////////////////////////////////////////
/**
- * Returns a representation of a single ID Generator resource.
+ * Returns a representation of a single ID generator instance resource.
*
- * @param csid An identifier for an ID generator.
+ * @param csid An identifier for an ID generator instance.
*
- * @return A representation of an ID generator resource.
+ * @return A representation of an ID generator instance resource.
*/
@GET
@Path("/{csid}")
//////////////////////////////////////////////////////////////////////
/**
- * Placeholder for retrieving a list of available ID Generator resources.
- * Currently returns an empty entity body.
+ * Placeholder for retrieving a list of available ID Generator
+ * instance resources.
*
- * Implemented to facilitate a HEAD method test in ServiceLayerTest.
+ * Required to facilitate a HEAD method test in ServiceLayerTest.
*
- * @return An empty entity body (for now).
+ * @return A list of representations of ID generator instance resources.
*/
@GET
@Path("")
@Produces(MediaType.APPLICATION_XML)
public Response readIDGeneratorsList() {
-
- logger.debug("> in readIDGeneratorsList()");
-
- // @TODO Replace this placeholder code.
- Response response = Response.status(Response.Status.NO_CONTENT)
- .entity("").type(MediaType.TEXT_PLAIN).build();
-
+
+ logger.debug("> in readIDGeneratorsList()");
+
+ Response response = null;
+ response = response.ok().build();
+ String resourceRepresentation = "";
+
+ // @TODO Replace these placeholders/expedients
+ // with a schema-defined list format.
+ final String LIST_ROOT_START = "<list>";
+ final String LIST_ROOT_END = "</list>";
+ final String LIST_ITEM_START = "<item>";
+ final String LIST_ITEM_END = "</item>";
+
+ try {
+
+ List<String> generators = service.readIDGeneratorsList();
+
+ // @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);
+ }
+ sb.append(LIST_ROOT_END);
+
+ resourceRepresentation = sb.toString();
+
+ response = Response.status(Response.Status.OK)
+ .entity(resourceRepresentation)
+ .type(MediaType.APPLICATION_XML)
+ .build();
+
+ // @TODO Return an XML-based error results format with the
+ // responses below.
+
+ } catch (IllegalStateException ise) {
+ response = Response.status(Response.Status.BAD_REQUEST)
+ .entity(ise.getMessage()).type(MediaType.TEXT_PLAIN).build();
+
+ // This is guard code that should never be reached.
+ } catch (Exception e) {
+ response = Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity(e.getMessage()).type(MediaType.TEXT_PLAIN).build();
+ }
+
return response;
- }
+ }
}
// May at some point instead use
// org.jboss.resteasy.spi.NotFoundException
+import java.util.List;
import org.collectionspace.services.common.repository.DocumentNotFoundException;
import org.collectionspace.services.common.repository.BadRequestException;
IllegalArgumentException, IllegalStateException;
// Read a list of objects (aka read multiple)
+ // Read single object
+ public List<String> readIDGeneratorsList() throws IllegalStateException;
// Update (may need to check for changes in the ID generator structure)
public void updateIDGenerator(String csid, String serializedIDGenerator)
// May at some point instead use
// org.jboss.resteasy.spi.NotFoundException
+import java.util.ArrayList;
+import java.util.List;
import org.collectionspace.services.common.repository.BadRequestException;
import org.collectionspace.services.common.repository.DocumentNotFoundException;
return serializedGenerator;
}
-
+
+ //////////////////////////////////////////////////////////////////////
+ /**
+ * 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 readIDGeneratorsList() throws IllegalStateException {
+
+ logger.debug("> in readIDGeneratorList");
+
+ List<String> generators = new ArrayList<String>();
+
+ Connection conn = null;
+ try {
+
+ conn = getJdbcConnection();
+ Statement stmt = conn.createStatement();
+
+ ResultSet rs = stmt.executeQuery(
+ "SELECT id_generator_state 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;
+ }
+
+
//////////////////////////////////////////////////////////////////////
/**
* Updates an existing ID generator in persistent storage.
}
}
+
}
\ No newline at end of file
package org.collectionspace.services.id.test;
+import java.util.List;
import org.collectionspace.services.common.repository.BadRequestException;
import org.collectionspace.services.common.repository.DocumentNotFoundException;
jdbc.createIDGenerator(DEFAULT_CSID, getSpectrumEntryNumberGenerator());
}
+
@Test(dependsOnMethods = {"hasRequiredDatabaseTable", "createIDGenerator"})
public void readIDGenerator() throws DocumentNotFoundException,
IllegalArgumentException, IllegalStateException {
serializedGenerator = jdbc.readIDGenerator(DEFAULT_CSID);
generator = IDGeneratorSerializer.deserialize(serializedGenerator);
Assert.assertEquals(generator.getCsid(), DEFAULT_CSID);
-
+ }
+
+
+ @Test(dependsOnMethods =
+ {"hasRequiredDatabaseTable", "createIDGenerator", "readIDGenerator"})
+ public void readIDGeneratorList() 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",