Skip to content
This repository has been archived by the owner on Jul 11, 2019. It is now read-only.

Add tests and some cleanup #22

Merged
merged 9 commits into from
Sep 1, 2016
Prev Previous commit
Next Next commit
Add some tests for ArchieRMInfoLookup
  • Loading branch information
steijgeler committed Aug 31, 2016
commit 8214e90dec346127d78389bc166b8026b79acce7
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,20 @@
*/
public class ArchieRMNamingStrategy implements ModelNamingStrategy {

protected PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy lowerCaseWithUnderscoresStrategy = new PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy();
protected PropertyNamingStrategy.SnakeCaseStrategy snakeCaseStrategy = new PropertyNamingStrategy.SnakeCaseStrategy();

@Override
public String getRMTypeName(Class clazz) {
String name = clazz.getSimpleName();
switch(name) {
//some overrides to get every name right. The DV_URI is not really required i think, just to be sure
case "DvURI":
return "DV_URI";
case "DvEHRURI":
return "DV_EHR_URI";
case "UIDBasedId":
return "UID_BASED_ID";
default:

}
String result = lowerCaseWithUnderscoresStrategy.translate(clazz.getSimpleName()).toUpperCase();
String result = snakeCaseStrategy.translate(clazz.getSimpleName()).toUpperCase();
if(name.length() > 1 && name.startsWith("C") && Character.isUpperCase(name.charAt(1))) {
result = result.replaceFirst("C", "C_");
}
Expand All @@ -36,11 +33,11 @@ public String getRMTypeName(Class clazz) {
@Override
public String getRMAttributeName(Class clazz, Method getMethod) {
String methodName = getMethod.getName();
return lowerCaseWithUnderscoresStrategy.translate(methodName).toUpperCase();
return snakeCaseStrategy.translate(methodName).toUpperCase();
}

@Override
public String getRMAttributeName(Field field) {
return lowerCaseWithUnderscoresStrategy.translate(field.getName());
return snakeCaseStrategy.translate(field.getName());
}
}
27 changes: 6 additions & 21 deletions src/main/java/com/nedap/archie/rminfo/ModelInfoLookup.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,7 @@
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;

/**
* Utility that defines the java mapping of type and attribute names of a given reference model.
Expand All @@ -44,18 +38,10 @@ public class ModelInfoLookup {
/**
* All methods that cannot be called by using reflection. For example getClass();
*/
private Set<String> forbiddenMethods = new HashSet();

{
forbiddenMethods.add("getClass");
forbiddenMethods.add("wait");
forbiddenMethods.add("notify");
forbiddenMethods.add("notifyAll");
forbiddenMethods.add("clone");
forbiddenMethods.add("finalize");
}

//constructed as a field to save some object creation
@SuppressWarnings("unchecked")
private Set<String> forbiddenMethods = new HashSet(
Arrays.asList("getClass", "wait", "notify", "notifyAll", "clone", "finalize")
);

public ModelInfoLookup(ModelNamingStrategy namingStrategy, Class baseClass) {
this(namingStrategy, baseClass, ModelInfoLookup.class.getClassLoader());
Expand Down Expand Up @@ -209,15 +195,14 @@ public Class getClassToBeCreated(String rmTypename) {
return getClass(rmTypename);
}

public Map<String, Class> getRmTypeNameToClassMap() {
public Map<String, Class> getRmTypeNameToClassMap() {
HashMap<String, Class> result = new HashMap<>();
for(String rmTypeName: rmTypeNamesToRmTypeInfo.keySet()) {
result.put(rmTypeName, rmTypeNamesToRmTypeInfo.get(rmTypeName).getJavaClass());
}
return result;
}


public RMTypeInfo getTypeInfo(Class clazz) {
return this.classesToRmTypeInfo.get(clazz);
}
Expand Down
87 changes: 87 additions & 0 deletions src/test/java/com/nedap/archie/rminfo/ArchieRMInfoLookupTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.nedap.archie.rminfo;

import com.nedap.archie.rm.archetyped.FeederAudit;
import com.nedap.archie.rm.composition.Composition;
import com.nedap.archie.rm.composition.Observation;
import com.nedap.archie.rm.datastructures.Cluster;
import com.nedap.archie.rm.datastructures.History;
import com.nedap.archie.rm.datavalues.DvEHRURI;
import com.nedap.archie.rm.datavalues.DvIdentifier;
import com.nedap.archie.rm.datavalues.DvURI;
import com.nedap.archie.rm.datavalues.encapsulated.DvParsable;
import com.nedap.archie.rm.support.identification.ArchetypeID;
import com.nedap.archie.rm.support.identification.UID;
import com.nedap.archie.rm.support.identification.UIDBasedId;
import com.nedap.archie.rm.support.identification.UUID;
import org.junit.Test;

import java.util.List;

import static org.junit.Assert.assertEquals;

/**
* Created by stefan.teijgeler on 31/08/16.
*/
public class ArchieRMInfoLookupTest {

ModelInfoLookup modelInfoLookup = new ArchieRMInfoLookup();

@Test
public void classForRMType() {
// Not an exhaustive list, just a few examples and edge cases
assertEquals(Composition.class, modelInfoLookup.getClass("COMPOSITION"));
assertEquals(Observation.class, modelInfoLookup.getClass("OBSERVATION"));
assertEquals(Cluster.class, modelInfoLookup.getClass("CLUSTER"));
assertEquals(DvParsable.class, modelInfoLookup.getClass("DV_PARSABLE"));
assertEquals(DvURI.class, modelInfoLookup.getClass("DV_URI"));
assertEquals(DvEHRURI.class, modelInfoLookup.getClass("DV_EHR_URI"));
assertEquals(UIDBasedId.class, modelInfoLookup.getClass("UID_BASED_ID"));
assertEquals(UID.class, modelInfoLookup.getClass("UID"));
assertEquals(UUID.class, modelInfoLookup.getClass("UUID"));
assertEquals(ArchetypeID.class, modelInfoLookup.getClass("ARCHETYPE_ID"));
}

@Test
public void typeInfoForClass() {
RMTypeInfo typeInfo = modelInfoLookup.getTypeInfo(Observation.class);

assertEquals(Observation.class, typeInfo.getJavaClass());
assertEquals("OBSERVATION", typeInfo.getRmName());
assertEquals("data", typeInfo.getAttribute("data").getRmName());
}

@Test
public void typeInfoForString() {
RMTypeInfo typeInfo = modelInfoLookup.getTypeInfo("OBSERVATION");

assertEquals(Observation.class, typeInfo.getJavaClass());
assertEquals("OBSERVATION", typeInfo.getRmName());
assertEquals("data", typeInfo.getAttribute("data").getRmName());
}

@Test
public void attributeInfo() {
RMAttributeInfo attributeInfo = modelInfoLookup.getAttributeInfo(Observation.class, "data");

assertEquals(attributeInfo.getRmName(), "data");
assertEquals(attributeInfo.getField().getName(), "data");
assertEquals(attributeInfo.getGetMethod().getName(), "getData");
assertEquals(attributeInfo.getSetMethod().getName(), "setData");
assertEquals(attributeInfo.getType(), History.class);
assertEquals(attributeInfo.getTypeInCollection(), History.class);
assertEquals(attributeInfo.isMultipleValued(), false);
}

@Test
public void attributeInfoOfCollection() {
RMAttributeInfo attributeInfo = modelInfoLookup.getAttributeInfo(FeederAudit.class, "originating_system_item_ids");

assertEquals(attributeInfo.getType(), List.class);
assertEquals(attributeInfo.getTypeInCollection(), DvIdentifier.class);
assertEquals(attributeInfo.isMultipleValued(), true);
}




}