View Javadoc

1   /*
2    * Copyright 2009 - 2010 JEuclid, http://jeuclid.sf.net
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  /* $Id $ */
18  
19  package net.sourceforge.jeuclid.biparser;
20  
21  import org.w3c.dom.Document;
22  import org.w3c.dom.Node;
23  
24  /**
25   * this interface is used to store typcial information about a xml-node.
26   * 
27   * @version $Revision: 0b66106c7ff7 $
28   * 
29   */
30  public interface IBiNode {
31  
32      /**
33       * get previous node, null if node is root.
34       * 
35       * @return previous
36       */
37      IBiNode getPrevious();
38  
39      /**
40       * set previous for this node.
41       * 
42       * @param prev
43       *            previous node for this node
44       */
45      void setPrevious(final IBiNode prev);
46  
47      /**
48       * get parent node for this node.
49       * 
50       * @return parent
51       */
52      BiNode getParent();
53  
54      /**
55       * get sibling node, can be null.
56       * 
57       * @return sibling
58       */
59      IBiNode getSibling();
60  
61      /**
62       * set sibling for this node and set previous of sibling to this.
63       * 
64       * @param sibl
65       *            new sibling for this node
66       */
67      void setSibling(final IBiNode sibl);
68  
69      /**
70       * add sibling to a node, not possible at a textnode. if node already has a
71       * sibling, forward to sibling.
72       * 
73       * @param sibl
74       *            new sibling for this node
75       */
76      void addSibling(final IBiNode sibl);
77  
78      /**
79       * get reference to node in DOM-tree.
80       * 
81       * @return node in DOM-tree
82       */
83      Node getNode();
84  
85      /**
86       * set reference to node in DOM-tree.
87       * 
88       * @param n
89       *            reference in DOM-tree
90       */
91      void setNode(final Node n);
92  
93      /**
94       * get length of node (number of characters).
95       * 
96       * @return length of node
97       */
98      int getLength();
99  
100     /**
101      * set length of node.
102      * 
103      * @param len
104      *            to set
105      */
106     void setLength(final int len);
107 
108     /**
109      * change length of node and recursive of all parents.
110      * 
111      * @param change
112      *            changevalue (can be positive or negative)
113      */
114     void changeLengthRec(final int change);
115 
116     /**
117      * get the type of node, can be BiNode, EmptyNode or TextNode.
118      * 
119      * @return type of node
120      */
121     BiType getType();
122 
123     /**
124      * insert characters to node.
125      * 
126      * @param biTree
127      *            reference to BiTree to which this node contains
128      * @param offset
129      *            position to insert characters
130      * @param len
131      *            number of characters to insert
132      * @param totalOffset
133      *            offset of node to begin of text
134      * @throws ReparseException
135      *             if a reparse at upper level is needed
136      * @throws NonIncrementalElementException
137      *             if the subtree contains an element which cannot be
138      *             incrementally updated.
139      */
140     void insert(BiTree biTree, int offset, int len, int totalOffset)
141             throws ReparseException, NonIncrementalElementException;
142 
143     /**
144      * remove characters from node.
145      * 
146      * @param biTree
147      *            reference to BiTree to which this node contains
148      * @param offset
149      *            position to remove characters
150      * @param len
151      *            number of characters to remove
152      * @param totalOffset
153      *            offset of node to begin of text
154      * @throws ReparseException
155      *             if a reparse at upper level is needed
156      * @throws NonIncrementalElementException
157      *             if the subtree contains an element which cannot be
158      *             incrementally updated.
159      */
160     void remove(BiTree biTree, int offset, int len, int totalOffset)
161             throws ReparseException, NonIncrementalElementException;
162 
163     /**
164      * helper method to insert or remove characters.
165      * 
166      * @param insert
167      *            if true call insert-method else remove-method
168      * @param biTree
169      *            reference to BiTree to which this node contains
170      * @param offset
171      *            position to insert/remove characters
172      * @param len
173      *            number of characters to insert/remove
174      * @param totalOffset
175      *            offset of node to begin of text
176      * @throws ReparseException
177      *             if a reparse at upper level is needed
178      * @throws NonIncrementalElementException
179      *             if the subtree contains an element which cannot be
180      *             incrementally updated.
181      */
182     void forwardToSibling(final boolean insert, final BiTree biTree,
183             final int offset, final int len, final int totalOffset)
184             throws ReparseException, NonIncrementalElementException;
185 
186     /**
187      * create a DOM-tree from node.
188      * 
189      * @param doc
190      *            Document to create DOM-tree
191      * @return root of DOM-tree
192      */
193     Node createDOMSubtree(Document doc);
194 
195     /**
196      * search a DOM node in this node. if nodes are equal return offset to begin
197      * of inputtext, else null
198      * 
199      * @param n
200      *            DOM node to search for
201      * @param totalOffset
202      *            offset of node to begin of inputtext
203      * @return position of node in inputtext
204      */
205     TextPosition searchNode(final Node n, final int totalOffset);
206 
207     /**
208      * print biNode.
209      * 
210      * @param level
211      *            level of recursion tree
212      * @return biNode
213      */
214     String toString(int level);
215 
216     /**
217      * helper method for outputting the length of node.
218      * 
219      * @return formatted output of length
220      */
221     String formatLength();
222 }