1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (c) 2001-2004 World Wide Web Consortium,
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (Massachusetts Institute of Technology, Institut National de
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Recherche en Informatique et en Automatique, Keio University). All
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Rights Reserved. This program is distributed under the W3C's Software
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Intellectual Property License. This program is distributed in the
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * hope that it will be useful, but WITHOUT ANY WARRANTY; without even
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * PURPOSE.
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See W3C License http://www.w3.org/Consortium/Legal/ for more details.
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.w3c.domts;
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.InvocationTargetException;
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Method;
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashMap;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Map;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.DOMImplementation;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.Document;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *   This class implements the generic parser and configuation
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *   abstract class for the DOM L3 implementations
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *   @author Curt Arnold
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class LSDocumentBuilderFactory
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    extends DOMTestDocumentBuilderFactory {
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private final Object parser;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private final Method parseURIMethod;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private final DOMImplementation impl;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * Abstract class for a strategy to map a DocumentBuilderSetting
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * to an action on LSParser.
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private static abstract class LSStrategy {
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructor.
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected LSStrategy() {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Applies setting to LSParser
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param setting setting
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param parser parser
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws DOMTestIncompatibleException if parser does not support setting
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract void applySetting(DocumentBuilderSetting setting,
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                      Object parser) throws
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DOMTestIncompatibleException;
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets state of setting for parser
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param parser parser
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return state of setting
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean hasSetting(Object parser);
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * Represents a fixed setting, for example, all Java implementations
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * supported signed values.
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private static class LSFixedStrategy
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      extends LSStrategy {
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final boolean fixedValue;
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructor
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param settingName setting name
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param fixedValue fixed value
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public LSFixedStrategy(boolean fixedValue) {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      this.fixedValue = fixedValue;
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Apply setting.  Throws exception if requested setting
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * does not match fixed value.
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderSetting setting, Object parser) throws
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DOMTestIncompatibleException {
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      if (setting.getValue() != fixedValue) {
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throw new DOMTestIncompatibleException(null, setting);
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets fixed value for setting
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(Object parser) {
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return fixedValue;
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * A strategy for a setting that can be applied by setting a DOMConfiguration
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * parameter.
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private static class LSParameterStrategy
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      extends LSStrategy {
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final String lsParameter;
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final boolean inverse;
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructor
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param lsParameter corresponding DOMConfiguration parameter
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param inverse if true, DOMConfiguration value is the inverse
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of the setting value
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public LSParameterStrategy(String lsParameter, boolean inverse) {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      this.lsParameter = lsParameter;
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      this.inverse = inverse;
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected static void setParameter(DocumentBuilderSetting setting,
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                       Object parser,
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                       String parameter,
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                       Object value) throws
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DOMTestIncompatibleException {
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      try {
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Method domConfigMethod = parser.getClass().getMethod("getDomConfig",
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new Class[0]);
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object domConfig = domConfigMethod.invoke(parser, new Object[0]);
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Method setParameterMethod = domConfig.getClass().getMethod(
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            "setParameter", new Class[] {String.class, Object.class});
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setParameterMethod.invoke(domConfig, new Object[] {parameter, value});
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      catch (InvocationTargetException ex) {
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throw new DOMTestIncompatibleException(ex.getTargetException(), setting);
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      catch (Exception ex) {
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throw new DOMTestIncompatibleException(ex, setting);
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected static Object getParameter(Object parser,
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                         String parameter) throws Exception {
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Method domConfigMethod = parser.getClass().getMethod("getDomConfig",
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          new Class[0]);
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Object domConfig = domConfigMethod.invoke(parser, new Object[0]);
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Method getParameterMethod = domConfig.getClass().getMethod("getParameter",
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          new Class[] {String.class});
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return getParameterMethod.invoke(domConfig, new Object[] {parameter});
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Apply setting
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderSetting setting, Object parser) throws
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DOMTestIncompatibleException {
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      if (inverse) {
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setParameter(setting, parser, lsParameter,
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     new Boolean(!setting.getValue()));
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      else {
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setParameter(setting, parser, lsParameter, new Boolean(setting.getValue()));
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Get value of setting
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(Object parser) {
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      try {
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (inverse) {
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          return! ( (Boolean) getParameter(parser, lsParameter)).booleanValue();
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        else {
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          return ( (Boolean) getParameter(parser, lsParameter)).booleanValue();
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      catch (Exception ex) {
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return false;
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * A strategy for the validation settings which require
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * two DOMConfigurure parameters being set, 'validate' and 'schema-type'
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private static class LSValidateStrategy
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      extends LSParameterStrategy {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final String schemaType;
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructor
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param schemaType schema type
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public LSValidateStrategy(String schemaType) {
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      super("validate", false);
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      this.schemaType = schemaType;
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Apply setting
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderSetting setting, Object parser) throws
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DOMTestIncompatibleException {
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      super.applySetting(setting, parser);
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      setParameter(null, parser, "schema-type", schemaType);
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Get setting value
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(Object parser) {
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      if (super.hasSetting(parser)) {
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          String parserSchemaType = (String) getParameter(parser, "schema-type");
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          if (schemaType == null || schemaType.equals(parserSchemaType)) {
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return true;
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          }
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        catch (Exception ex) {
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return false;
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * Strategies for mapping DocumentBuilderSettings to
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * actions on LSParser
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private static final Map strategies;
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  static {
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    strategies = new HashMap();
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    strategies.put("coalescing", new LSParameterStrategy("cdata-sections", true));
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    strategies.put("expandEntityReferences", new LSParameterStrategy("entities", true));
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    strategies.put("ignoringElementContentWhitespace",
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   new LSParameterStrategy("element-content-whitespace", true));
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    strategies.put("namespaceAware", new LSParameterStrategy("namespaces", false));
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    strategies.put("validating",
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   new LSValidateStrategy("http://www.w3.org/TR/REC-xml"));
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    strategies.put("schemaValidating",
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   new LSValidateStrategy("http://www.w3.org/2001/XMLSchema"));
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    strategies.put("ignoringComments", new LSParameterStrategy("comments", true));
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    strategies.put("signed", new LSFixedStrategy(true));
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    strategies.put("hasNullString", new LSFixedStrategy(true));
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * Creates a LS implementation of DOMTestDocumentBuilderFactory.
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * @param settings array of settings, may be null.
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   * @throws DOMTestIncompatibleException
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *     Thrown if implementation does not support the specified settings
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public LSDocumentBuilderFactory(DocumentBuilderSetting[] settings) throws
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      DOMTestIncompatibleException {
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    super(settings);
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    try {
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Class domImplRegistryClass = Class.forName(
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          "org.w3c.dom.bootstrap.DOMImplementationRegistry");
27580279e21933dd29c8d353c1b66ede258660a0f3bElliott Hughes      Method newInstanceMethod = domImplRegistryClass.getMethod("newInstance", (Class<?>) null);
27680279e21933dd29c8d353c1b66ede258660a0f3bElliott Hughes      Object domRegistry = newInstanceMethod.invoke(null, (Class<?>) null);
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Method getDOMImplementationMethod = domImplRegistryClass.getMethod(
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          "getDOMImplementation", new Class[] {String.class});
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      impl = (DOMImplementation) getDOMImplementationMethod.invoke(domRegistry,
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          new Object[] {"LS"});
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      Method createLSParserMethod = impl.getClass().getMethod("createLSParser",
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          new Class[] {short.class, String.class});
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      parser = createLSParserMethod.invoke(impl,
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                           new Object[] {new Short( (short) 1), null});
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      parseURIMethod = parser.getClass().getMethod("parseURI",
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          new Class[] {String.class});
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    catch (InvocationTargetException ex) {
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      throw new DOMTestIncompatibleException(ex.getTargetException(), null);
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    catch (Exception ex) {
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      throw new DOMTestIncompatibleException(ex, null);
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    if (settings != null) {
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      for (int i = 0; i < settings.length; i++) {
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object strategy = strategies.get(settings[i].getProperty());
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (strategy == null) {
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          throw new DOMTestIncompatibleException(null, settings[i]);
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        else {
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          ( (LSStrategy) strategy).applySetting(settings[i], parser);
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *    Create new instance of document builder factory
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *    reflecting specified settings
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *    @param newSettings new settings
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *    @return New instance
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *    @throws DOMTestIncompatibleException
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *         if settings are not supported by implementation
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public DOMTestDocumentBuilderFactory newInstance(
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      DocumentBuilderSetting[] newSettings) throws DOMTestIncompatibleException {
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    if (newSettings == null) {
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return this;
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    DocumentBuilderSetting[] mergedSettings = mergeSettings(newSettings);
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return new LSDocumentBuilderFactory(mergedSettings);
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *    Loads specified URL
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *    @param url url to load
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *    @return DOM document
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *    @throws DOMTestLoadException if unable to load document
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public Document load(java.net.URL url) throws DOMTestLoadException {
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    try {
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return (Document) parseURIMethod.invoke(parser,
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                                              new Object[] {url.toString()});
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    catch (InvocationTargetException ex) {
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      throw new DOMTestLoadException(ex.getTargetException());
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    catch (Exception ex) {
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      throw new DOMTestLoadException(ex);
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *     Gets DOMImplementation
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *     @return DOM implementation, may be null
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public DOMImplementation getDOMImplementation() {
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return impl;
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   Determines if the implementation supports the specified feature
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   @param feature Feature
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   @param version Version
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   @return true if implementation supports the feature
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean hasFeature(String feature, String version) {
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return getDOMImplementation().hasFeature(feature, version);
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private boolean hasProperty(String parameter) {
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    try {
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return ( (Boolean) LSParameterStrategy.getParameter(parser, parameter)).
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          booleanValue();
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    catch (Exception ex) {
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return true;
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   Indicates whether the implementation combines text and cdata nodes.
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   @return true if coalescing
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean isCoalescing() {
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return!hasProperty("cdata-sections");
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   Indicates whether the implementation expands entity references.
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   @return true if expanding entity references
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean isExpandEntityReferences() {
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return!hasProperty("entities");
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   Indicates whether the implementation ignores
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *       element content whitespace.
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   @return true if ignoring element content whitespace
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean isIgnoringElementContentWhitespace() {
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return!hasProperty("element-content-whitespace");
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   Indicates whether the implementation is namespace aware.
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   @return true if namespace aware
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean isNamespaceAware() {
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return hasProperty("namespaces");
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  /**
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   Indicates whether the implementation is validating.
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   *   @return true if validating
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project   */
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean isValidating() {
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return hasProperty("validate");
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
415