1/*
2 * Copyright (c) 2001-2004 World Wide Web Consortium, (Massachusetts Institute
3 * of Technology, Institut National de Recherche en Informatique et en
4 * Automatique, Keio University). All Rights Reserved. This program is
5 * distributed under the W3C's Software Intellectual Property License. This
6 * program is distributed in the hope that it will be useful, but WITHOUT ANY
7 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8 * FOR A PARTICULAR PURPOSE. See W3C License
9 * http://www.w3.org/Consortium/Legal/ for more details.
10 */
11
12package tests.org.w3c.dom;
13
14import javax.xml.parsers.DocumentBuilderFactory;
15
16/**
17 * This class is an parser setting, such as non-validating or entity-expanding.
18 *
19 * @author Curt Arnold @date 2 Feb 2002
20 */
21public final class DocumentBuilderSetting {
22  /**
23   * property name.
24   */
25  private final String property;
26
27  /**
28   *   property value.
29   */
30  private final boolean value;
31
32  /**
33   * strategy used to set or get property value.
34   */
35  private final DocumentBuilderSettingStrategy strategy;
36
37  /**
38   * coalescing = true.
39   */
40  public static final DocumentBuilderSetting coalescing =
41      new DocumentBuilderSetting(
42      "coalescing",
43      true,
44      DocumentBuilderSettingStrategy.coalescing);
45
46  /**
47   * coalescing = false.
48   */
49  public static final DocumentBuilderSetting notCoalescing =
50      new DocumentBuilderSetting(
51      "coalescing",
52      false,
53      DocumentBuilderSettingStrategy.coalescing);
54
55  /**
56   * expandEntityReferences = false.
57   */
58  public static final DocumentBuilderSetting expandEntityReferences =
59      new DocumentBuilderSetting(
60      "expandEntityReferences",
61      true,
62      DocumentBuilderSettingStrategy.expandEntityReferences);
63
64  /**
65   * expandEntityReferences = true.
66   */
67  public static final DocumentBuilderSetting notExpandEntityReferences =
68      new DocumentBuilderSetting(
69      "expandEntityReferences",
70      false,
71      DocumentBuilderSettingStrategy.expandEntityReferences);
72
73  /**
74   * ignoringElementContentWhitespace = true.
75   */
76  public static final DocumentBuilderSetting ignoringElementContentWhitespace =
77      new DocumentBuilderSetting(
78      "ignoringElementContentWhitespace",
79      true,
80      DocumentBuilderSettingStrategy.ignoringElementContentWhitespace);
81
82  /**
83   * ignoringElementContentWhitespace = false.
84   */
85  public static final DocumentBuilderSetting
86      notIgnoringElementContentWhitespace =
87      new DocumentBuilderSetting(
88      "ignoringElementContentWhitespace",
89      false,
90      DocumentBuilderSettingStrategy.ignoringElementContentWhitespace);
91
92  /**
93   * namespaceAware = true.
94   */
95  public static final DocumentBuilderSetting namespaceAware =
96      new DocumentBuilderSetting(
97      "namespaceAware",
98      true,
99      DocumentBuilderSettingStrategy.namespaceAware);
100
101  /**
102   * namespaceAware = false.
103   */
104  public static final DocumentBuilderSetting notNamespaceAware =
105      new DocumentBuilderSetting(
106      "namespaceAware",
107      false,
108      DocumentBuilderSettingStrategy.namespaceAware);
109
110  /**
111   * validating = true.
112   */
113  public static final DocumentBuilderSetting validating =
114      new DocumentBuilderSetting(
115      "validating",
116      true,
117      DocumentBuilderSettingStrategy.validating);
118
119  /**
120   * validating = false.
121   */
122  public static final DocumentBuilderSetting notValidating =
123      new DocumentBuilderSetting(
124      "validating",
125      false,
126      DocumentBuilderSettingStrategy.validating);
127
128  /**
129   * signed = true.
130   */
131  public static final DocumentBuilderSetting signed =
132      new DocumentBuilderSetting(
133      "signed",
134      true,
135      DocumentBuilderSettingStrategy.signed);
136
137  /**
138   * signed = false.
139   */
140  public static final DocumentBuilderSetting notSigned =
141      new DocumentBuilderSetting(
142      "signed",
143      false,
144      DocumentBuilderSettingStrategy.signed);
145
146  /**
147   * hasNullString = true.
148   */
149  public static final DocumentBuilderSetting hasNullString =
150      new DocumentBuilderSetting(
151      "hasNullString",
152      true,
153      DocumentBuilderSettingStrategy.hasNullString);
154
155  /**
156   * hasNullString = false.
157   */
158  public static final DocumentBuilderSetting notHasNullString =
159      new DocumentBuilderSetting(
160      "hasNullString",
161      false,
162      DocumentBuilderSettingStrategy.hasNullString);
163
164  /**
165   * Schema validating enabled.
166   */
167  public static final DocumentBuilderSetting schemaValidating =
168      new DocumentBuilderSetting(
169      "schemaValidating",
170      true,
171      DocumentBuilderSettingStrategy.schemaValidating);
172
173  /**
174   * Schema validating disabled.
175   */
176  public static final DocumentBuilderSetting notSchemaValidating =
177      new DocumentBuilderSetting(
178      "schemaValidating",
179      false,
180      DocumentBuilderSettingStrategy.schemaValidating);
181
182  /**
183   * Comments ignored.
184   */
185  public static final DocumentBuilderSetting ignoringComments =
186      new DocumentBuilderSetting(
187      "ignoringComments",
188      true,
189      DocumentBuilderSettingStrategy.ignoringComments);
190
191  /**
192   * Comments preserved.
193   */
194  public static final DocumentBuilderSetting notIgnoringComments =
195      new DocumentBuilderSetting(
196      "ignoringComments",
197      false,
198      DocumentBuilderSettingStrategy.ignoringComments);
199
200  /**
201   * Protected constructor, use static members for supported settings.
202   * @param property property name, follows JAXP.
203   * @param value property value
204   * @param strategy strategy, may not be null
205   */
206  protected DocumentBuilderSetting(
207      String property,
208      boolean value,
209      DocumentBuilderSettingStrategy strategy) {
210    if (property == null) {
211      throw new NullPointerException("property");
212    }
213    this.property = property;
214    this.value = value;
215    this.strategy = strategy;
216  }
217
218  /**
219   * Returns true if the settings have a conflict or are identical.
220   *
221   * @param other
222   *            other setting, may not be null.
223   * @return true if this setting and the specified setting conflict
224   */
225  public final boolean hasConflict(DocumentBuilderSetting other) {
226    if (other == null) {
227      throw new NullPointerException("other");
228    }
229    if (other == this) {
230      return true;
231    }
232    return strategy.hasConflict(other.strategy);
233  }
234
235  /**
236   * Determines current value of setting.
237   * @param factory DOMTestDocumentBuilderFactory factory
238   * @return boolean true if property enabled.
239   */
240  public final boolean hasSetting(DOMDocumentBuilderFactory factory) {
241    return strategy.hasSetting(factory) == value;
242 }
243
244  /**
245   * Attempts to change builder to have this setting.
246   * @param factory DocumentBuilderFactory Factory for DOM builders
247   * @throws DOMTestIncompatibleException
248   *      if factory does not support the setting
249   */
250  public final void applySetting(DocumentBuilderFactory factory)  {
251    strategy.applySetting(factory, value);
252  }
253
254  /**
255   * Gets the property name.
256   * @return property name
257   */
258  public final String getProperty() {
259    return property;
260  }
261
262  /**
263   * Gets the property value.
264   * @return property value
265   */
266  public final boolean getValue() {
267    return value;
268  }
269
270  /**
271   * Gets a string representation of the setting.
272   * @return string representation
273   */
274  public final String toString() {
275    StringBuffer builder = new StringBuffer(property);
276    builder.append('=');
277    builder.append(String.valueOf(value));
278    return builder.toString();
279  }
280
281}
282