001package org.hl7.fhir.r5.utils.structuremap;
002
003import org.hl7.fhir.r5.model.Base;
004import org.hl7.fhir.utilities.CommaSeparatedStringBuilder;
005import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage;
006
007import java.util.ArrayList;
008import java.util.List;
009
010@MarkedToMoveToAdjunctPackage
011public class Variables {
012  private List<Variable> list = new ArrayList<Variable>();
013
014  public void add(VariableMode mode, String name, Base object) {
015    Variable vv = null;
016    for (Variable v : list)
017      if ((v.getMode() == mode) && v.getName().equals(name))
018        vv = v;
019    if (vv != null)
020      list.remove(vv);
021    list.add(new Variable(mode, name, object));
022  }
023
024  public Variables copy() {
025    Variables result = new Variables();
026    result.list.addAll(list);
027    return result;
028  }
029
030  public Base get(VariableMode mode, String name) {
031    for (Variable v : list)
032      if ((v.getMode() == mode) && v.getName().equals(name))
033        return v.getObject();
034    return null;
035  }
036
037  public String summary() {
038    CommaSeparatedStringBuilder s = new CommaSeparatedStringBuilder();
039    CommaSeparatedStringBuilder t = new CommaSeparatedStringBuilder();
040    CommaSeparatedStringBuilder sh = new CommaSeparatedStringBuilder();
041    for (Variable v : list)
042      switch (v.getMode()) {
043        case INPUT:
044          s.append(v.summary());
045          break;
046        case OUTPUT:
047          t.append(v.summary());
048          break;
049        case SHARED:
050          sh.append(v.summary());
051          break;
052      }
053    return "source variables [" + s.toString() + "], target variables [" + t.toString() + "], shared variables [" + sh.toString() + "]";
054  }
055
056}