/* * Copyright: (c) 2004-2011 Mayo Foundation for Medical Education and * Research (MFMER). All rights reserved. MAYO, MAYO CLINIC, and the * triple-shield Mayo logo are trademarks and service marks of MFMER. * * Except as contained in the copyright notice above, or as used to identify * MFMER as the author of this software, the trade names, trademarks, service * marks, or product names of the copyright holder shall not be used in * advertising, promotion or otherwise in connection with this software without * prior written authorization of the copyright holder. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * 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 edu.mayo.cts2.framework.core.url; import edu.mayo.cts2.framework.core.config.ServerContext; import edu.mayo.cts2.framework.core.constants.URIHelperInterface; import edu.mayo.cts2.framework.core.util.EncodingUtils; import edu.mayo.cts2.framework.model.core.ScopedEntityName; import edu.mayo.cts2.framework.model.service.core.types.FunctionalProfile; import edu.mayo.cts2.framework.model.service.core.types.StructuralProfile; /** * A helper class for producing CTS2 compliant URLs. * * Service plugins should use this class instead of constructing resource * 'hrefs' by hand, if possible. * * @author <a href="mailto:kevin.peterson@mayo.edu">Kevin Peterson</a> */ public class UrlConstructor { private ServerContext serverContext; /** * Instantiates a new url constructor. */ public UrlConstructor(){ super(); } /** * Instantiates a new url constructor. * * @param serverContext the server context */ public UrlConstructor(ServerContext serverContext){ this.serverContext = serverContext; } /** * Creates the code system url. * * @param codeSystemName the code system name * @return the string */ public String createCodeSystemUrl(String codeSystemName) { return addServerContext( URIHelperInterface.CODESYSTEM + "/" + codeSystemName); } /** * Creates the code system version url. * * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @return the string */ public String createCodeSystemVersionUrl(String codeSystemName, String codeSystemVersionName) { return this.createCodeSystemUrl(codeSystemName) + "/" + URIHelperInterface.VERSION + "/" + codeSystemVersionName; } /** * Creates the entity url. * * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param entityName the entity name * @return the string */ public String createEntityUrl(String codeSystemName, String codeSystemVersionName, String entityName){ return this.createCodeSystemVersionUrl(codeSystemName, codeSystemVersionName) + "/" + URIHelperInterface.ENTITY + "/" + entityName; } public String createEntityUrl(String codeSystemName, String codeSystemVersionName, ScopedEntityName entityName){ return this.createCodeSystemVersionUrl(codeSystemName, codeSystemVersionName) + "/" + URIHelperInterface.ENTITY + "/" + EncodingUtils.encodeScopedEntityName(entityName); } public String createEntityUrl(ScopedEntityName entityName){ return this.createEntityUrl(EncodingUtils.encodeScopedEntityName(entityName)); } public String createEntityUrl(String entityName){ return this.addServerContext( URIHelperInterface.ENTITY + "/" + entityName); } /** * Creates the source url. * * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param entityName the entity name * @return the string * * @deprecated use 'createSubjectOfUrl' */ @Deprecated public String createSourceUrl(String codeSystemName, String codeSystemVersionName, String entityName){ return this.createSubjectOfUrl(codeSystemName, codeSystemVersionName, entityName); } /** * Creates the sourceof url. * * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param entityName the entity name * @return the string */ public String createSubjectOfUrl(String codeSystemName, String codeSystemVersionName, String entityName){ return this.createEntityUrl(codeSystemName, codeSystemVersionName, entityName) + "/" + URIHelperInterface.SUBJECTOF; } /** * Creates the targetof url. * * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param entityName the entity name * @return the string */ public String createTargetOfUrl(String codeSystemName, String codeSystemVersionName, String entityName){ return this.createEntityUrl(codeSystemName, codeSystemVersionName, entityName) + "/" + URIHelperInterface.TARGETOF; } /** * Creates the children url. * * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @param entityName the entity name * @return the string */ public String createChildrenUrl(String codeSystemName, String codeSystemVersionName, String entityName){ return this.createEntityUrl(codeSystemName, codeSystemVersionName, entityName) + "/" + URIHelperInterface.CHILDREN; } /** * Creates the entities of code system version url. * * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @return the string */ public String createEntitiesOfCodeSystemVersionUrl(String codeSystemName, String codeSystemVersionName){ return createCodeSystemVersionUrl(codeSystemName, codeSystemVersionName) + "/" + URIHelperInterface.ENTITIES ; } /** * Creates the associations of code system version url. * * @param codeSystemName the code system name * @param codeSystemVersionName the code system version name * @return the string */ public String createAssociationsOfCodeSystemVersionUrl(String codeSystemName, String codeSystemVersionName){ return this.createCodeSystemVersionUrl( codeSystemName, codeSystemVersionName) + "/" + URIHelperInterface.ASSOCIATIONS; } public String createAssociationOfCodeSystemVersionUrl( String codeSystemName, String codeSystemVersionName, String associationLocalName){ return this.createCodeSystemVersionUrl(codeSystemName, codeSystemVersionName) + "/" + URIHelperInterface.ASSOCIATION + "/" + associationLocalName; } /** * Creates the versions of code system url. * * @param codeSystemName the code system name * @return the string */ public String createVersionsOfCodeSystemUrl(String codeSystemName){ return this.createCodeSystemUrl(codeSystemName) + "/" + URIHelperInterface.VERSIONS; } /** * Creates the value set url. * * @param valueSetName the value set name * @return the string */ public String createValueSetUrl(String valueSetName) { return addServerContext( URIHelperInterface.VALUESET + "/" + valueSetName); } /** * Creates the definitions of value set url. * * @param valueSetName the value set name * @return the string */ public String createDefinitionsOfValueSetUrl(String valueSetName) { return this.createValueSetUrl(valueSetName) + "/" + URIHelperInterface.VALUESETDEFINITIONS_SHORT; } public String createResolvedValueSetUrl(String valueSetName, String definitionLocalId, String resolutionLocalId){ return this.createValueSetDefinitionUrl(valueSetName, definitionLocalId) + "/" + URIHelperInterface.VALUE_SET_RESOLUTION_SHORT + "/" + resolutionLocalId; } /** * Creates the value set definition url. * * @param valueSetName the value set name * @param definitionLocalId the value set definition document uri * @return the string */ public String createValueSetDefinitionUrl(String valueSetName, String definitionLocalId) { return this.createValueSetUrl(valueSetName) + "/" + URIHelperInterface.VALUESETDEFINITION_SHORT + "/" + definitionLocalId; } /** * Creates the code systems url. * * @return the string */ public String createCodeSystemsUrl() { return addServerContext( URIHelperInterface.CODESYSTEMS); } public String createServiceUrl(StructuralProfile structural, FunctionalProfile functional) { String serviceName = structural.name().replaceFirst("^SP", "").replaceAll("_", "").toLowerCase(); String serviceType = functional.name().replaceFirst("^FP", "").replaceAll("_", "").toLowerCase(); return addServerContext( URIHelperInterface.SERVICE + "/" + serviceName + serviceType); } /** * Adds the server context. * * @param url the url * @return the string */ private String addServerContext(String url){ return this.serverContext.getServerRootWithAppName() + "/" + url; } /** * Gets the server root with app name. * * @return the server root with app name */ public String getServerRootWithAppName(){ return this.serverContext.getServerRootWithAppName(); } public String getAppName(){ return this.serverContext.getAppName(); } /** * Creates the map url. * * @param mapName the map name * @return the string */ public String createMapUrl(String mapName) { return addServerContext( URIHelperInterface.MAP + "/" + mapName); } /** * Creates the map version url. * * @param mapName the map name * @param mapVersionName the map version name * @return the string */ public String createMapVersionUrl(String mapName, String mapVersionName) { return this.createMapUrl(mapName) + "/" + URIHelperInterface.VERSION + "/" + mapVersionName; } /** * Creates the map entry url. * * @param mapName the map name * @param mapVersionName the map version name * @param mapEntryName the map entry name * @return the string */ public String createMapEntryUrl(String mapName, String mapVersionName, String mapEntryName) { return this.createMapVersionUrl(mapName, mapVersionName) + "/" + URIHelperInterface.ENTRY + "/" + mapEntryName; } }