import java.net.URI;\r
import java.util.Map;\r
import javax.ws.rs.core.UriBuilder;\r
+import javax.ws.rs.core.UriBuilderException;\r
import org.collectionspace.services.common.api.Tools;\r
\r
public class UriTemplate {\r
\r
UriBuilder builder;\r
- String path;\r
+ String uriPath;\r
\r
public UriTemplate(String path) {\r
setUriPath(path);\r
setBuilder();\r
}\r
\r
+ private void setUriPath(String path) {\r
+ if (Tools.notBlank(path)) {\r
+ this.uriPath = path;\r
+ }\r
+ }\r
+ \r
+ private String getUriPath() {\r
+ return uriPath;\r
+ }\r
+\r
private void setBuilder() {\r
if (builder == null) {\r
try {\r
- builder = UriBuilder.fromPath(path);\r
+ builder = UriBuilder.fromPath(getUriPath());\r
} catch (IllegalArgumentException iae) {\r
// FIXME: Need to add logger and log error\r
- // Will silently fail to initialize builder if relative URI is null\r
- // No other checking of path format is apparently done\r
+ // URIBuilder can't be created if path is null\r
+ // No other checking of path format is performed\r
}\r
}\r
}\r
\r
- private void setUriPath(String path) {\r
- if (Tools.notBlank(this.path)) {\r
- this.path = this.path;\r
- }\r
- }\r
-\r
private UriBuilder getBuilder() {\r
if (builder == null) {\r
setBuilder();\r
}\r
return builder;\r
}\r
+ \r
+ @Override\r
+ public String toString() {\r
+ return getUriPath();\r
+ }\r
\r
public String buildUri(Map<String, String> varsMap) {\r
- URI uri = getBuilder().buildFromMap(varsMap);\r
- if (uri != null) {\r
- return uri.toString();\r
- } else {\r
- return "";\r
+ URI uri = null;\r
+ try {\r
+ uri = getBuilder().buildFromMap(varsMap);\r
+ } catch (IllegalArgumentException iae) {\r
+ // FIXME: Need to add logger and log error\r
+ // One or more parameters are missing or null.\r
+ } catch (UriBuilderException ube) {\r
+ // FIXME: Need to add logger and log error\r
+ // URI can't be constructed based on current state of the builder\r
+ } finally {\r
+ if (uri != null) {\r
+ return uri.toString();\r
+ } else {\r
+ return "";\r
+ }\r
}\r
}\r
-\r
+ \r
}
\ No newline at end of file
*/\r
package org.collectionspace.services.common;\r
\r
-public class UriTemplateBuilder {\r
+public class UriTemplateFactory {\r
\r
- UriTemplateType uriTemplateType = null;\r
- final static String RESOURCE_TEMPLATE_PATTERN =\r
+ public final static String RESOURCE_TEMPLATE_PATTERN =\r
"/{servicename}/{identifier}";\r
// FIXME: Get static strings below (e.g. "items") from already-declared\r
// constants elsewhere\r
- final static String ITEM_TEMPLATE_PATTERN =\r
+ public final static String ITEM_TEMPLATE_PATTERN =\r
"/{servicename}/{identifier}/items/{itemIdentifier}";\r
- final static String CONTACT_TEMPLATE_PATTERN =\r
+ public final static String CONTACT_TEMPLATE_PATTERN =\r
"/{servicename}/{identifier}/items/{itemIdentifier}/contacts/{contactIdentifier}";\r
- final static UriTemplate RESOURCE_URI_TEMPLATE =\r
+ private final static UriTemplate RESOURCE_URI_TEMPLATE =\r
new UriTemplate(RESOURCE_TEMPLATE_PATTERN);\r
- final static UriTemplate ITEM_URI_TEMPLATE =\r
+ private final static UriTemplate ITEM_URI_TEMPLATE =\r
new UriTemplate(ITEM_TEMPLATE_PATTERN);\r
- final static UriTemplate CONTACT_URI_TEMPLATE =\r
+ private final static UriTemplate CONTACT_URI_TEMPLATE =\r
new UriTemplate(CONTACT_TEMPLATE_PATTERN);\r
\r
- public UriTemplateBuilder(UriTemplateType type) {\r
- this.uriTemplateType = type;\r
- }\r
-\r
- public UriTemplateType getType() {\r
- return this.uriTemplateType;\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- return "URI Builder of type " + getType().toString();\r
- }\r
-\r
- public UriTemplate getURITemplate() {\r
- switch (uriTemplateType) {\r
+ public static UriTemplate getURITemplate(UriTemplateType type) {\r
+ switch (type) {\r
case RESOURCE:\r
return RESOURCE_URI_TEMPLATE;\r
\r
--- /dev/null
+/**\r
+ * This document is a part of the source code and related artifacts for\r
+ * CollectionSpace, an open source collections management system for museums and\r
+ * related institutions:\r
+ *\r
+ * http://www.collectionspace.org http://wiki.collectionspace.org\r
+ *\r
+ * Copyright (c) 2012 Regents of the University of California\r
+ *\r
+ * Licensed under the Educational Community License (ECL), Version 2.0. You may\r
+ * not use this file except in compliance with this License.\r
+ *\r
+ * You may obtain a copy of the ECL 2.0 License at\r
+ * https://source.collectionspace.org/collection-space/LICENSE.txt\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT\r
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r
+ * License for the specific language governing permissions and limitations under\r
+ * the License.\r
+ */\r
+package org.collectionspace.services.common.test;\r
+\r
+import org.collectionspace.services.common.UriTemplate;\r
+import org.collectionspace.services.common.UriTemplateFactory;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import org.testng.Assert;\r
+import org.testng.annotations.Test;\r
+\r
+public class UriTemplateTest {\r
+\r
+ private static final Logger logger = LoggerFactory.getLogger(UriTemplateTest.class);\r
+\r
+ private void testBanner(String msg) {\r
+ String BANNER = "-------------------------------------------------------";\r
+ logger.debug("\r" + BANNER + "\r\n" + this.getClass().getName() + "\r\n" + msg + "\r\n" + BANNER);\r
+ }\r
+\r
+ @Test\r
+ public void testResourceUriTemplate() {\r
+ testBanner("testBuildResourceUri");\r
+ UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.UriTemplateType.RESOURCE);\r
+ Assert.assertNotNull(resourceTemplate, "Resource template is null.");\r
+ logger.debug("Resource template URI path = " + resourceTemplate.toString());\r
+ Assert.assertNotNull(resourceTemplate.toString(), "Resource template URI path is null.");\r
+ Assert.assertEquals(resourceTemplate.toString(), UriTemplateFactory.RESOURCE_TEMPLATE_PATTERN,\r
+ "Resource template URI path doesn't match expected path.");\r
+ }\r
+}\r
--- /dev/null
+log4j.rootLogger=debug, stdout, R
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+# log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] [%c:%L] %m%n
+log4j.appender.stdout.layout.ConversionPattern=%m%n
+
+log4j.appender.R=org.apache.log4j.RollingFileAppender
+log4j.appender.R.File=target/test-client.log
+
+log4j.appender.R.MaxFileSize=100KB
+# Keep one backup file
+log4j.appender.R.MaxBackupIndex=1
+
+log4j.appender.R.layout=org.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=%d %-5p [%t] [%c:%L] %m%n
+
+#packages
+log4j.logger.org.collectionspace.services.client.PoxPayloadIn=DEBUG
+log4j.logger.org.collectionspace.services.client.PoxPayloadOut=DEBUG
+
+log4j.logger.org.collectionspace=DEBUG
+log4j.logger.org.apache=INFO
+log4j.logger.httpclient=INFO
+log4j.logger.org.jboss.resteasy=INFO