Coverage Report - com.allanbank.mongodb.bson.Visitor
 
Classes in this File Line Coverage Branch Coverage Complexity
Visitor
N/A
N/A
1
 
 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  
 }