1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (c) 2001-2004 World Wide Web Consortium, (Massachusetts Institute of
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Technology, Institut National de Recherche en Informatique et en
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Automatique, Keio University). All Rights Reserved. This program is
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the W3C's Software Intellectual Property License. This
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * program is distributed in the hope that it will be useful, but WITHOUT ANY
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FOR A PARTICULAR PURPOSE. See W3C License
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.w3.org/Consortium/Legal/ for more details.
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.w3c.domts;
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Method;
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.xml.parsers.DocumentBuilderFactory;
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class is a strategy that provides the mapping from an abstract setting
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (such as DocumentBuilderSetting.validating) to a specific DOM implementation
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @author Curt Arnold @date 2 Feb 2002
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class DocumentBuilderSettingStrategy {
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  protected DocumentBuilderSettingStrategy() {
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private static final String JAXP_SCHEMA_LANGUAGE =
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  private static final String W3C_XML_SCHEMA =
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      "http://www.w3.org/2001/XMLSchema";
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public boolean hasConflict(DocumentBuilderSettingStrategy other) {
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    return (other == this);
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  }
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public abstract void applySetting(
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      DocumentBuilderFactory factory,
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      boolean value) throws DOMTestIncompatibleException;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public abstract boolean hasSetting(DOMTestDocumentBuilderFactory factory);
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public static final DocumentBuilderSettingStrategy coalescing =
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      new DocumentBuilderSettingStrategy() {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderFactory factory, boolean value)
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws DOMTestIncompatibleException {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      factory.setCoalescing(value);
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return factory.isCoalescing();
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  };
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public static final DocumentBuilderSettingStrategy
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      expandEntityReferences =
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      new DocumentBuilderSettingStrategy() {
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderFactory factory, boolean value)
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws DOMTestIncompatibleException {
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      factory.setExpandEntityReferences(value);
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return factory.isExpandEntityReferences();
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  };
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public static final DocumentBuilderSettingStrategy
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      ignoringElementContentWhitespace =
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      new DocumentBuilderSettingStrategy() {
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderFactory factory, boolean value)
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws DOMTestIncompatibleException {
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      factory.setIgnoringElementContentWhitespace(value);
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return factory.isIgnoringElementContentWhitespace();
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  };
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public static final DocumentBuilderSettingStrategy ignoringComments =
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      new DocumentBuilderSettingStrategy() {
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderFactory factory, boolean value)
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws DOMTestIncompatibleException {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      if (value) {
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throw new DOMTestIncompatibleException(
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new Exception("ignoreComments=true not supported"),
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            DocumentBuilderSetting.ignoringComments);
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return false;
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  };
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public static final DocumentBuilderSettingStrategy namespaceAware =
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      new DocumentBuilderSettingStrategy() {
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderFactory factory, boolean value) throws
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DOMTestIncompatibleException {
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      factory.setNamespaceAware(value);
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return factory.isNamespaceAware();
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  };
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public static final DocumentBuilderSettingStrategy validating =
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      new DocumentBuilderSettingStrategy() {
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderFactory factory, boolean value) throws
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DOMTestIncompatibleException {
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      factory.setValidating(value);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return factory.isValidating();
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  };
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public static final DocumentBuilderSettingStrategy signed =
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      new DocumentBuilderSettingStrategy() {
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderFactory factory, boolean value) throws
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DOMTestIncompatibleException {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      if (!value) {
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throw new DOMTestIncompatibleException(
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            null,
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            DocumentBuilderSetting.notSigned);
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return true;
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  };
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public static final DocumentBuilderSettingStrategy hasNullString =
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      new DocumentBuilderSettingStrategy() {
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderFactory factory, boolean value) throws
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DOMTestIncompatibleException {
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      if (!value) {
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throw new DOMTestIncompatibleException(
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            null,
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            DocumentBuilderSetting.notHasNullString);
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return true;
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  };
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  public static final DocumentBuilderSettingStrategy schemaValidating =
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      new DocumentBuilderSettingStrategy() {
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void applySetting(DocumentBuilderFactory factory, boolean value) throws
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DOMTestIncompatibleException {
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      if (value) {
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setNamespaceAware(true);
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setValidating(true);
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      else {
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setAttribute(JAXP_SCHEMA_LANGUAGE,
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                             "http://www.w3.org/TR/REC-xml");
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasSetting(DOMTestDocumentBuilderFactory factory) {
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      try {
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (factory.isValidating()) {
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          Method getAttrMethod = factory.getClass().getMethod("getAttribute",
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project              new Class[] {String.class});
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          String val = (String) getAttrMethod.invoke(factory,
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project              new Object[] {JAXP_SCHEMA_LANGUAGE});
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          return W3C_XML_SCHEMA.equals(val);
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      catch (Exception ex) {
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return false;
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //   schema validating conflicts with namespaceAware
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //        and validating
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    //
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean hasConflict(DocumentBuilderSettingStrategy other) {
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      if (other == this ||
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          other == DocumentBuilderSettingStrategy.namespaceAware ||
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project          other == DocumentBuilderSettingStrategy.validating) {
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return true;
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      }
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      return false;
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project  };
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
200