Java tutorial
/* * 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.model.util; import edu.mayo.cts2.framework.model.codesystemversion.CodeSystemVersionCatalogEntry; import edu.mayo.cts2.framework.model.core.*; import edu.mayo.cts2.framework.model.entity.Designation; import edu.mayo.cts2.framework.model.entity.EntityDescription; import edu.mayo.cts2.framework.model.entity.EntityDescriptionBase; import edu.mayo.cts2.framework.model.entity.types.DesignationRole; import edu.mayo.cts2.framework.model.service.core.EntityNameOrURI; import edu.mayo.cts2.framework.model.service.core.NameOrURI; import edu.mayo.cts2.framework.model.updates.ChangeableResource; import org.apache.commons.lang.StringUtils; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.regex.Pattern; /** * The Class RestModelUtils. * * @author <a href="mailto:kevin.peterson@mayo.edu">Kevin Peterson</a> */ public class ModelUtils { //TODO: This is probably an overly simplistic check private static Pattern URI_PATTERN = Pattern.compile("(urn:[a-zA-Z]+:.*)|([a-zA-Z]+://.*)"); /** * Instantiates a new rest model utils. */ private ModelUtils() { super(); } /** * To ts any type. * * @param string the string * @return the ts any type */ public static TsAnyType toTsAnyType(String string) { TsAnyType ts = new TsAnyType(); ts.setContent(string); return ts; } /** * Gets the resource synopsis value. * * @param entry the entry * @return the resource synopsis value */ public static String getResourceSynopsisValue(AbstractResourceDescription entry) { EntryDescription synopsis = entry.getResourceSynopsis(); if (synopsis != null) { TsAnyType value = synopsis.getValue(); if (value != null) { return value.getContent(); } } return null; } /** * Gets the resource synopsis value. * * @param entry the entry * @return the resource synopsis value */ public static String getResourceSynopsisValue(ResourceDescriptionDirectoryEntry entry) { EntryDescription synopsis = entry.getResourceSynopsis(); if (synopsis != null) { TsAnyType value = synopsis.getValue(); if (value != null) { return value.getContent(); } } return null; } /** * Creates the scoped entity name. * * @param name the name * @param namespace the namespace * @return the scoped entity name */ public static ScopedEntityName createScopedEntityName(String name, String namespace) { ScopedEntityName scopedName = new ScopedEntityName(); scopedName.setName(name); scopedName.setNamespace(namespace); return scopedName; } /** * Creates the opaque data. * * @param text the text * @return the opaque data */ public static OpaqueData createOpaqueData(String text) { OpaqueData data = new OpaqueData(); data.setValue(toTsAnyType(text)); return data; } /** * Gets the entity. * * @param entityDescription the entity description * @return the entity */ public static EntityDescriptionBase getEntity(EntityDescription entityDescription) { return (EntityDescriptionBase) entityDescription.getChoiceValue(); } /** * Sets the entity. * * @param wrapper the wrapper * @param entityDescription the entity description */ public static void setEntity(EntityDescription wrapper, EntityDescriptionBase entityDescription) { try { for (Method method : EntityDescription.class.getDeclaredMethods()) { if (method.getName().startsWith("set") && method.getParameterTypes().length == 1 && method.getParameterTypes()[0].equals(entityDescription.getClass())) { method.invoke(wrapper, entityDescription); } } } catch (Exception e) { throw new IllegalStateException(e); } } /** * To entity description. * * @param entityDescriptionBase the entity description base * @return the entity description */ public static EntityDescription toEntityDescription(EntityDescriptionBase entityDescriptionBase) { EntityDescription wrapper = new EntityDescription(); setEntity(wrapper, entityDescriptionBase); return wrapper; } /** * Gets the preferred designation. * * @param entity the entity * @return the preferred designation */ public static Designation getPreferredDesignation(EntityDescriptionBase entity) { if (entity.getDesignationCount() == 1) { return entity.getDesignation(0); } for (Designation designation : entity.getDesignation()) { DesignationRole role = designation.getDesignationRole(); if (role != null && role.equals(DesignationRole.PREFERRED)) { return designation; } } return null; } /** * Gets the code system name of code system version. * * @param resource the resource * @return the code system name of code system version */ public static String getCodeSystemNameOfCodeSystemVersion(CodeSystemVersionCatalogEntry resource) { return resource.getVersionOf().getContent(); } public static boolean isValidUri(String uriCandidate) { return URI_PATTERN.matcher(uriCandidate).matches(); } public static NameOrURI nameOrUriFromEither(String nameOrUri) { if (StringUtils.isBlank(nameOrUri)) { return null; } NameOrURI n; if (isValidUri(nameOrUri)) { n = nameOrUriFromUri(nameOrUri); } else { n = nameOrUriFromName(nameOrUri); } return n; } public static NameOrURI nameOrUriFromName(String name) { if (StringUtils.isBlank(name)) { return null; } NameOrURI nameOrUri = new NameOrURI(); nameOrUri.setName(name); return nameOrUri; } public static EntityNameOrURI entityNameOrUriFromName(ScopedEntityName name) { if (name == null) { return null; } EntityNameOrURI nameOrUri = new EntityNameOrURI(); nameOrUri.setEntityName(name); return nameOrUri; } public static EntityNameOrURI entityNameOrUriFromUri(String uri) { EntityNameOrURI nameOrUri = new EntityNameOrURI(); nameOrUri.setUri(uri); return nameOrUri; } public static ChangeableResource createChangeableResource(IsChangeable changeable) { ChangeableResource choice = new ChangeableResource(); for (Field field : choice.getClass().getDeclaredFields()) { if (field.getType().equals(changeable.getClass()) || field.getName().equals("_choiceValue")) { field.setAccessible(true); try { field.set(choice, changeable); } catch (IllegalArgumentException e) { throw new IllegalStateException(e); } catch (IllegalAccessException e) { throw new IllegalStateException(e); } } } return choice; } public static NameOrURI nameOrUriFromUri(String uri) { NameOrURI nameOrUri = new NameOrURI(); nameOrUri.setUri(uri); return nameOrUri; } public static boolean matches(ComponentReference componentReference1, ComponentReference componentReference2) { if (componentReference1.getAttributeReference() != null && componentReference2.getAttributeReference() != null) { return StringUtils.equals(componentReference1.getAttributeReference(), componentReference2.getAttributeReference()); } if (componentReference1.getPropertyReference() != null && componentReference2.getPropertyReference() != null) { URIAndEntityName ref1 = componentReference1.getPropertyReference(); URIAndEntityName ref2 = componentReference2.getPropertyReference(); return (StringUtils.equals(ref1.getName(), ref2.getName()) || StringUtils.equals(ref1.getUri(), ref2.getUri())); } if (componentReference1.getSpecialReference() != null && componentReference2.getSpecialReference() != null) { return StringUtils.equals(componentReference1.getSpecialReference(), componentReference2.getSpecialReference()); } return false; } }