package ca.uhn.fhir.tinder.parser; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.maven.plugin.MojoFailureException; import ca.uhn.fhir.tinder.model.BaseElement; import ca.uhn.fhir.tinder.model.BaseRootType; import ca.uhn.fhir.tinder.model.Resource; public class ResourceGeneratorUsingSpreadsheet extends BaseStructureSpreadsheetParser { private List<String> myInputStreamNames; private ArrayList<InputStream> myInputStreams; public ResourceGeneratorUsingSpreadsheet(String theVersion, String theBaseDir) { super(theVersion, theBaseDir); super.setFilenameSuffix(""); } public List<String> getInputStreamNames() { return myInputStreamNames; } @Override protected void postProcess(BaseElement theTarget) throws MojoFailureException { super.postProcess(theTarget); if ("Bundle".equals(theTarget.getName())) { addEverythingToSummary(theTarget); } if (getVersion().equals("dstu2") && theTarget instanceof Resource) { try { new CompartmentParser(getVersion(), (Resource) theTarget).parse(); } catch (Exception e) { throw new MojoFailureException(e.toString(), e); } } } private void addEverythingToSummary(BaseElement theTarget) { theTarget.setSummary("Y"); for (BaseElement next : theTarget.getChildren()) { addEverythingToSummary(next); } } public void setBaseResourceNames(List<String> theBaseResourceNames) throws MojoFailureException { myInputStreamNames = theBaseResourceNames; myInputStreams = new ArrayList<InputStream>(); for (String next : theBaseResourceNames) { String resName = "/res/" + getVersion() + "/" + next.toLowerCase() + "-spreadsheet.xml"; resName = resName.replace("/dev/", "/dstu2/"); InputStream nextRes = getClass().getResourceAsStream(resName); myInputStreams.add(nextRes); if (nextRes == null) { throw new MojoFailureException("Unknown base resource name: " + resName); } } } @Override protected BaseRootType createRootType() { return new Resource(); } @Override protected Collection<InputStream> getInputStreams() { return myInputStreams; } @Override protected String getTemplate() { String template = super.getTemplate(); if (template != null) { return template; } else if ("dstu".equals(getVersion())) { return "/vm/resource_dstu.vm"; } else { return "/vm/resource.vm"; } } @Override protected boolean isSpreadsheet(String theFileName) { return theFileName.endsWith("spreadsheet.xml"); } }