001package org.hl7.fhir.utilities.xhtml;
002
003import java.util.ArrayList;
004import java.util.Collection;
005import java.util.Iterator;
006import java.util.List;
007import java.util.ListIterator;
008
009public class XhtmlNodeList extends XhtmlFluent implements List<XhtmlNode>, java.io.Serializable {
010
011  private static final long serialVersionUID = 1L;
012  private List<XhtmlNode> list = new ArrayList<>();
013  private boolean inPara;
014  private boolean inLink;
015  
016  
017  public boolean isInPara() {
018    return inPara;
019  }
020
021  public void setInPara(boolean inPara) {
022    this.inPara = inPara;
023  }
024
025  public boolean isInLink() {
026    return inLink;
027  }
028
029  public void setInLink(boolean inLink) {
030    this.inLink = inLink;
031  }
032  
033
034  public XhtmlNode addTag(String name)
035  {
036    
037//    if (inPara && name.equals("p")) {
038//      throw new FHIRException("nested Para");
039//    }
040//    if (inLink && name.equals("a")) {
041//      throw new FHIRException("Nested Link");
042//    }
043    XhtmlNode node = new XhtmlNode(NodeType.Element);
044    node.setName(name);
045    if (isInPara() || name.equals("p")) {
046      node.getChildNodes().setInPara(true);
047    }
048    if (isInLink() || name.equals("a")) {
049      node.getChildNodes().setInLink(true);
050    }
051    add(node);
052    return node;
053  }
054
055  public XhtmlNode addText(String content) {
056    if (content != null) {
057      XhtmlNode node = new XhtmlNode(NodeType.Text);
058      node.setContent(content);
059      add(node);
060      return node;
061    } else {
062      return null;
063    }
064  }
065  
066  @Override
067  public int size() {
068    return list.size();
069  }
070
071  @Override
072  public boolean isEmpty() {
073    return list.isEmpty();
074  }
075
076  @Override
077  public boolean contains(Object o) {
078    return list.contains(o);
079  }
080
081  @Override
082  public Iterator<XhtmlNode> iterator() {
083    return list.iterator();
084  }
085
086  @Override
087  public Object[] toArray() {
088    return list.toArray();
089  }
090
091  @Override
092  public <T> T[] toArray(T[] a) {
093    return list.toArray(a);
094  }
095
096  @Override
097  public boolean add(XhtmlNode e) {
098    return list.add(e);
099  }
100
101  @Override
102  public boolean remove(Object o) {
103    return list.remove(o);
104  }
105
106  @Override
107  public boolean containsAll(Collection<?> c) {
108    return list.containsAll(c);
109  }
110
111  @Override
112  public boolean addAll(Collection<? extends XhtmlNode> c) {
113    return list.addAll(c);
114  }
115
116  @Override
117  public boolean addAll(int index, Collection<? extends XhtmlNode> c) {
118    return list.addAll(index, c);
119  }
120
121  @Override
122  public boolean removeAll(Collection<?> c) {
123    return list.removeAll(c);
124  }
125
126  @Override
127  public boolean retainAll(Collection<?> c) {
128    return list.retainAll(c);
129  }
130
131  @Override
132  public void clear() {
133    list.clear();    
134  }
135
136  @Override
137  public XhtmlNode get(int index) {
138    return list.get(index);
139  }
140
141  @Override
142  public XhtmlNode set(int index, XhtmlNode element) {
143    return list.set(index, element);
144  }
145
146  @Override
147  public void add(int index, XhtmlNode element) {
148    list.add(index, element);    
149  }
150
151  @Override
152  public XhtmlNode remove(int index) {
153    return list.remove(index);
154  }
155
156  @Override
157  public int indexOf(Object o) {
158    return list.indexOf(o);
159  }
160
161  @Override
162  public int lastIndexOf(Object o) {
163    return list.lastIndexOf(o);
164  }
165
166  @Override
167  public ListIterator<XhtmlNode> listIterator() {
168    return list.listIterator();
169  }
170
171  @Override
172  public ListIterator<XhtmlNode> listIterator(int index) {
173    return list.listIterator(index);
174  }
175
176  @Override
177  public List<XhtmlNode> subList(int fromIndex, int toIndex) {
178    return list.subList(fromIndex, toIndex);
179  }
180
181
182  @Override
183  protected void addChildren(XhtmlNodeList childNodes) {
184    this.addAll(childNodes);    
185  }
186}