19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one
39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file
49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information
59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file
69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the  "License");
79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License.
89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at
99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software
139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and
169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License.
179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: DTMManager.java 468653 2006-10-28 07:07:05Z minchau $
209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xml.dtm;
229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.res.XMLErrorResources;
249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.res.XMLMessages;
259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.PrefixResolver;
269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.XMLStringFactory;
279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * A DTMManager instance can be used to create DTM and
309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * DTMIterator objects, and manage the DTM objects in the system.
319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>The system property that determines which Factory implementation
339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to create is named "org.apache.xml.utils.DTMFactory". This
349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * property names a concrete subclass of the DTMFactory abstract
359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *  class. If the property is not defined, a platform default is be used.</p>
369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>An instance of this class <emph>must</emph> be safe to use across
389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * thread instances.  It is expected that a client will create a single instance
399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * of a DTMManager to use across multiple threads.  This will allow sharing
409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * of DTMs across multiple processes.</p>
419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>Note: this class is incomplete right now.  It will be pretty much
439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * modeled after javax.xml.transform.TransformerFactory in terms of its
449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * factory support.</p>
459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>State: In progress!!</p>
479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic abstract class DTMManager
499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** The default property name to load the manager. */
529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private static final String defaultPropName =
539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    "org.apache.xml.dtm.DTMManager";
549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** The default class name to use as the manager. */
569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private static String defaultClassName =
579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    "org.apache.xml.dtm.ref.DTMManagerDefault";
589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Factory for creating XMLString objects.
619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *  %TBD% Make this set by the caller.
629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  protected XMLStringFactory m_xsf = null;
649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Default constructor is protected on purpose.
679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  protected DTMManager(){}
699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the XMLStringFactory used for the DTMs.
729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return a valid XMLStringFactory object, or null if it hasn't been set yet.
759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public XMLStringFactory getXMLStringFactory()
779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_xsf;
799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the XMLStringFactory used for the DTMs.
839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param xsf a valid XMLStringFactory object, should not be null.
869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setXMLStringFactory(XMLStringFactory xsf)
889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_xsf = xsf;
909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Obtain a new instance of a <code>DTMManager</code>.
949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * This static method creates a new factory instance
959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * This method uses the following ordered lookup procedure to determine
969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * the <code>DTMManager</code> implementation class to
979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * load:
989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <ul>
999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <li>
1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Use the <code>org.apache.xml.dtm.DTMManager</code> system
1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * property.
1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * </li>
1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <li>
1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Use the JAVA_HOME(the parent directory where jdk is
1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * installed)/lib/xalan.properties for a property file that contains the
1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * name of the implementation class keyed on the same value as the
1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * system property defined above.
1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * </li>
1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <li>
1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Use the Services API (as detailed in the JAR specification), if
1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * available, to determine the classname. The Services API will look
1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * for a classname in the file
1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <code>META-INF/services/org.apache.xml.dtm.DTMManager</code>
1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * in jars available to the runtime.
1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * </li>
1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <li>
1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Use the default <code>DTMManager</code> classname, which is
1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <code>org.apache.xml.dtm.ref.DTMManagerDefault</code>.
1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * </li>
1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * </ul>
1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Once an application has obtained a reference to a <code>
1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * DTMManager</code> it can use the factory to configure
1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * and obtain parser instances.
1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return new DTMManager instance, never null.
1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @throws DTMConfigurationException
1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * if the implementation is not available or cannot be instantiated.
1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public static DTMManager newInstance(XMLStringFactory xsf)
1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson           throws DTMConfigurationException
1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    DTMManager factoryImpl = null;
1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    try
1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      factoryImpl = (DTMManager) ObjectFactory
1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        .createObject(defaultPropName, defaultClassName);
1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    catch (ObjectFactory.ConfigurationError e)
1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      throw new DTMConfigurationException(XMLMessages.createXMLMessage(
1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        XMLErrorResources.ER_NO_DEFAULT_IMPL, null), e.getException());
1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        //"No default implementation found");
1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (factoryImpl == null)
1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      throw new DTMConfigurationException(XMLMessages.createXMLMessage(
1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        XMLErrorResources.ER_NO_DEFAULT_IMPL, null));
1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        //"No default implementation found");
1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    factoryImpl.setXMLStringFactory(xsf);
1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return factoryImpl;
1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get an instance of a DTM, loaded with the content from the
1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * specified source.  If the unique flag is true, a new instance will
1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * always be returned.  Otherwise it is up to the DTMManager to return a
1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * new instance or an instance that it already created and may be being used
1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * by someone else.
1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * (More parameters may eventually need to be added for error handling
1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * and entity resolution, and to better control selection of implementations.)
1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param source the specification of the source object, which may be null,
1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *               in which case it is assumed that node construction will take
1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *               by some other means.
1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param unique true if the returned DTM must be unique, probably because it
1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * is going to be mutated.
1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param whiteSpaceFilter Enables filtering of whitespace nodes, and may
1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *                         be null.
1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param incremental true if the DTM should be built incrementally, if
1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *                    possible.
1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param doIndexing true if the caller considers it worth it to use
1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *                   indexing schemes.
1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return a non-null DTM reference.
1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public abstract DTM getDTM(javax.xml.transform.Source source,
1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                             boolean unique, DTMWSFilter whiteSpaceFilter,
1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson                             boolean incremental, boolean doIndexing);
1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the instance of DTM that "owns" a node handle.
1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param nodeHandle the nodeHandle.
1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return a non-null DTM reference.
1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public abstract DTM getDTM(int nodeHandle);
1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Given a W3C DOM node, try and return a DTM handle.
1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Note: calling this may be non-optimal.
1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param node Non-null reference to a DOM node.
2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return a valid DTM handle.
2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public abstract int getDTMHandleFromNode(org.w3c.dom.Node node);
2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Creates a DTM representing an empty <code>DocumentFragment</code> object.
2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return a non-null DTM reference.
2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public abstract DTM createDocumentFragment();
2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Release a DTM either to a lru pool, or completely remove reference.
2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * DTMs without system IDs are always hard deleted.
2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * State: experimental.
2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param dtm The DTM to be released.
2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param shouldHardDelete True if the DTM should be removed no matter what.
2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return true if the DTM was removed, false if it was put back in a lru pool.
2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public abstract boolean release(DTM dtm, boolean shouldHardDelete);
2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Create a new <code>DTMIterator</code> based on an XPath
2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <a href="http://www.w3.org/TR/xpath#NT-LocationPath>LocationPath</a> or
2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * a <a href="http://www.w3.org/TR/xpath#NT-UnionExpr">UnionExpr</a>.
2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param xpathCompiler ??? Somehow we need to pass in a subpart of the
2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * expression.  I hate to do this with strings, since the larger expression
2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * has already been parsed.
2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param pos The position in the expression.
2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The newly created <code>DTMIterator</code>.
2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public abstract DTMIterator createDTMIterator(Object xpathCompiler,
2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          int pos);
2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Create a new <code>DTMIterator</code> based on an XPath
2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <a href="http://www.w3.org/TR/xpath#NT-LocationPath>LocationPath</a> or
2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * a <a href="http://www.w3.org/TR/xpath#NT-UnionExpr">UnionExpr</a>.
2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param xpathString Must be a valid string expressing a
2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <a href="http://www.w3.org/TR/xpath#NT-LocationPath>LocationPath</a> or
2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * a <a href="http://www.w3.org/TR/xpath#NT-UnionExpr">UnionExpr</a>.
2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param presolver An object that can resolve prefixes to namespace URLs.
2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The newly created <code>DTMIterator</code>.
2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public abstract DTMIterator createDTMIterator(String xpathString,
2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          PrefixResolver presolver);
2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Create a new <code>DTMIterator</code> based only on a whatToShow
2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * and a DTMFilter.  The traversal semantics are defined as the
2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * descendant access.
2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * <p>
2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Note that DTMIterators may not be an exact match to DOM
2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * NodeIterators. They are initialized and used in much the same way
2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * as a NodeIterator, but their response to document mutation is not
2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * currently defined.
2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param whatToShow This flag specifies which node types may appear in
2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *   the logical view of the tree presented by the iterator. See the
2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *   description of <code>NodeFilter</code> for the set of possible
2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *   <code>SHOW_</code> values.These flags can be combined using
2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *   <code>OR</code>.
2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param filter The <code>NodeFilter</code> to be used with this
2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *   <code>DTMFilter</code>, or <code>null</code> to indicate no filter.
2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param entityReferenceExpansion The value of this flag determines
2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *   whether entity reference nodes are expanded.
2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The newly created <code>DTMIterator</code>.
2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public abstract DTMIterator createDTMIterator(int whatToShow,
2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          DTMFilter filter, boolean entityReferenceExpansion);
2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Create a new <code>DTMIterator</code> that holds exactly one node.
2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param node The node handle that the DTMIterator will iterate to.
2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return The newly created <code>DTMIterator</code>.
2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public abstract DTMIterator createDTMIterator(int node);
2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /* Flag indicating whether an incremental transform is desired */
2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public boolean m_incremental = false;
2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /*
2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Flag set by FEATURE_SOURCE_LOCATION.
2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * This feature specifies whether the transformation phase should
2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * keep track of line and column numbers for the input source
2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * document.
2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public boolean m_source_location = false;
2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get a flag indicating whether an incremental transform is desired
3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return incremental boolean.
3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public boolean getIncremental()
3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_incremental;
3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set a flag indicating whether an incremental transform is desired
3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * This flag should have the same value as the FEATURE_INCREMENTAL feature
3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * which is set by the TransformerFactory.setAttribut() method before a
3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * DTMManager is created
3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param incremental boolean to use to set m_incremental.
3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setIncremental(boolean incremental)
3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_incremental = incremental;
3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get a flag indicating whether the transformation phase should
3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * keep track of line and column numbers for the input source
3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * document.
3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return source location boolean
3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public boolean getSource_location()
3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_source_location;
3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set a flag indicating whether the transformation phase should
3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * keep track of line and column numbers for the input source
3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * document.
3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * This flag should have the same value as the FEATURE_SOURCE_LOCATION feature
3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * which is set by the TransformerFactory.setAttribut() method before a
3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * DTMManager is created
3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param sourceLocation boolean to use to set m_source_location
3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setSource_location(boolean sourceLocation){
3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_source_location = sourceLocation;
3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  // -------------------- private methods --------------------
3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   /**
3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Temp debug code - this will be removed after we test everything
3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private static boolean debug;
3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  static
3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    try
3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      debug = System.getProperty("dtm.debug") != null;
3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    catch (SecurityException ex){}
3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** This value, set at compile time, controls how many bits of the
3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * DTM node identifier numbers are used to identify a node within a
3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * document, and thus sets the maximum number of nodes per
3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * document. The remaining bits are used to identify the DTM
3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * document which contains this node.
3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * If you change IDENT_DTM_NODE_BITS, be sure to rebuild _ALL_ the
3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * files which use it... including the IDKey testcases.
3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * (FuncGenerateKey currently uses the node identifier directly and
3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * thus is affected when this changes. The IDKEY results will still be
3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * _correct_ (presuming no other breakage), but simple equality
3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * comparison against the previous "golden" files will probably
3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * complain.)
3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * */
3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public static final int IDENT_DTM_NODE_BITS = 16;
3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** When this bitmask is ANDed with a DTM node handle number, the result
3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * is the low bits of the node's index number within that DTM. To obtain
3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * the high bits, add the DTM ID portion's offset as assigned in the DTM
3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Manager.
3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public static final int IDENT_NODE_DEFAULT = (1<<IDENT_DTM_NODE_BITS)-1;
3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** When this bitmask is ANDed with a DTM node handle number, the result
3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * is the DTM's document identity number.
3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public static final int IDENT_DTM_DEFAULT = ~IDENT_NODE_DEFAULT;
3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** This is the maximum number of DTMs available.  The highest DTM is
3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    * one less than this.
3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public static final int IDENT_MAX_DTMS = (IDENT_DTM_DEFAULT >>> IDENT_DTM_NODE_BITS) + 1;
3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * %TBD% Doc
4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * NEEDSDOC @param dtm
4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * NEEDSDOC ($objectName$) @return
4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public abstract int getDTMIdentity(DTM dtm);
4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * %TBD% Doc
4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * NEEDSDOC ($objectName$) @return
4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int getDTMIdentityMask()
4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return IDENT_DTM_DEFAULT;
4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * %TBD% Doc
4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * NEEDSDOC ($objectName$) @return
4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public int getNodeIdentityMask()
4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return IDENT_NODE_DEFAULT;
4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
431