From: Aron Roberts Date: Thu, 7 Jun 2012 21:00:48 +0000 (-0700) Subject: CSPACE-5271: Renamed UriTemplateBuilder to UriTemplateFactory; added initial unit... X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=a5ad09a517b23f103f99bf0dafc08f75d0b46f69;p=tmp%2Fjakarta-migration.git CSPACE-5271: Renamed UriTemplateBuilder to UriTemplateFactory; added initial unit test for UriTemplate. --- 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 a47f38db2..261489d40 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 @@ -25,50 +25,70 @@ package org.collectionspace.services.common; import java.net.URI; import java.util.Map; import javax.ws.rs.core.UriBuilder; +import javax.ws.rs.core.UriBuilderException; import org.collectionspace.services.common.api.Tools; public class UriTemplate { UriBuilder builder; - String path; + String uriPath; public UriTemplate(String path) { setUriPath(path); setBuilder(); } + private void setUriPath(String path) { + if (Tools.notBlank(path)) { + this.uriPath = path; + } + } + + private String getUriPath() { + return uriPath; + } + private void setBuilder() { if (builder == null) { try { - builder = UriBuilder.fromPath(path); + builder = UriBuilder.fromPath(getUriPath()); } catch (IllegalArgumentException iae) { // FIXME: Need to add logger and log error - // Will silently fail to initialize builder if relative URI is null - // No other checking of path format is apparently done + // URIBuilder can't be created if path is null + // No other checking of path format is performed } } } - private void setUriPath(String path) { - if (Tools.notBlank(this.path)) { - this.path = this.path; - } - } - private UriBuilder getBuilder() { if (builder == null) { setBuilder(); } return builder; } + + @Override + public String toString() { + return getUriPath(); + } public String buildUri(Map varsMap) { - URI uri = getBuilder().buildFromMap(varsMap); - if (uri != null) { - return uri.toString(); - } else { - return ""; + URI uri = null; + try { + uri = getBuilder().buildFromMap(varsMap); + } catch (IllegalArgumentException iae) { + // FIXME: Need to add logger and log error + // One or more parameters are missing or null. + } catch (UriBuilderException ube) { + // FIXME: Need to add logger and log error + // URI can't be constructed based on current state of the builder + } finally { + if (uri != null) { + return uri.toString(); + } else { + return ""; + } } } - + } \ No newline at end of file diff --git a/services/common/src/main/java/org/collectionspace/services/common/UriTemplateBuilder.java b/services/common/src/main/java/org/collectionspace/services/common/UriTemplateFactory.java similarity index 68% rename from services/common/src/main/java/org/collectionspace/services/common/UriTemplateBuilder.java rename to services/common/src/main/java/org/collectionspace/services/common/UriTemplateFactory.java index c91f93d4d..2764206cf 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/UriTemplateBuilder.java +++ b/services/common/src/main/java/org/collectionspace/services/common/UriTemplateFactory.java @@ -22,39 +22,25 @@ */ package org.collectionspace.services.common; -public class UriTemplateBuilder { +public class UriTemplateFactory { - UriTemplateType uriTemplateType = null; - final static String RESOURCE_TEMPLATE_PATTERN = + public final static String RESOURCE_TEMPLATE_PATTERN = "/{servicename}/{identifier}"; // FIXME: Get static strings below (e.g. "items") from already-declared // constants elsewhere - final static String ITEM_TEMPLATE_PATTERN = + public final static String ITEM_TEMPLATE_PATTERN = "/{servicename}/{identifier}/items/{itemIdentifier}"; - final static String CONTACT_TEMPLATE_PATTERN = + public final static String CONTACT_TEMPLATE_PATTERN = "/{servicename}/{identifier}/items/{itemIdentifier}/contacts/{contactIdentifier}"; - final static UriTemplate RESOURCE_URI_TEMPLATE = + private final static UriTemplate RESOURCE_URI_TEMPLATE = new UriTemplate(RESOURCE_TEMPLATE_PATTERN); - final static UriTemplate ITEM_URI_TEMPLATE = + private final static UriTemplate ITEM_URI_TEMPLATE = new UriTemplate(ITEM_TEMPLATE_PATTERN); - final static UriTemplate CONTACT_URI_TEMPLATE = + private final static UriTemplate CONTACT_URI_TEMPLATE = new UriTemplate(CONTACT_TEMPLATE_PATTERN); - public UriTemplateBuilder(UriTemplateType type) { - this.uriTemplateType = type; - } - - public UriTemplateType getType() { - return this.uriTemplateType; - } - - @Override - public String toString() { - return "URI Builder of type " + getType().toString(); - } - - public UriTemplate getURITemplate() { - switch (uriTemplateType) { + public static UriTemplate getURITemplate(UriTemplateType type) { + switch (type) { case RESOURCE: return RESOURCE_URI_TEMPLATE; 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 new file mode 100644 index 000000000..6fae70659 --- /dev/null +++ b/services/common/src/test/java/org/collectionspace/services/common/test/UriTemplateTest.java @@ -0,0 +1,50 @@ +/** + * This document is a part of the source code and related artifacts for + * CollectionSpace, an open source collections management system for museums and + * related institutions: + * + * http://www.collectionspace.org http://wiki.collectionspace.org + * + * Copyright (c) 2012 Regents of the University of California + * + * Licensed under the Educational Community License (ECL), Version 2.0. You may + * not use this file except in compliance with this License. + * + * You may obtain a copy of the ECL 2.0 License at + * https://source.collectionspace.org/collection-space/LICENSE.txt + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package org.collectionspace.services.common.test; + +import org.collectionspace.services.common.UriTemplate; +import org.collectionspace.services.common.UriTemplateFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.Assert; +import org.testng.annotations.Test; + +public class UriTemplateTest { + + 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); + } + + @Test + public void testResourceUriTemplate() { + testBanner("testBuildResourceUri"); + UriTemplate resourceTemplate = UriTemplateFactory.getURITemplate(UriTemplateFactory.UriTemplateType.RESOURCE); + Assert.assertNotNull(resourceTemplate, "Resource template is null."); + logger.debug("Resource template URI path = " + resourceTemplate.toString()); + Assert.assertNotNull(resourceTemplate.toString(), "Resource template URI path is null."); + Assert.assertEquals(resourceTemplate.toString(), UriTemplateFactory.RESOURCE_TEMPLATE_PATTERN, + "Resource template URI path doesn't match expected path."); + } +} diff --git a/services/common/src/test/resources/log4j.properties b/services/common/src/test/resources/log4j.properties new file mode 100644 index 000000000..e2db432ca --- /dev/null +++ b/services/common/src/test/resources/log4j.properties @@ -0,0 +1,27 @@ +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