View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.jxpath;
19  
20  /**
21   * The {@link JXPathContext#createPath JXPathContext.createPath()} method of JXPathContext can create missing objects as it traverses an XPath; it utilizes an
22   * AbstractFactory for that purpose. Install a factory on JXPathContext by calling {@link JXPathContext#setFactory JXPathContext. setFactory()}.
23   * <p>
24   * All methods of this class return false. Override any of them to return true to indicate that the factory has successfully created the described object.
25   * </p>
26   */
27  public abstract class AbstractFactory {
28  
29  
30      /**
31       * Constructs a new instance for subclasses.
32       */
33      public AbstractFactory() {
34          // empty
35      }
36  
37      /**
38       * The parameters may describe a collection element or an individual object. It is up to the factory to infer which one it is. If it is a collection, the
39       * factory should check if the collection exists. If not, it should create the collection. Then it should create the index'th element of the collection and
40       * return true.
41       *
42       * @param context can be used to evaluate other XPaths, get to variables etc.
43       * @param pointer describes the location of the node to be created
44       * @param parent  is the object that will serve as a parent of the new object
45       * @param name    is the name of the child of the parent that needs to be created. In the case of DOM may be qualified.
46       * @param index   is used if the pointer represents a collection element. You may need to expand or even create the collection to accommodate the new
47       *                element.
48       *
49       * @return true if the object was successfully created
50       */
51      public boolean createObject(final JXPathContext context, final Pointer pointer, final Object parent, final String name, final int index) {
52          return false;
53      }
54  
55      /**
56       * Declare the specified variable
57       *
58       * @param context hosts variable pools. See {@link JXPathContext#getVariables() JXPathContext.getVariables()}
59       * @param name    is the name of the variable without the "$" sign
60       * @return true if the variable was successfully defined
61       */
62      public boolean declareVariable(final JXPathContext context, final String name) {
63          return false;
64      }
65  }