private void addResourceToMapAndSingletons(ResourceBase resource) {
singletons.add(resource);
resourceMap.put(resource.getServiceName(), resource);
- // FIXME: Accept multiple entries from each resource into the registry.
- // See also similar comments in ResourceBase.
- uriTemplateRegistry.put(resource.getDocType(), resource.getUriTemplate());
+ uriTemplateRegistry.putAll(resource.getUriTemplateMap());
}
@Override
import javax.ws.rs.core.UriInfo;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.collectionspace.services.client.*;
+import org.collectionspace.services.common.*;
import org.collectionspace.services.nuxeo.util.NuxeoUtils;
/**
throw bigReThrow(e, "Error showing hierarchy", itemcsid);
}
}
+
+ public String getItemDocType() {
+ // FIXME: Proof of concept placeholder
+ return getServiceName();
+ }
+
+ @Override
+ public Map<String,StoredValuesUriTemplate> getUriTemplateMap() {
+ // Get resource URI template from superclass
+ Map<String,StoredValuesUriTemplate> uriTemplateMap = super.getUriTemplateMap();
+ // Add item URI template
+ String itemDocType = getItemDocType();
+ StoredValuesUriTemplate itemUriTemplate = getItemUriTemplate();
+ if (itemDocType == null) {
+ return uriTemplateMap; // return map as obtained from superclass
+ }
+ if (itemUriTemplate == null) {
+ return uriTemplateMap; // return map as obtained from superclass
+ }
+ uriTemplateMap.put(itemDocType, itemUriTemplate);
+ cacheUriTemplateMap(uriTemplateMap);
+ return uriTemplateMap;
+ }
+
+ private StoredValuesUriTemplate getItemUriTemplate() {
+ Map<String,String> storedValuesMap = new HashMap<String,String>();
+ storedValuesMap.put(UriTemplateFactory.SERVICENAME_VAR, getServiceName());
+ StoredValuesUriTemplate template =
+ UriTemplateFactory.getURITemplate(UriTemplateFactory.ITEM,
+ storedValuesMap);
+ return template;
+ }
}
public static final String LIST = "list";\r
//FIXME retrieve client type from configuration\r
static ClientType CLIENT_TYPE;\r
+ \r
+ Map<String,StoredValuesUriTemplate> cachedUriTemplateMap = new HashMap<String,StoredValuesUriTemplate>();\r
\r
/*\r
* REM - 11/14/2011 - I discovered this static block of code and don't understand why it exists. However, a side-effect of this static block is that ServiceMain is trying\r
return getServiceName();\r
}\r
\r
- // As generally mentioned by Patrick, we will want to cache generated values, and\r
- // only generate one time if the cached value has not yet been populated. \r
-\r
public Map<String,StoredValuesUriTemplate> getUriTemplateMap() {\r
+ // Return cached copy of URI template map, if available\r
Map<String,StoredValuesUriTemplate> uriTemplateMap = new HashMap<String,StoredValuesUriTemplate>();\r
- String docType = getDocType();\r
- StoredValuesUriTemplate resourceUriTemplate = getResourceUriTemplate();\r
- if (docType == null) {\r
- return uriTemplateMap; // return an empty map\r
- }\r
- if (resourceUriTemplate == null) {\r
- return uriTemplateMap; // return an empty map\r
+ if (this.cachedUriTemplateMap != null && !this.cachedUriTemplateMap.isEmpty()) {\r
+ uriTemplateMap.putAll(cachedUriTemplateMap);\r
+ return uriTemplateMap;\r
+ } else {\r
+ // Construct and return a resource URI template as the sole item in the map\r
+ String docType = getDocType();\r
+ StoredValuesUriTemplate resourceUriTemplate = getResourceUriTemplate();\r
+ if (docType == null) {\r
+ return uriTemplateMap; // return an empty map\r
+ }\r
+ if (resourceUriTemplate == null) {\r
+ return uriTemplateMap; // return an empty map\r
+ }\r
+ uriTemplateMap.put(docType, resourceUriTemplate);\r
+ cacheUriTemplateMap(uriTemplateMap);\r
+ return uriTemplateMap;\r
}\r
- uriTemplateMap.put(docType, resourceUriTemplate);\r
- return uriTemplateMap;\r
}\r
\r
private StoredValuesUriTemplate getResourceUriTemplate() {\r
return template;\r
}\r
\r
+ public void cacheUriTemplateMap(Map<String, StoredValuesUriTemplate> uriTemplateMap) {\r
+ this.cachedUriTemplateMap = uriTemplateMap;\r
+ }\r
+\r
}\r
* replace variables within the template.
*
* In this subclass of UriTemplate, some of the values which will replace
- * variables in a URI template are static, and can be stored alongside the
- * template for reuse. Additional values that will replace variables within the
- * template are also dynamically accepted, and are merged with stored values
- * when building URIs.
+ * variables in an internal URI template are static, and can be stored alongside
+ * the URI template for reuse. Additional values that will replace variables
+ * within the template are also dynamically accepted, and will be merged with
+ * stored values when building URIs.
*/
public class StoredValuesUriTemplate extends UriTemplate {
setStoredValuesMap(storedValuesMap);
}
- final public void setStoredValuesMap(Map<String, String> storedValuesMap) {
+ // Private access ensures that stored values can only be set via a constructor
+ private void setStoredValuesMap(Map<String, String> storedValuesMap) {
if (storedValuesMap != null && !storedValuesMap.isEmpty()) {
this.storedValuesMap = storedValuesMap;
}
}
- private Map<String, String> getStoredValuesMap() {
+ public Map<String, String> getStoredValuesMap() {
return this.storedValuesMap;
}
+ "/contacts/"\r
+ "{" + CONTACT_IDENTIFIER_VAR + "}";\r
\r
- public static StoredValuesUriTemplate getURITemplate(UriTemplateType type) {\r
+ public static UriTemplate getURITemplate(UriTemplateType type) {\r
return new StoredValuesUriTemplate(type, getUriPathPattern(type));\r
}\r
\r
*/
package org.collectionspace.services.contact;
+import java.util.HashMap;
+import java.util.Map;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import org.collectionspace.services.client.IQueryManager;
import org.collectionspace.services.client.PoxPayloadIn;
import org.collectionspace.services.client.PoxPayloadOut;
+import org.collectionspace.services.common.StoredValuesUriTemplate;
+import org.collectionspace.services.common.UriTemplateFactory;
import org.collectionspace.services.common.vocabulary.AuthorityResource;
import org.collectionspace.services.common.context.ServiceContext;
import org.collectionspace.services.common.document.DocumentFilter;
+ ": and item:" + itemspecifier + ": was not found.", csid);
}
}
+
+ public String getContactDocType() {
+ // FIXME: Proof of concept placeholder
+ return getServiceName();
+ }
+
+ @Override
+ public Map<String,StoredValuesUriTemplate> getUriTemplateMap() {
+ // Get resource and item URI templates from superclass
+ Map<String,StoredValuesUriTemplate> uriTemplateMap = super.getUriTemplateMap();
+ // Add item URI template
+ String contactDocType = getContactDocType();
+ StoredValuesUriTemplate itemUriTemplate = getItemUriTemplate();
+ if (contactDocType == null) {
+ return uriTemplateMap; // return map as obtained from superclass
+ }
+ if (itemUriTemplate == null) {
+ return uriTemplateMap; // return map as obtained from superclass
+ }
+ uriTemplateMap.put(contactDocType, itemUriTemplate);
+ cacheUriTemplateMap(uriTemplateMap);
+ return uriTemplateMap;
+ }
+
+ private StoredValuesUriTemplate getItemUriTemplate() {
+ Map<String,String> storedValuesMap = new HashMap<String,String>();
+ storedValuesMap.put(UriTemplateFactory.SERVICENAME_VAR, getServiceName());
+ StoredValuesUriTemplate template =
+ UriTemplateFactory.getURITemplate(UriTemplateFactory.ITEM,
+ storedValuesMap);
+ return template;
+ }
}