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