4A Server -  2.0
 All Classes Namespaces Files Functions Variables Enumerator
Matcher.java
Go to the documentation of this file.
1 /*
2  * Project: Server for annotations sharing
3  * Subproject: Position of fragment of text in XML document
4  * Authors: Peter Bartoš, Michael Angelov
5  * Edited by: Ing. Jaroslav Dytrych idytrych@fit.vutbr.cz,
6  * Bc. Lukas Kubik xkubik22@stud.fit.vutbr.cz
7  * File: Matcher.java
8  * Description: Class for matcher consisting of comparator and node iterator
9  */
10 
11 /**
12  * @file Matcher.java
13  *
14  * @brief Class for matcher consisting of comparator and node iterator
15  */
16 
17 package cz.vutbr.fit.knot.annotations.fragmentUpdater;
18 
21 import java.util.ArrayList;
22 import javax.xml.xpath.XPathExpressionException;
23 import org.w3c.dom.Document;
24 import org.w3c.dom.Node;
25 
26 /**
27  * Class for matcher consisting of comparator and node iterator
28  *
29  * @brief Class for matcher consisting of comparator and node iterator
30  * @author Peter Bartoš, Michael Angelov
31  */
32 public class Matcher {
33 
36  protected boolean iteratorInitialized = false;
37 
38  /**
39  * Getter for node iterator used in matcher
40  *
41  * @return node iterator used in matcher
42  */
44  return nodeIterator;
45  }
46 
47  /**
48  * Getter for comparator used in matcher
49  *
50  * @return comparator used in matcher
51  */
53  return comparator;
54  }
55 
56  /**
57  * Setter for node iterator used in matcher
58  *
59  * @param nodeIterator node iterator used in matcher
60  */
62  this.nodeIterator = nodeIterator;
63  }
64 
65  /**
66  * Setter for comparator used in matcher
67  *
68  * @param comparator comparator used in matcher
69  */
71  this.comparator = comparator;
72  }
73 
74  /**
75  * Constructor
76  *
77  * @param nodeIterator node iterator to be used
78  * @param comparator string comparator to be used
79  */
81  this.nodeIterator = nodeIterator;
82  this.comparator = comparator;
83  }
84 
85  /**
86  * Method for matching fragment in document
87  *
88  * @param document Document in which given fragment should be matched
89  * @param queryFragment fragment to be matched
90  * @return result fragment that was matched
91  */
92  public UpdatableFragment match(Document document, UpdatableFragment queryFragment) throws XPathExpressionException {
93 
94  Node node;
95 
96  UpdatableFragment resultFragment = null;
97 
98  nodeIterator.init(document, queryFragment.getXPathExpression());
99 
100  do {
101  node = nodeIterator.nextNode();
102  // no more nodes
103  if (node == null) {
104  return null;
105  }
106 
107  resultFragment = comparator.compare(queryFragment, node);
108 
109  } while (resultFragment == null);
110 
111  return resultFragment;
112  }
113 
114  /**
115  * Method for matching fragments in document
116  *
117  * @param document Document in which given fragment should be matched
118  * @param queryFragment fragment to be matched
119  * @return result fragments that was matched
120  */
121  public ArrayList<UpdatableFragment> matchAll(Document document, UpdatableFragment queryFragment) throws XPathExpressionException {
122 
123  Node node;
124 
125  UpdatableFragment resultFragment = null;
126  ArrayList<UpdatableFragment> resultFragments = new ArrayList<UpdatableFragment>();
127 
128  nodeIterator.init(document, queryFragment.getXPathExpression());
129 
130  node = nodeIterator.nextNode();
131  while (node != null) { // while there are more nodes
132  resultFragment = comparator.compare(queryFragment, node);
133  if (resultFragment != null) {
134  if (!resultFragments.contains(resultFragment)) {
135  resultFragments.add(resultFragment);
136  }
137  resultFragment = null;
138  }
139 
140  node = nodeIterator.nextNode();
141  }
142  return resultFragments;
143  }
144 
145  /**
146  * Inits the Iterator for incremental node matching
147  *
148  * @param document Document in which given fragment should be matched
149  * @param queryFragment fragment to be matched
150  * @throws XPathExpressionException
151  */
152  public void InitIterator(Document document, UpdatableFragment queryFragment) throws XPathExpressionException {
153  nodeIterator.init(document, queryFragment.getXPathExpression());
154  iteratorInitialized = true;
155  }
156 
157  /**
158  * Method for matching fragment in next node of the document
159  *
160  * @param queryFragment fragment to be matched
161  * @return result fragment that was matched
162  */
163  public UpdatableFragment matchInNextNode(UpdatableFragment queryFragment) throws XPathExpressionException {
164 
165  if(!iteratorInitialized){
166  return null;
167  }
168 
169  Node node;
170 
171  UpdatableFragment resultFragment = null;
172 
173  node = nodeIterator.nextNode();
174  // no more nodes
175  if (node == null) {
176  return null;
177  }
178 
179  resultFragment = comparator.compare(queryFragment, node);
180 
181  return resultFragment;
182  }
183 
184  /**
185  * Is there bidirectional iterator initialized?
186  * @return True if yes, False if not.
187  */
188  public boolean hasBidirectionalIterator(){
189  if(nodeIterator.toString().contentEquals("BidirectionallyUnNest")){
190  return true;
191  }
192  return false;
193  }
194 
195  /**
196  * Can we match things in another node?
197  * Can be used only with the bidirectional node iterator!!!
198  * Otherwise it always returns false...
199  * @return True if yes, False if not.
200  */
201  public boolean canMatchNext(){
204  }
205  return false;
206  }
207 
208 
209  /**
210  * Overriden toString() method
211  *
212  * @return string representation of class
213  */
214  @Override
215  public String toString() {
216  return "(" + nodeIterator + ", " + comparator + ")";
217  }
218 
219 } // class Matcher
UpdatableFragment match(Document document, UpdatableFragment queryFragment)
Definition: Matcher.java:92
ArrayList< UpdatableFragment > matchAll(Document document, UpdatableFragment queryFragment)
Definition: Matcher.java:121
void InitIterator(Document document, UpdatableFragment queryFragment)
Definition: Matcher.java:152
void setNodeIterator(NodeIterator nodeIterator)
Definition: Matcher.java:61
Class consisting of traversing method and compare method.
Definition: Comparator.java:37
Matcher(NodeIterator nodeIterator, Comparator comparator)
Definition: Matcher.java:80
Class for matcher consisting of comparator and node iterator.
Definition: Matcher.java:32
UpdatableFragment matchInNextNode(UpdatableFragment queryFragment)
Definition: Matcher.java:163