001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.xml;
016    
017    import com.liferay.portal.kernel.xml.Branch;
018    import com.liferay.portal.kernel.xml.Comment;
019    import com.liferay.portal.kernel.xml.Element;
020    import com.liferay.portal.kernel.xml.Node;
021    import com.liferay.portal.kernel.xml.ProcessingInstruction;
022    import com.liferay.portal.kernel.xml.QName;
023    
024    import java.util.Iterator;
025    import java.util.List;
026    
027    /**
028     * @author Brian Wing Shun Chan
029     */
030    public class BranchImpl extends NodeImpl implements Branch {
031    
032            public BranchImpl(org.dom4j.Branch branch) {
033                    super(branch);
034    
035                    _branch = branch;
036            }
037    
038            @Override
039            public void add(Comment comment) {
040                    CommentImpl commentImpl = (CommentImpl)comment;
041    
042                    _branch.add(commentImpl.getWrappedComment());
043            }
044    
045            @Override
046            public void add(Element element) {
047                    ElementImpl elementImpl = (ElementImpl)element;
048    
049                    _branch.add(elementImpl.getWrappedElement());
050            }
051    
052            @Override
053            public void add(Node node) {
054                    NodeImpl nodeImpl = (NodeImpl)node;
055    
056                    _branch.add(nodeImpl.getWrappedNode());
057            }
058    
059            @Override
060            public void add(ProcessingInstruction processingInstruction) {
061                    ProcessingInstructionImpl processingInstructionImpl =
062                            (ProcessingInstructionImpl)processingInstruction;
063    
064                    _branch.add(
065                            processingInstructionImpl.getWrappedProcessingInstruction());
066            }
067    
068            @Override
069            public Element addElement(QName qName) {
070                    QNameImpl qNameImpl = (QNameImpl)qName;
071    
072                    return new ElementImpl(_branch.addElement(qNameImpl.getWrappedQName()));
073            }
074    
075            @Override
076            public Element addElement(String name) {
077                    return new ElementImpl(_branch.addElement(name));
078            }
079    
080            @Override
081            public Element addElement(String qualifiedName, String namespaceURI) {
082                    return new ElementImpl(_branch.addElement(qualifiedName, namespaceURI));
083            }
084    
085            @Override
086            public void appendContent(Branch branch) {
087                    BranchImpl branchImpl = (BranchImpl)branch;
088    
089                    _branch.appendContent(branchImpl.getWrappedBranch());
090            }
091    
092            @Override
093            public void clearContent() {
094                    _branch.clearContent();
095            }
096    
097            @Override
098            public List<Node> content() {
099                    return SAXReaderImpl.toNewNodes(_branch.content());
100            }
101    
102            @Override
103            public Element elementByID(String elementID) {
104                    return new ElementImpl(_branch.elementByID(elementID));
105            }
106    
107            @Override
108            public boolean equals(Object obj) {
109                    if (this == obj) {
110                            return true;
111                    }
112    
113                    if (!(obj instanceof BranchImpl)) {
114                            return false;
115                    }
116    
117                    org.dom4j.Branch branch = ((BranchImpl)obj).getWrappedBranch();
118    
119                    return _branch.equals(branch);
120            }
121    
122            public org.dom4j.Branch getWrappedBranch() {
123                    return _branch;
124            }
125    
126            @Override
127            public int hashCode() {
128                    return _branch.hashCode();
129            }
130    
131            @Override
132            public int indexOf(Node node) {
133                    NodeImpl nodeImpl = (NodeImpl)node;
134    
135                    return _branch.indexOf(nodeImpl.getWrappedNode());
136            }
137    
138            @Override
139            public Node node(int index) {
140                    org.dom4j.Node node = _branch.node(index);
141    
142                    if (node == null) {
143                            return null;
144                    }
145                    else {
146                            if (node instanceof org.dom4j.CDATA) {
147                                    return new CDATAImpl((org.dom4j.CDATA)node);
148                            }
149                            else if (node instanceof org.dom4j.Comment) {
150                                    return new CommentImpl((org.dom4j.Comment)node);
151                            }
152                            else if (node instanceof org.dom4j.Element) {
153                                    return new ElementImpl((org.dom4j.Element)node);
154                            }
155                            else if (node instanceof org.dom4j.Entity) {
156                                    return new EntityImpl((org.dom4j.Entity)node);
157                            }
158                            else if (node instanceof org.dom4j.Namespace) {
159                                    return new NamespaceImpl((org.dom4j.Namespace)node);
160                            }
161                            else if (node instanceof org.dom4j.Text) {
162                                    return new TextImpl((org.dom4j.Text)node);
163                            }
164                            else {
165                                    return new NodeImpl(node);
166                            }
167                    }
168            }
169    
170            @Override
171            public int nodeCount() {
172                    return _branch.nodeCount();
173            }
174    
175            @Override
176            public Iterator<Node> nodeIterator() {
177                    return content().iterator();
178            }
179    
180            @Override
181            public void normalize() {
182                    _branch.normalize();
183            }
184    
185            @Override
186            public ProcessingInstruction processingInstruction(String target) {
187                    org.dom4j.ProcessingInstruction processingInstruction =
188                            _branch.processingInstruction(target);
189    
190                    if (processingInstruction == null) {
191                            return null;
192                    }
193                    else {
194                            return new ProcessingInstructionImpl(processingInstruction);
195                    }
196            }
197    
198            @Override
199            public List<ProcessingInstruction> processingInstructions() {
200                    return SAXReaderImpl.toNewProcessingInstructions(
201                            _branch.processingInstructions());
202            }
203    
204            @Override
205            public List<ProcessingInstruction> processingInstructions(String target) {
206                    return SAXReaderImpl.toNewProcessingInstructions(
207                            _branch.processingInstructions(target));
208            }
209    
210            @Override
211            public boolean remove(Comment comment) {
212                    CommentImpl commentImpl = (CommentImpl)comment;
213    
214                    return _branch.remove(commentImpl.getWrappedComment());
215            }
216    
217            @Override
218            public boolean remove(Element element) {
219                    ElementImpl elementImpl = (ElementImpl)element;
220    
221                    return _branch.remove(elementImpl.getWrappedElement());
222            }
223    
224            @Override
225            public boolean remove(Node node) {
226                    NodeImpl nodeImpl = (NodeImpl)node;
227    
228                    return _branch.remove(nodeImpl.getWrappedNode());
229            }
230    
231            @Override
232            public boolean remove(ProcessingInstruction processingInstruction) {
233                    ProcessingInstructionImpl processingInstructionImpl =
234                            (ProcessingInstructionImpl)processingInstruction;
235    
236                    return _branch.remove(
237                            processingInstructionImpl.getWrappedProcessingInstruction());
238            }
239    
240            @Override
241            public boolean removeProcessingInstruction(String target) {
242                    return _branch.removeProcessingInstruction(target);
243            }
244    
245            @Override
246            public void setContent(List<Node> content) {
247                    _branch.setContent(SAXReaderImpl.toOldNodes(content));
248            }
249    
250            @Override
251            public void setProcessingInstructions(
252                    List<ProcessingInstruction> processingInstructions) {
253    
254                    _branch.setProcessingInstructions(
255                            SAXReaderImpl.toOldProcessingInstructions(processingInstructions));
256            }
257    
258            @Override
259            public String toString() {
260                    return _branch.toString();
261            }
262    
263            private org.dom4j.Branch _branch;
264    
265    }