001package org.hl7.fhir.r5.utils.structuremap; 002 003import org.hl7.fhir.utilities.CommaSeparatedStringBuilder; 004import org.hl7.fhir.utilities.xhtml.XhtmlNode; 005 006import java.util.ArrayList; 007import java.util.HashMap; 008import java.util.List; 009import java.util.Map; 010 011public class TargetWriter { 012 private Map<String, String> newResources = new HashMap<String, String>(); 013 private List<StringPair> assignments = new ArrayList<StringPair>(); 014 private List<StringPair> keyProps = new ArrayList<StringPair>(); 015 private CommaSeparatedStringBuilder txt = new CommaSeparatedStringBuilder(); 016 017 public void newResource(String var, String name) { 018 newResources.put(var, name); 019 txt.append("new " + name); 020 } 021 022 public void valueAssignment(String context, String desc) { 023 assignments.add(new StringPair(context, desc)); 024 txt.append(desc); 025 } 026 027 public void keyAssignment(String context, String desc) { 028 keyProps.add(new StringPair(context, desc)); 029 txt.append(desc); 030 } 031 032 public void commit(XhtmlNode xt) { 033 if (newResources.size() == 1 && assignments.size() == 1 && newResources.containsKey(assignments.get(0).getVar()) && keyProps.size() == 1 && newResources.containsKey(keyProps.get(0).getVar())) { 034 xt.addText("new " + assignments.get(0).getDesc() + " (" + keyProps.get(0).getDesc().substring(keyProps.get(0).getDesc().indexOf(".") + 1) + ")"); 035 } else if (newResources.size() == 1 && assignments.size() == 1 && newResources.containsKey(assignments.get(0).getVar()) && keyProps.size() == 0) { 036 xt.addText("new " + assignments.get(0).getDesc()); 037 } else { 038 xt.addText(txt.toString()); 039 } 040 } 041}