From 09a08726fdcaa028142391a9eefcb641e71c93f1 Mon Sep 17 00:00:00 2001 From: Aron Roberts Date: Fri, 8 Jun 2012 11:45:10 -0700 Subject: [PATCH] CSPACE-5271: Store type in UriTemplates. Establish initial pattern for returning multiple registry entries from resource base classes. Lots of miscellaneous cleanup. --- .../services/common/ResourceBase.java | 18 +++++++- .../common/StoredValuesUriTemplate.java | 9 ++-- .../services/common/UriTemplate.java | 22 ++++++++-- .../services/common/UriTemplateFactory.java | 21 ++++++--- .../services/common/test/UriTemplateTest.java | 44 +++++++++++-------- 5 files changed, 78 insertions(+), 36 deletions(-) diff --git a/services/common/src/main/java/org/collectionspace/services/common/ResourceBase.java b/services/common/src/main/java/org/collectionspace/services/common/ResourceBase.java index 882f86ba9..8ba0c0cf6 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/ResourceBase.java +++ b/services/common/src/main/java/org/collectionspace/services/common/ResourceBase.java @@ -396,11 +396,25 @@ public abstract class ResourceBase // As generally mentioned by Patrick, we will want to cache generated values, and // only generate one time if the cached value has not yet been populated. - public StoredValuesUriTemplate getUriTemplate() { + public Map getUriTemplateMap() { + Map uriTemplateMap = new HashMap(); + String docType = getDocType(); + StoredValuesUriTemplate resourceUriTemplate = getResourceUriTemplate(); + if (docType == null) { + return uriTemplateMap; // return an empty map + } + if (resourceUriTemplate == null) { + return uriTemplateMap; // return an empty map + } + uriTemplateMap.put(docType, resourceUriTemplate); + return uriTemplateMap; + } + + private StoredValuesUriTemplate getResourceUriTemplate() { Map storedValuesMap = new HashMap(); storedValuesMap.put(UriTemplateFactory.SERVICENAME_VAR, getServiceName()); StoredValuesUriTemplate template = - UriTemplateFactory.getURITemplate(UriTemplateFactory.UriTemplateType.RESOURCE, + UriTemplateFactory.getURITemplate(UriTemplateFactory.RESOURCE, storedValuesMap); return template; } diff --git a/services/common/src/main/java/org/collectionspace/services/common/StoredValuesUriTemplate.java b/services/common/src/main/java/org/collectionspace/services/common/StoredValuesUriTemplate.java index db15d6a95..47efe1f75 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/StoredValuesUriTemplate.java +++ b/services/common/src/main/java/org/collectionspace/services/common/StoredValuesUriTemplate.java @@ -24,6 +24,7 @@ package org.collectionspace.services.common; import java.util.HashMap; import java.util.Map; +import org.collectionspace.services.common.UriTemplateFactory.UriTemplateType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,12 +45,12 @@ public class StoredValuesUriTemplate extends UriTemplate { private static final Logger logger = LoggerFactory.getLogger(StoredValuesUriTemplate.class); private Map storedValuesMap = new HashMap(); - public StoredValuesUriTemplate(String path) { - super(path); + public StoredValuesUriTemplate(UriTemplateType type, String path) { + super(type, path); } - public StoredValuesUriTemplate(String path, Map storedValuesMap) { - super(path); + public StoredValuesUriTemplate(UriTemplateType type, String path, Map storedValuesMap) { + super(type, path); setStoredValuesMap(storedValuesMap); } diff --git a/services/common/src/main/java/org/collectionspace/services/common/UriTemplate.java b/services/common/src/main/java/org/collectionspace/services/common/UriTemplate.java index 9cde898f2..30e265a97 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/UriTemplate.java +++ b/services/common/src/main/java/org/collectionspace/services/common/UriTemplate.java @@ -27,6 +27,7 @@ import java.util.Map; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriBuilderException; import org.collectionspace.services.common.api.Tools; +import org.collectionspace.services.common.UriTemplateFactory.UriTemplateType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,14 +40,27 @@ import org.slf4j.LoggerFactory; public abstract class UriTemplate { private static final Logger logger = LoggerFactory.getLogger(UriTemplate.class); - private UriBuilder builder; - private String uriPath; + private UriTemplateType uriTemplateType = null; + private String uriPath = ""; + private UriBuilder builder = null; private final static String EMPTY_STRING = ""; - public UriTemplate(String path) { + + public UriTemplate(UriTemplateType type, String path) { + setUriTemplateType(type); setUriPath(path); setBuilder(); } + + private void setUriTemplateType(UriTemplateType type) { + if (type != null) { + this.uriTemplateType = type; + } + } + + public UriTemplateType getUriTemplateType() { + return this.uriTemplateType; + } private void setUriPath(String path) { if (Tools.notBlank(path)) { @@ -55,7 +69,7 @@ public abstract class UriTemplate { } private String getUriPath() { - return uriPath; + return this.uriPath; } private void setBuilder() { diff --git a/services/common/src/main/java/org/collectionspace/services/common/UriTemplateFactory.java b/services/common/src/main/java/org/collectionspace/services/common/UriTemplateFactory.java index d442dbf56..757558161 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/UriTemplateFactory.java +++ b/services/common/src/main/java/org/collectionspace/services/common/UriTemplateFactory.java @@ -32,13 +32,24 @@ import java.util.Map; */ public class UriTemplateFactory { + // For coding convenience, each item in the enum is also available as a field + // in the enclosing class. + public final static UriTemplateType RESOURCE = UriTemplateType.RESOURCE; + public final static UriTemplateType ITEM = UriTemplateType.ITEM; + public final static UriTemplateType CONTACT = UriTemplateType.CONTACT; + + public enum UriTemplateType { + + RESOURCE, ITEM, CONTACT + }; + public final static String SERVICENAME_VAR = "servicename"; public final static String IDENTIFIER_VAR = "identifier"; public final static String ITEM_IDENTIFIER_VAR = "itemIdentifier"; public final static String CONTACT_IDENTIFIER_VAR = "contactIdentifier"; public final static String RESOURCE_PATH_PATTERN = - "/ +" + "/" + "{" + SERVICENAME_VAR + "}" + "/" + "{" + IDENTIFIER_VAR + "}"; @@ -54,11 +65,11 @@ public class UriTemplateFactory { + "{" + CONTACT_IDENTIFIER_VAR + "}"; public static StoredValuesUriTemplate getURITemplate(UriTemplateType type) { - return new StoredValuesUriTemplate(getUriPathPattern(type)); + return new StoredValuesUriTemplate(type, getUriPathPattern(type)); } public static StoredValuesUriTemplate getURITemplate(UriTemplateType type, Map storedValuesMap) { - return new StoredValuesUriTemplate(getUriPathPattern(type), storedValuesMap); + return new StoredValuesUriTemplate(type, getUriPathPattern(type), storedValuesMap); } private static String getUriPathPattern(UriTemplateType type) { @@ -77,8 +88,4 @@ public class UriTemplateFactory { } } - public enum UriTemplateType { - - RESOURCE, ITEM, CONTACT - }; } \ No newline at end of file diff --git a/services/common/src/test/java/org/collectionspace/services/common/test/UriTemplateTest.java b/services/common/src/test/java/org/collectionspace/services/common/test/UriTemplateTest.java index 11ec7ce96..be6796c68 100644 --- a/services/common/src/test/java/org/collectionspace/services/common/test/UriTemplateTest.java +++ b/services/common/src/test/java/org/collectionspace/services/common/test/UriTemplateTest.java @@ -40,6 +40,7 @@ public class UriTemplateTest { private final static HashMap EMPTY_VALUES_MAP = new HashMap(); private static final Logger logger = LoggerFactory.getLogger(UriTemplateTest.class); + private void testBanner(String msg) { String BANNER = "-------------------------------------------------------"; logger.debug("\r" + BANNER + "\r\n" + this.getClass().getName() + "\r\n" + msg + "\r\n" + BANNER); @@ -48,21 +49,26 @@ public class UriTemplateTest { @Test public void createResourceUriTemplate() { testBanner("createResourceUriTemplate"); - UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.UriTemplateType.RESOURCE); + UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.RESOURCE); Assert.assertNotNull(resourceTemplate, "Resource template is null; it was not created successfully."); logger.debug("Resource template URI path = " + resourceTemplate.toString()); + Assert.assertNotNull(resourceTemplate.getUriTemplateType(), "Resource template type is null; it was not set successfully."); + Assert.assertEquals(resourceTemplate.getUriTemplateType(), UriTemplateFactory.RESOURCE, + "Resource template type + " + resourceTemplate.getUriTemplateType() + + " doesn't match expected type: " + UriTemplateFactory.RESOURCE); Assert.assertNotNull(resourceTemplate.toString(), "Resource template URI path is null; it was not set successfully."); Assert.assertEquals(resourceTemplate.toString(), UriTemplateFactory.RESOURCE_PATH_PATTERN, - "Resource template URI path doesn't match expected path."); + "Resource template URI path " + resourceTemplate.toString() + + " doesn't match expected path: " + UriTemplateFactory.RESOURCE_PATH_PATTERN); } @Test(dependsOnMethods = {"createResourceUriTemplate"}) public void buildResourceUri() { testBanner("buildResourceUri"); - UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.UriTemplateType.RESOURCE); + UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.RESOURCE); Map resourceUriVars = new HashMap(); - resourceUriVars.put("servicename", EXAMPLE_SERVICE_NAME); - resourceUriVars.put("identifier", EXAMPLE_CSID); + resourceUriVars.put(UriTemplateFactory.SERVICENAME_VAR, EXAMPLE_SERVICE_NAME); + resourceUriVars.put(UriTemplateFactory.IDENTIFIER_VAR, EXAMPLE_CSID); String uriStr = resourceTemplate.buildUri(resourceUriVars); logger.debug("Generated URI string = " + uriStr); Assert.assertFalse(Tools.isBlank(uriStr), "Generated URI string is null or blank."); @@ -74,11 +80,11 @@ public class UriTemplateTest { public void buildResourceUriWithStoredValues() { testBanner("buildResourceUriWithStoredValues"); Map storedValuesMap = new HashMap(); - storedValuesMap.put("servicename", EXAMPLE_SERVICE_NAME); + storedValuesMap.put(UriTemplateFactory.SERVICENAME_VAR, EXAMPLE_SERVICE_NAME); StoredValuesUriTemplate storedValuesResourceTemplate = - UriTemplateFactory.getURITemplate(UriTemplateFactory.UriTemplateType.RESOURCE, storedValuesMap); + UriTemplateFactory.getURITemplate(UriTemplateFactory.RESOURCE, storedValuesMap); Map additionalValues = new HashMap(); - additionalValues.put("identifier", EXAMPLE_CSID); + additionalValues.put(UriTemplateFactory.IDENTIFIER_VAR, EXAMPLE_CSID); String uriStr = storedValuesResourceTemplate.buildUri(additionalValues); logger.debug("Generated URI string = " + uriStr); Assert.assertTrue(Tools.notBlank(uriStr), "Generated URI string is null or blank."); @@ -86,16 +92,16 @@ public class UriTemplateTest { Assert.assertTrue(uriStr.contains(EXAMPLE_CSID), "Generated URI string does not contain expected value: " + EXAMPLE_CSID); } - @Test(dependsOnMethods = {"buildResourceUri"}) + @Test(dependsOnMethods = {"buildResourceUriWithStoredValues"}) public void buildItemUri() { testBanner("buildItemUri"); Map storedValuesMap = new HashMap(); - storedValuesMap.put("servicename", EXAMPLE_SERVICE_NAME); + storedValuesMap.put(UriTemplateFactory.SERVICENAME_VAR, EXAMPLE_SERVICE_NAME); StoredValuesUriTemplate itemTemplate = - UriTemplateFactory.getURITemplate(UriTemplateFactory.UriTemplateType.ITEM, storedValuesMap); + UriTemplateFactory.getURITemplate(UriTemplateFactory.ITEM, storedValuesMap); Map additionalValues = new HashMap(); - additionalValues.put("identifier", EXAMPLE_CSID); - additionalValues.put("itemIdentifier", EXAMPLE_ITEM_CSID); + additionalValues.put(UriTemplateFactory.IDENTIFIER_VAR, EXAMPLE_CSID); + additionalValues.put(UriTemplateFactory.ITEM_IDENTIFIER_VAR, EXAMPLE_ITEM_CSID); String uriStr = itemTemplate.buildUri(additionalValues); logger.debug("Generated URI string = " + uriStr); Assert.assertTrue(Tools.notBlank(uriStr), "Generated URI string is null or blank."); @@ -109,9 +115,9 @@ public class UriTemplateTest { @Test(dependsOnMethods = {"buildResourceUri"}) public void buildResourceUriWithMissingValue() { testBanner("buildResourceUriWithMissingValue"); - UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.UriTemplateType.RESOURCE); + UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.RESOURCE); Map resourceUriVars = new HashMap(); - resourceUriVars.put("servicename", EXAMPLE_SERVICE_NAME); + resourceUriVars.put(UriTemplateFactory.SERVICENAME_VAR, EXAMPLE_SERVICE_NAME); // The required 'identifier' value is missing from the Map from which the URI will be built logger.debug("This is a negative test, and an error message is expected here:"); String uriStr = resourceTemplate.buildUri(resourceUriVars); @@ -122,10 +128,10 @@ public class UriTemplateTest { @Test(dependsOnMethods = {"buildResourceUri"}) public void buildResourceUriWithNullValue() { testBanner("buildResourceUriWithNullValue"); - UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.UriTemplateType.RESOURCE); + UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.RESOURCE); Map resourceUriVars = new HashMap(); - resourceUriVars.put("servicename", EXAMPLE_SERVICE_NAME); - resourceUriVars.put("identifier", null); + resourceUriVars.put(UriTemplateFactory.SERVICENAME_VAR, EXAMPLE_SERVICE_NAME); + resourceUriVars.put(UriTemplateFactory.IDENTIFIER_VAR, null); logger.debug("This is a negative test, and an error message is expected here:"); String uriStr = resourceTemplate.buildUri(resourceUriVars); logger.debug("Generated URI string = " + uriStr); @@ -135,7 +141,7 @@ public class UriTemplateTest { @Test(dependsOnMethods = {"buildResourceUri"}) public void buildResourceUriWithEmptyValuesMap() { testBanner("buildResourceUriWithEmptyValuesMap"); - UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.UriTemplateType.RESOURCE); + UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.RESOURCE); logger.debug("This is a negative test, and an error message is expected here:"); String uriStr = resourceTemplate.buildUri(EMPTY_VALUES_MAP); logger.debug("Generated URI string = " + uriStr); -- 2.47.3