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}