From 7926387786d4c06c87d0cc8ed2318e45519005aa Mon Sep 17 00:00:00 2001 From: jamesagnew Date: Fri, 28 Feb 2014 16:30:34 -0500 Subject: [PATCH] ValueSet building --- .../fhir/model/api/ValueSetEnumeration.java | 42 ++- .../java/ca/uhn/fhir/starter/BaseParser.java | 151 ++++++----- .../ca/uhn/fhir/starter/DatatypeParser.java | 10 - .../ca/uhn/fhir/starter/ResourceParser.java | 242 +++++++----------- .../java/ca/uhn/fhir/starter/TinderMojo.java | 24 ++ .../ca/uhn/fhir/starter/ValueSetParser.java | 30 +-- .../ca/uhn/fhir/starter/model/ValueSetTm.java | 21 +- .../src/main/resources/valueset.vm | 4 +- ...l => valueset-extensions-spreadsheet.xml_} | 0 9 files changed, 260 insertions(+), 264 deletions(-) create mode 100644 hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/TinderMojo.java rename hapi-tinder-plugin/src/test/resources/res/{valueset-extensions-spreadsheet.xml => valueset-extensions-spreadsheet.xml_} (100%) diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/model/api/ValueSetEnumeration.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/model/api/ValueSetEnumeration.java index bcde0951e42..4cc9d94dc89 100644 --- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/model/api/ValueSetEnumeration.java +++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/model/api/ValueSetEnumeration.java @@ -3,54 +3,52 @@ package ca.uhn.fhir.model.api; import java.util.HashMap; import java.util.Map; - public abstract class ValueSetEnumeration { - private static final Map, CodeMap> myClassToCodeMap = new HashMap<>(); - + private static final Map, CodeMap> myClassToCodeMap = new HashMap, ValueSetEnumeration.CodeMap>(); + private final String myCode; private final int myOrdinal; - + public ValueSetEnumeration(String theCode, String theValueSetIdentifier) { myCode = theCode; - + CodeMap codeMap = myClassToCodeMap.get(getClass()); if (codeMap == null) { codeMap = new CodeMap(theValueSetIdentifier); myClassToCodeMap.put(getClass(), codeMap); } - - myOrdinal = codeMap.nextOrdinal(); + + myOrdinal = codeMap.nextOrdinal(); codeMap.addCode(this); - + } - - private static class CodeMap - { + + public String getCode() { + return myCode; + } + + public int getOrdinal() { + return myOrdinal; + } + + private static class CodeMap { private Map myCodeMap = new HashMap(); - private String myValueSetIdentifier; private int myNextOrdinal = 0; + private String myValueSetIdentifier; public CodeMap(String theValueSetIdentifier) { myValueSetIdentifier = theValueSetIdentifier; } - public int getNextOrdinal() { - return myNextOrdinal; + public void addCode(ValueSetEnumeration theValueSetEnumeration) { + myCodeMap.put(theValueSetEnumeration.getCode(), theValueSetEnumeration); } public int nextOrdinal() { return myNextOrdinal++; } - public void addCode(ValueSetEnumeration theValueSetEnumeration) { - myCodeMap.put(theValueSetEnumeration.getCode(), theValueSetEnumeration); - } - } - public String getCode() { - return myCode; - } - } diff --git a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/BaseParser.java b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/BaseParser.java index 0d4c3377bf3..9f2e616a85a 100644 --- a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/BaseParser.java +++ b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/BaseParser.java @@ -12,6 +12,7 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.apache.commons.lang3.ObjectUtils; @@ -48,6 +49,7 @@ public abstract class BaseParser { private String myDirectory; private ArrayList myExtensions; private String myOutputFile; + private List myResources = new ArrayList(); public void parse() throws Exception { File baseDir = new File(myDirectory); @@ -55,75 +57,82 @@ public abstract class BaseParser { throw new Exception(myDirectory + " does not exist or is not a directory"); } - File resourceSpreadsheetFile = new File(baseDir, getFilename()); - if (resourceSpreadsheetFile.exists() == false) { - throw new Exception(resourceSpreadsheetFile.getAbsolutePath() + " does not exist"); + for (File nextFile : baseDir.listFiles()) { + if (isSpreadsheet(nextFile.getAbsolutePath())) { + ourLog.info("Scanning file: {}", nextFile.getAbsolutePath()); + + File resourceSpreadsheetFile = nextFile; + if (resourceSpreadsheetFile.exists() == false) { + throw new Exception(resourceSpreadsheetFile.getAbsolutePath() + " does not exist"); + } + + Document file = XMLUtils.parse(new FileInputStream(resourceSpreadsheetFile), false); + Element dataElementsSheet = (Element) file.getElementsByTagName("Worksheet").item(0); + NodeList tableList = dataElementsSheet.getElementsByTagName("Table"); + Element table = (Element) tableList.item(0); + + NodeList rows = table.getElementsByTagName("Row"); + + Element defRow = (Element) rows.item(0); + parseFirstRow(defRow); + + Element resourceRow = (Element) rows.item(1); + Resource resource = new Resource(); + myResources.add(resource); + + parseBasicElements(resourceRow, resource); + + Map elements = new HashMap(); + elements.put(resource.getElementName(), resource); + + // Map blockFullNameToShortName = new HashMap(); + + for (int i = 2; i < rows.getLength(); i++) { + Element nextRow = (Element) rows.item(i); + String name = cellValue(nextRow, 0); + if (name == null || name.startsWith("!")) { + continue; + } + + String type = cellValue(nextRow, myColType); + + Child elem; + if (StringUtils.isBlank(type) || type.startsWith("=")) { + elem = new ResourceBlock(); + } else if (type.startsWith("@")) { + // type = type.substring(type.lastIndexOf('.')+1); + elem = new ResourceBlockCopy(); + } else if (type.equals("*")) { + elem = new AnyChild(); + } else { + elem = new Child(); + } + + parseBasicElements(nextRow, elem); + + elements.put(elem.getName(), elem); + BaseElement parent = elements.get(elem.getElementParentName()); + if (parent == null) { + throw new Exception("Can't find element " + elem.getElementParentName() + " - Valid values are: " + elements.keySet()); + } + parent.addChild(elem); + + /* + * Find simple setters + */ + if (elem instanceof Child) { + scanForSimpleSetters(elem); + } + + } + + } } - Document file = XMLUtils.parse(new FileInputStream(resourceSpreadsheetFile), false); - Element dataElementsSheet = (Element) file.getElementsByTagName("Worksheet").item(0); - NodeList tableList = dataElementsSheet.getElementsByTagName("Table"); - Element table = (Element) tableList.item(0); - - NodeList rows = table.getElementsByTagName("Row"); - - Element defRow = (Element) rows.item(0); - parseFirstRow(defRow); - - Element resourceRow = (Element) rows.item(1); - Resource resource = new Resource(); - parseBasicElements(resourceRow, resource); - - Map elements = new HashMap(); - elements.put(resource.getElementName(), resource); - -// Map blockFullNameToShortName = new HashMap(); + ourLog.info("Parsed {} resources", myResources.size()); - - for (int i = 2; i < rows.getLength(); i++) { - Element nextRow = (Element) rows.item(i); - String name = cellValue(nextRow, 0); - if (name == null || name.startsWith("!")) { - continue; - } - - String type = cellValue(nextRow, myColType); - - Child elem; - if (StringUtils.isBlank(type) || type.startsWith("=")) { - elem = new ResourceBlock(); - } else if (type.startsWith("@")) { -// type = type.substring(type.lastIndexOf('.')+1); - elem=new ResourceBlockCopy(); - } else if (type.equals("*")) { - elem = new AnyChild(); - } else { - elem = new Child(); - } - - parseBasicElements(nextRow, elem); - - elements.put(elem.getName(), elem); - BaseElement parent = elements.get(elem.getElementParentName()); - if (parent == null) { - throw new Exception("Can't find element " + elem.getElementParentName() + " - Valid values are: " + elements.keySet()); - } - parent.addChild(elem); - - /* - * Find simple setters - */ - if (elem instanceof Child) { - scanForSimpleSetters(elem); - } - - } - - write(resource); - } - - + private void scanForSimpleSetters(Child theElem) { @@ -148,7 +157,7 @@ public abstract class BaseParser { ss.setDatatype(childDt.getSimpleName()); ss.setSuffix(simpleSetter.suffix()); theElem.getSimpleSetters().add(ss); - + Annotation[][] paramAnn = nextConstructor.getParameterAnnotations(); Class[] paramTypes = nextConstructor.getParameterTypes(); for (int i = 0; i < paramTypes.length; i++) { @@ -160,7 +169,8 @@ public abstract class BaseParser { } } - private ca.uhn.fhir.model.api.annotation.SimpleSetter.Parameter findAnnotation(Class theBase, Annotation[] theAnnotations, Class theClass) { + private ca.uhn.fhir.model.api.annotation.SimpleSetter.Parameter findAnnotation(Class theBase, Annotation[] theAnnotations, + Class theClass) { for (Annotation next : theAnnotations) { if (theClass.equals(next.annotationType())) { return (ca.uhn.fhir.model.api.annotation.SimpleSetter.Parameter) next; @@ -235,8 +245,6 @@ public abstract class BaseParser { w.close(); } - protected abstract String getFilename(); - protected abstract String getTemplate(); protected void parseBasicElements(Element theRowXml, BaseElement theTarget) { @@ -244,7 +252,6 @@ public abstract class BaseParser { theTarget.setName(name); theTarget.setElementName(name); - String cardValue = cellValue(theRowXml, myColCard); if (cardValue != null && cardValue.contains("..")) { @@ -290,4 +297,8 @@ public abstract class BaseParser { return null; } + protected boolean isSpreadsheet(String theFileName) { + return true; + } + } diff --git a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/DatatypeParser.java b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/DatatypeParser.java index 4c3047f13d5..1692108f257 100644 --- a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/DatatypeParser.java +++ b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/DatatypeParser.java @@ -6,21 +6,11 @@ import ca.uhn.fhir.starter.model.BaseElement; public class DatatypeParser extends BaseParser { - private String myDatatypeName; - @Override protected String getTemplate() { return "/dt_composite.vm"; } - public void setDatatypeName(String theString) { - myDatatypeName=theString; - } - - @Override - protected String getFilename() { - return myDatatypeName.toLowerCase() + ".xml"; - } // @Override // protected void parseBasicElements(Element theRowXml, BaseElement theTarget) { diff --git a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/ResourceParser.java b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/ResourceParser.java index 1185064fc45..fb12dfabccd 100644 --- a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/ResourceParser.java +++ b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/ResourceParser.java @@ -5,160 +5,116 @@ import java.util.List; public class ResourceParser extends BaseParser { - private String myResourceName; - private List myAllDatatypes; - - private void setResourceName(String theString) { - myResourceName = theString; - } - - public void setAllDatatypes(List theAllDatatypes) { - myAllDatatypes = theAllDatatypes; - } - - @Override - protected String getFilename() { - return myResourceName + "-spreadsheet.xml"; - } - - // @Override - // protected void parseBasicElements(Element theRowXml, BaseElement - // theTarget) { - // String name = cellValue(theRowXml, 0); - // theTarget.setName(name); - // - // int lastDot = name.lastIndexOf('.'); - // if (lastDot == -1) { - // theTarget.setElementName(name); - // } else { - // String elementName = name.substring(lastDot + 1); - // String elementParentName = name.substring(0, lastDot); - // theTarget.setElementName(elementName); - // theTarget.setElementParentName(elementParentName); - // } - // - // String cardValue = cellValue(theRowXml, 1); - // if (cardValue != null && cardValue.contains("..")) { - // String[] split = cardValue.split("\\.\\."); - // theTarget.setCardMin(split[0]); - // theTarget.setCardMax(split[1]); - // } - // - // String type = cellValue(theRowXml, 5); - // theTarget.setTypeFromString(type); - // - // theTarget.setBinding(cellValue(theRowXml, 6)); - // theTarget.setShortName(cellValue(theRowXml, 7)); - // theTarget.setDefinition(cellValue(theRowXml, 8)); - // theTarget.setRequirement(cellValue(theRowXml, 9)); - // theTarget.setV2Mapping(cellValue(theRowXml, 14)); - // } @Override protected String getTemplate() { return "/resource.vm"; } + @Override + protected boolean isSpreadsheet(String theFileName) { + return theFileName.endsWith("spreadsheet.xml"); + } + public static void main(String[] args) throws Exception { - ResourceParser p = new ResourceParser(); - p.setAllDatatypes(new ArrayList()); - p.setDirectory("src/test/resources/res"); - - // TODO: this needs to be properly populated - p.getAllDatatypes().add("String"); - p.getAllDatatypes().add("Date"); - p.getAllDatatypes().add("DateTime"); - +// ResourceParser p = new ResourceParser(); +// p.setAllDatatypes(new ArrayList()); // p.setDirectory("src/test/resources/res"); -// p.setResourceName("patient"); -// p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/ResourceWithExtensionsA.java"); -// ArrayList exts = new ArrayList(); -// Extension ext1 = new Extension("foo1", "http://foo/1", "string"); -// exts.add(ext1); -// Extension ext2 = new Extension("bar1", "http://bar/1", new Extension("bar11", "http://bar/1/1", "date"), new Extension("bar12", "http://bar/1/2", "date")); -// exts.add(ext2); -// p.setExtensions(exts); +// +// // TODO: this needs to be properly populated +// p.getAllDatatypes().add("String"); +// p.getAllDatatypes().add("Date"); +// p.getAllDatatypes().add("DateTime"); +// +//// p.setDirectory("src/test/resources/res"); +//// p.setResourceName("patient"); +//// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/ResourceWithExtensionsA.java"); +//// ArrayList exts = new ArrayList(); +//// Extension ext1 = new Extension("foo1", "http://foo/1", "string"); +//// exts.add(ext1); +//// Extension ext2 = new Extension("bar1", "http://bar/1", new Extension("bar11", "http://bar/1/1", "date"), new Extension("bar12", "http://bar/1/2", "date")); +//// exts.add(ext2); +//// p.setExtensions(exts); +//// p.parse(); +// +//// String basePath="../hapi-fhir-base/src/main/java"; +// String basePath="target/generated/valuesets"; +// +// p.setResourceName("medication"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Medication.java"); // p.parse(); - - - p.setResourceName("medication"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Medication.java"); - p.parse(); - - p.setDirectory("src/test/resources/res"); - p.setResourceName("substance"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Substance.java"); - p.parse(); - - - p.setDirectory("src/test/resources/res"); - p.setResourceName("valueset"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/ValueSetTm.java"); - p.parse(); - - p.setDirectory("src/test/resources/res"); - p.setResourceName("observation"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Observation.java"); - p.parse(); - - p.setResourceName("profile"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Profile.java"); - p.parse(); - - p.setResourceName("device"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Device.java"); - p.parse(); - - p.setResourceName("group"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Group.java"); - p.parse(); - - p.setResourceName("location"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Location.java"); - p.parse(); - - p.setResourceName("organization"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Organization.java"); - p.parse(); - - p.setResourceName("patient"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Patient.java"); - p.parse(); - - p.setResourceName("specimen"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Specimen.java"); - p.parse(); - - p.setResourceName("practitioner"); - p.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/resource/Practitioner.java"); - p.parse(); - - DatatypeParser d = new DatatypeParser(); - d.setDirectory("src/test/resources/dt"); - d.setDatatypeName("humanname"); - d.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/composite/HumanNameDt.java"); - d.parse(); - - d.setDatatypeName("contact"); - d.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/composite/ContactDt.java"); - d.parse(); - - d.setDatatypeName("address"); - d.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/composite/AddressDt.java"); - d.parse(); - - d.setDatatypeName("narrative"); - d.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/composite/NarrativeDt.java"); - d.parse(); - - d.setDatatypeName("quantity"); - d.setOutputFile("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/composite/QuantityDt.java"); - d.parse(); +// +// p.setDirectory("src/test/resources/res"); +// p.setResourceName("substance"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Substance.java"); +// p.parse(); +// +// +// p.setDirectory("src/test/resources/res"); +// p.setResourceName("valueset"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/ValueSetTm.java"); +// p.parse(); +// +// p.setDirectory("src/test/resources/res"); +// p.setResourceName("observation"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Observation.java"); +// p.parse(); +// +// p.setResourceName("profile"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Profile.java"); +// p.parse(); +// +// p.setResourceName("device"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Device.java"); +// p.parse(); +// +// p.setResourceName("group"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Group.java"); +// p.parse(); +// +// p.setResourceName("location"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Location.java"); +// p.parse(); +// +// p.setResourceName("organization"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Organization.java"); +// p.parse(); +// +// p.setResourceName("patient"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Patient.java"); +// p.parse(); +// +// p.setResourceName("specimen"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Specimen.java"); +// p.parse(); +// +// p.setResourceName("practitioner"); +// p.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/resource/Practitioner.java"); +// p.parse(); +// +// DatatypeParser d = new DatatypeParser(); +// d.setDirectory("src/test/resources/dt"); +// d.setDatatypeName("humanname"); +// d.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/composite/HumanNameDt.java"); +// d.parse(); +// +// d.setDatatypeName("contact"); +// d.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/composite/ContactDt.java"); +// d.parse(); +// +// d.setDatatypeName("address"); +// d.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/composite/AddressDt.java"); +// d.parse(); +// +// d.setDatatypeName("narrative"); +// d.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/composite/NarrativeDt.java"); +// d.parse(); +// +// d.setDatatypeName("quantity"); +// d.setOutputFile(basePath + "/ca/uhn/fhir/model/dstu/composite/QuantityDt.java"); +// d.parse(); } - private List getAllDatatypes() { - return myAllDatatypes; - } } \ No newline at end of file diff --git a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/TinderMojo.java b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/TinderMojo.java new file mode 100644 index 00000000000..cb6eb2ef12b --- /dev/null +++ b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/TinderMojo.java @@ -0,0 +1,24 @@ +package ca.uhn.fhir.starter; + +import java.io.FileNotFoundException; +import java.io.IOException; + +public class TinderMojo { + + public static void main(String[] args) throws Exception { + + ValueSetParser vsp = new ValueSetParser(); + vsp.setDirectory("src/test/resources/vs/"); + vsp.parse(); + + DatatypeParser dtp = new DatatypeParser(); + dtp.setDirectory("src/test/resources/dt"); + dtp.parse(); + + ResourceParser rp = new ResourceParser(); + rp.setDirectory("src/test/resources/res"); + rp.parse(); + + } + +} diff --git a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/ValueSetParser.java b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/ValueSetParser.java index 9dd7a35d4f9..f6e450aed06 100644 --- a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/ValueSetParser.java +++ b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/ValueSetParser.java @@ -34,23 +34,21 @@ public class ValueSetParser { public static void main(String[] args) throws FileNotFoundException, IOException { - ValueSetParser p = new ValueSetParser(); - p.setDirectory("src/test/resources/vs/"); // p.setOutputDirectory("../hapi-fhir-base/src/main/java/ca/uhn/fhir/model/dstu/valueset/"); - p.setOutputDirectory("target/generated/valuesets/ca/uhn/fhir/model/dstu/valueset"); - p.parse(); +// p.setOutputDirectory("target/generated/valuesets/ca/uhn/fhir/model/dstu/valueset"); +// p.parse(); } private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ValueSetParser.class); - private void parse() throws FileNotFoundException, IOException { + public void parse() throws FileNotFoundException, IOException { String string = IOUtils.toString(new FileReader(myDirectory + "valuesets.xml")); Bundle bundle = new FhirContext(ValueSet.class).newXmlParser().parseBundle(string); int vsCount = 0; int conceptCount = 0; - List valueSets = new ArrayList<>(); + List valueSets = new ArrayList(); for (BundleEntry next : bundle.getEntries()) { ValueSet nextVs = (ValueSet) next.getResource(); conceptCount += nextVs.getDefine().getConcept().size(); @@ -74,16 +72,14 @@ public class ValueSetParser { vs.getCodes().add(new Code(nextCodeValue, nextCodeDisplay, nextCodeDefinition)); } - if (vsCount > 5) { - break; - } +// if (vsCount > 5) { +// break; +// } } - write(valueSets); - } - private void write(List theValueSets) throws IOException { + public void write(List theValueSets) throws IOException { for (ValueSetTm nextValueSetTm : theValueSets) { write(nextValueSetTm); } @@ -128,10 +124,14 @@ public class ValueSetParser { if (next.startsWith("(") && next.endsWith(")")) { continue; } - if (StringUtils.isAllUpperCase(next)) { - next = WordUtils.capitalize(next); + next = next.replace("/", ""); + next = next.replace("-", ""); + next = next.replace(',', '_'); + next = next.replace('.', '_'); + if (next.contains(" ")) { + next = WordUtils.capitalizeFully(next); } - b.append(WordUtils.capitalize(next)); + b.append(next); } return b.toString(); } diff --git a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/model/ValueSetTm.java b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/model/ValueSetTm.java index 1c90dd8802b..b1eb273d0e3 100644 --- a/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/model/ValueSetTm.java +++ b/hapi-tinder-plugin/src/main/java/ca/uhn/fhir/starter/model/ValueSetTm.java @@ -65,7 +65,7 @@ public class ValueSetTm { private String myDisplay; public Code(String theCode, String theDisplay, String theDefinition) { - myCode =theCode.trim(); + myCode = theCode.trim(); myDisplay = theDisplay; myDefinition = theDefinition; } @@ -75,10 +75,27 @@ public class ValueSetTm { } public String getCodeEnumValue() { - String retVal = myCode.toUpperCase().replace(' ', '_'); + String retVal = myCode.toUpperCase().replace(' ', '_').replace('-', '_').replace('/', '_').replace('.', '_'); + if ("=".equals(retVal)) { + retVal = "EQUALS"; + } + if ("<=".equals(retVal)) { + retVal = "LESSTHAN_OR_EQUALS"; + } + if ("<".equals(retVal)) { + retVal = "LESSTHAN"; + } + if (">=".equals(retVal)) { + retVal = "GREATERTHAN_OR_EQUALS"; + } + if (">".equals(retVal)) { + retVal = "GREATERTHAN"; + } + if (!Character.isJavaIdentifierStart(retVal.charAt(0))) { retVal = '_' + retVal; } + return retVal; } diff --git a/hapi-tinder-plugin/src/main/resources/valueset.vm b/hapi-tinder-plugin/src/main/resources/valueset.vm index c0382e5d591..420636e946c 100644 --- a/hapi-tinder-plugin/src/main/resources/valueset.vm +++ b/hapi-tinder-plugin/src/main/resources/valueset.vm @@ -9,13 +9,13 @@ public class ${valueSet.className} extends ValueSetEnumeration { * Identifier for this Value Set: * ${valueSet.id} */ - public static final String IDENTIFIER = "${valueSet.id}"; + public static final String VALUESET_IDENTIFIER = "${valueSet.id}"; /** * Constructor - should not be called directly */ protected ${valueSet.className}(String theCode) { - super(theCode, IDENTIFIER); + super(theCode, VALUESET_IDENTIFIER); } #foreach ($code in $valueSet.codes) diff --git a/hapi-tinder-plugin/src/test/resources/res/valueset-extensions-spreadsheet.xml b/hapi-tinder-plugin/src/test/resources/res/valueset-extensions-spreadsheet.xml_ similarity index 100% rename from hapi-tinder-plugin/src/test/resources/res/valueset-extensions-spreadsheet.xml rename to hapi-tinder-plugin/src/test/resources/res/valueset-extensions-spreadsheet.xml_