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}