public Map<String,StoredValuesUriTemplate> getUriTemplateMap() {
// Get resource URI template from superclass
Map<String,StoredValuesUriTemplate> uriTemplateMap = super.getUriTemplateMap();
- // Add item URI template
+ // Add item URI template, and return both templates in the map
String itemDocType = getItemDocType();
- StoredValuesUriTemplate itemUriTemplate = getItemUriTemplate();
+ StoredValuesUriTemplate itemUriTemplate = getUriTemplate(UriTemplateFactory.ITEM);
if (itemDocType == null) {
return uriTemplateMap; // return map as obtained from superclass
}
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;
- }
+
}
return getDocModelForAuthorityItem(repoSession, RefName.AuthorityItem.parse(refName));\r
}\r
\r
- // FIXME: For authority items, we will need to return an array / collection of uriTemplate objects,\r
- // since there are two different doctypes, with associated uriTemplates, to insert into the registry.\r
- // (One of those uriTemplates will also need to be of type ITEM, while in AuthorityResourceWithContacts,\r
- // a third uriTemplate will need to be of type CONCEPT.)\r
- \r
- // The following is a placeholder to test proof of concept, adding a single item from each resource\r
- // to the registry.\r
- \r
public String getDocType() {\r
// FIXME: Proof of concept placeholder\r
return getServiceName();\r
}\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
- 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
+ // Construct and return a resource URI template as the sole item in the map\r
+ String docType = getDocType();\r
+ StoredValuesUriTemplate resourceUriTemplate = getUriTemplate(UriTemplateFactory.RESOURCE);\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
+ return uriTemplateMap;\r
}\r
\r
- private StoredValuesUriTemplate getResourceUriTemplate() {\r
+ protected StoredValuesUriTemplate getUriTemplate(UriTemplateFactory.UriTemplateType type) {\r
Map<String,String> storedValuesMap = new HashMap<String,String>();\r
storedValuesMap.put(UriTemplateFactory.SERVICENAME_VAR, getServiceName());\r
StoredValuesUriTemplate template =\r
- UriTemplateFactory.getURITemplate(UriTemplateFactory.RESOURCE,\r
- storedValuesMap);\r
+ UriTemplateFactory.getURITemplate(type, storedValuesMap);\r
return template;\r
}\r
\r
- public void cacheUriTemplateMap(Map<String, StoredValuesUriTemplate> uriTemplateMap) {\r
- this.cachedUriTemplateMap = uriTemplateMap;\r
- }\r
\r
}\r
public StoredValuesUriTemplate(UriTemplateType type, String path, Map<String, String> storedValuesMap) {
super(type, path);
- setStoredValuesMap(storedValuesMap);
+ setStoredValues(storedValuesMap);
}
- // Private access ensures that stored values can only be set via a constructor
- private void setStoredValuesMap(Map<String, String> storedValuesMap) {
+ public void setStoredValuesMap(Map<String, String> storedValuesMap) {
+ setStoredValues(storedValuesMap);
+ }
+
+ // Called by both constructor and public setter
+ // Avoids having a subclass-overridable call in the constructor
+ // See http://stackoverflow.com/questions/6104262/java-overridable-call-in-constructor#comment7087131_6104273
+ private void setStoredValues(Map<String, String> storedValuesMap) {
if (storedValuesMap != null && !storedValuesMap.isEmpty()) {
this.storedValuesMap = storedValuesMap;
}
package org.collectionspace.services.common;\r
\r
import java.util.Map;\r
+import org.collectionspace.services.client.AuthorityClient;\r
\r
/**\r
* UriTemplateFactory.java\r
public final static String IDENTIFIER_VAR = "identifier";\r
public final static String ITEM_IDENTIFIER_VAR = "itemIdentifier";\r
public final static String CONTACT_IDENTIFIER_VAR = "contactIdentifier";\r
+ \r
+ public final static String AUTHORITY_ITEM_PATH_COMPONENT = AuthorityClient.ITEMS;\r
+ // FIXME: Get this currently hard-coded value from an external authoritative source.\r
+ // The only candidate so far identified is ContactClient.SERVICE_PATH_COMPONENT;\r
+ // is this appropriate?\r
+ public final static String CONTACT_PATH_COMPONENT = "contacts";\r
\r
public final static String RESOURCE_PATH_PATTERN =\r
"/"\r
+ "{" + SERVICENAME_VAR + "}"\r
+ "/"\r
+ "{" + IDENTIFIER_VAR + "}";\r
- // FIXME: Get static strings below (e.g. "items", "contacts") from\r
- // already-declared constants elsewhere\r
public final static String ITEM_PATH_PATTERN =\r
RESOURCE_PATH_PATTERN\r
- + "/items/"\r
+ + "/"\r
+ + AUTHORITY_ITEM_PATH_COMPONENT\r
+ + "/"\r
+ "{" + ITEM_IDENTIFIER_VAR + "}";\r
public final static String CONTACT_PATH_PATTERN =\r
ITEM_PATH_PATTERN\r
- + "/contacts/"\r
+ + "/"\r
+ + CONTACT_PATH_COMPONENT\r
+ + "/"\r
+ "{" + CONTACT_IDENTIFIER_VAR + "}";\r
\r
public static UriTemplate getURITemplate(UriTemplateType type) {\r
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
-
-import org.collectionspace.services.client.IQueryManager;
-import org.collectionspace.services.client.PoxPayloadIn;
-import org.collectionspace.services.client.PoxPayloadOut;
+import org.collectionspace.services.client.*;
import org.collectionspace.services.common.StoredValuesUriTemplate;
import org.collectionspace.services.common.UriTemplateFactory;
import org.collectionspace.services.common.vocabulary.AuthorityResource;
public Map<String,StoredValuesUriTemplate> getUriTemplateMap() {
// Get resource and item URI templates from superclass
Map<String,StoredValuesUriTemplate> uriTemplateMap = super.getUriTemplateMap();
- // Add item URI template
+ // Add contact URI template, and return all three templates in the map
String contactDocType = getContactDocType();
- StoredValuesUriTemplate itemUriTemplate = getItemUriTemplate();
+ StoredValuesUriTemplate contactUriTemplate = getUriTemplate(UriTemplateFactory.CONTACT);
if (contactDocType == null) {
return uriTemplateMap; // return map as obtained from superclass
}
- if (itemUriTemplate == null) {
+ if (contactUriTemplate == null) {
return uriTemplateMap; // return map as obtained from superclass
}
- uriTemplateMap.put(contactDocType, itemUriTemplate);
- cacheUriTemplateMap(uriTemplateMap);
+ uriTemplateMap.put(contactDocType, contactUriTemplate);
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;
- }
+
}