View Javadoc
1   /*
2    * #%L
3    * Visitor.java - mongodb-async-driver - Allanbank Consulting, Inc.
4    * %%
5    * Copyright (C) 2011 - 2014 Allanbank Consulting, Inc.
6    * %%
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   * 
11   *      http://www.apache.org/licenses/LICENSE-2.0
12   * 
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   * #L%
19   */
20  package com.allanbank.mongodb.bson;
21  
22  import java.util.List;
23  
24  import com.allanbank.mongodb.bson.element.ArrayElement;
25  import com.allanbank.mongodb.bson.element.DocumentElement;
26  import com.allanbank.mongodb.bson.element.ObjectId;
27  
28  /**
29   * Interface for callbacks to navigate the document structure. The accept method
30   * of each {@link Element} calls the appropriate Visit method in this interface
31   * The user is responsible for recursively navigating the structure.
32   * 
33   * @api.yes This interface is part of the driver's API. Public and protected
34   *          members will be deprecated for at least 1 non-bugfix release
35   *          (version numbers are <major>.<minor>.<bugfix>)
36   *          before being removed or modified.
37   * @copyright 2011-2013, Allanbank Consulting, Inc., All Rights Reserved
38   */
39  public interface Visitor {
40  
41      /**
42       * Visit the root document.
43       * <p>
44       * Implementations of {@link Document} may see a significant performance
45       * enhancement if they ensure that the list of elements is the same list.
46       * (Identify check instead of {@link Object#equals(Object)}.
47       * </p>
48       * 
49       * @param elements
50       *            The sub elements of the document.
51       */
52      public void visit(List<Element> elements);
53  
54      /**
55       * Visits an array of elements.
56       * <p>
57       * The {@link ArrayElement} implementation ensures that the list of elements
58       * is always the same list. Visitors may use this fact to cache intermediate
59       * results.
60       * </p>
61       * 
62       * @param name
63       *            The name of the element.
64       * @param elements
65       *            The elements in the array.
66       */
67      public void visitArray(String name, List<Element> elements);
68  
69      /**
70       * Visits a binary element.
71       * 
72       * @param name
73       *            The name of the element.
74       * @param subType
75       *            The binary data sub type.
76       * @param data
77       *            The binary data.
78       */
79      public void visitBinary(String name, byte subType, byte[] data);
80  
81      /**
82       * Visits a boolean element.
83       * 
84       * @param name
85       *            The name of the element.
86       * @param value
87       *            The boolean value.
88       */
89      public void visitBoolean(String name, boolean value);
90  
91      /**
92       * Visits a deprecated DBPointer element.
93       * 
94       * @param name
95       *            The name of the element.
96       * @param databaseName
97       *            The name of the database containing the document.
98       * @param collectionName
99       *            The name of the collection containing the document.
100      * @param id
101      *            The id for the document.
102      */
103     public void visitDBPointer(String name, String databaseName,
104             String collectionName, ObjectId id);
105 
106     /**
107      * Visits a sub-document element.
108      * <p>
109      * The {@link DocumentElement} implementation ensures that the list of
110      * elements is always the same list. Visitors may use this fact to cache
111      * intermediate results.
112      * </p>
113      * 
114      * @param name
115      *            The name of the element.
116      * @param elements
117      *            The sub elements of the document.
118      */
119     public void visitDocument(String name, List<Element> elements);
120 
121     /**
122      * Visits a double element.
123      * 
124      * @param name
125      *            The name of the element.
126      * @param value
127      *            The double value.
128      */
129     public void visitDouble(String name, double value);
130 
131     /**
132      * Visits a integer (32-bit signed) element.
133      * 
134      * @param name
135      *            The name of the element.
136      * @param value
137      *            The integer value.
138      */
139     public void visitInteger(String name, int value);
140 
141     /**
142      * Visits a JavaScript element.
143      * 
144      * @param name
145      *            The name of the element.
146      * @param code
147      *            The java script code.
148      */
149     public void visitJavaScript(String name, String code);
150 
151     /**
152      * Visits a JavaScript with Scope element.
153      * 
154      * @param name
155      *            The name of the element.
156      * @param code
157      *            The java script code.
158      * @param scope
159      *            The scope for the JacaScript code.
160      */
161     public void visitJavaScript(String name, String code, Document scope);
162 
163     /**
164      * Visits a long (64-bit signed) element.
165      * 
166      * @param name
167      *            The name of the element.
168      * @param value
169      *            The long value.
170      */
171     public void visitLong(String name, long value);
172 
173     /**
174      * Visits a minimum key value element. Used as an absolute upper bounds.
175      * 
176      * @param name
177      *            The name of the element.
178      */
179     public void visitMaxKey(String name);
180 
181     /**
182      * Visits a minimum key value element. Used as an absolute lower bounds.
183      * 
184      * @param name
185      *            The name of the element.
186      */
187     public void visitMinKey(String name);
188 
189     /**
190      * Visits a MongoDB Timestamp element.
191      * 
192      * @param name
193      *            The name of the element.
194      * @param value
195      *            The mongoDB timstamp value.
196      */
197     public void visitMongoTimestamp(String name, long value);
198 
199     /**
200      * Visits a <code>null</code> valued element.
201      * 
202      * @param name
203      *            The name of the element.
204      */
205     public void visitNull(String name);
206 
207     /**
208      * Visits an ObjectId element.
209      * 
210      * @param name
211      *            The name of the element.
212      * @param id
213      *            The object id.
214      */
215     public void visitObjectId(String name, ObjectId id);
216 
217     /**
218      * Visits a regular expression element.
219      * 
220      * @param name
221      *            The name of the element.
222      * @param pattern
223      *            The pattern for the regular expression.
224      * @param options
225      *            The regular expression options. See the BSON specification for
226      *            details.
227      */
228     public void visitRegularExpression(String name, String pattern,
229             String options);
230 
231     /**
232      * Visits a string element.
233      * 
234      * @param name
235      *            The name of the element.
236      * @param value
237      *            The string value.
238      */
239     public void visitString(String name, String value);
240 
241     /**
242      * Visits a symbol element.
243      * 
244      * @param name
245      *            The name of the element.
246      * @param symbol
247      *            The symbol value.
248      */
249     public void visitSymbol(String name, String symbol);
250 
251     /**
252      * Visits a timestamp element. The timestamp is the number of milliseconds
253      * since the Unix epoch.
254      * 
255      * @param name
256      *            The name of the element.
257      * @param timestamp
258      *            The number of milliseconds since the Unix epoch.
259      */
260     public void visitTimestamp(String name, long timestamp);
261 }