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    
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            @Override
170            public int nodeCount() {
171                    return _branch.nodeCount();
172            }
173    
174            @Override
175            public Iterator<Node> nodeIterator() {
176                    return content().iterator();
177            }
178    
179            @Override
180            public void normalize() {
181                    _branch.normalize();
182            }
183    
184            @Override
185            public ProcessingInstruction processingInstruction(String target) {
186                    org.dom4j.ProcessingInstruction processingInstruction =
187                            _branch.processingInstruction(target);
188    
189                    if (processingInstruction == null) {
190                            return null;
191                    }
192                    else {
193                            return new ProcessingInstructionImpl(processingInstruction);
194                    }
195            }
196    
197            @Override
198            public List<ProcessingInstruction> processingInstructions() {
199                    return SAXReaderImpl.toNewProcessingInstructions(
200                            _branch.processingInstructions());
201            }
202    
203            @Override
204            public List<ProcessingInstruction> processingInstructions(String target) {
205                    return SAXReaderImpl.toNewProcessingInstructions(
206                            _branch.processingInstructions(target));
207            }
208    
209            @Override
210            public boolean remove(Comment comment) {
211                    CommentImpl commentImpl = (CommentImpl)comment;
212    
213                    return _branch.remove(commentImpl.getWrappedComment());
214            }
215    
216            @Override
217            public boolean remove(Element element) {
218                    ElementImpl elementImpl = (ElementImpl)element;
219    
220                    return _branch.remove(elementImpl.getWrappedElement());
221            }
222    
223            @Override
224            public boolean remove(Node node) {
225                    NodeImpl nodeImpl = (NodeImpl)node;
226    
227                    return _branch.remove(nodeImpl.getWrappedNode());
228            }
229    
230            @Override
231            public boolean remove(ProcessingInstruction processingInstruction) {
232                    ProcessingInstructionImpl processingInstructionImpl =
233                            (ProcessingInstructionImpl)processingInstruction;
234    
235                    return _branch.remove(
236                            processingInstructionImpl.getWrappedProcessingInstruction());
237            }
238    
239            @Override
240            public boolean removeProcessingInstruction(String target) {
241                    return _branch.removeProcessingInstruction(target);
242            }
243    
244            @Override
245            public void setContent(List<Node> content) {
246                    _branch.setContent(SAXReaderImpl.toOldNodes(content));
247            }
248    
249            @Override
250            public void setProcessingInstructions(
251                    List<ProcessingInstruction> processingInstructions) {
252    
253                    _branch.setProcessingInstructions(
254                            SAXReaderImpl.toOldProcessingInstructions(processingInstructions));
255            }
256    
257            @Override
258            public String toString() {
259                    return _branch.toString();
260            }
261    
262            private org.dom4j.Branch _branch;
263    
264    }