content: /**
   * Copyright 2000-2006 DFKI GmbH.
   * All Rights Reserved.  Use is subject to license terms.
   * <p/>
   * This file is part of MARY TTS.
   * <p/>
   * MARY TTS is free software: you can redistribute it and/or modify
   * it under the terms of the GNU Lesser General Public License as published by
   * the Free Software Foundation, version 3 of the License.
   * <p/>
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU Lesser General Public License for more details.
   * <p/>
   * You should have received a copy of the GNU Lesser General Public License
   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
   */
  package marytts.datatypes;
  
  // Log4j classes
  
  import android.util.Log;
  
  import mf.javax.xml.parsers.DocumentBuilder;
  import mf.javax.xml.parsers.DocumentBuilderFactory;
  import mf.javax.xml.parsers.ParserConfigurationException;
  import mf.org.w3c.dom.Document;
  import mf.org.w3c.dom.Element;
  import mf.org.w3c.dom.Node;
  
  //import org.apache.log4j.Logger;
  
  
  /**
   * Class containing only static methods. All knowledge about MaryXML documents
   * is grouped here.
   */
  
  public class MaryXML {
      public static final String MARYXML = "maryxml";
      public static final String PARAGRAPH = "p";
      public static final String SENTENCE = "s";
      public static final String VOICE = "voice";
      public static final String PHRASE = "phrase";
      public static final String MARK = "mark";
      public static final String SAYAS = "say-as";
      public static final String PHONOLOGY = "phonology";
      public static final String PROSODY = "prosody";
      public static final String AUDIO = "audio";
      public static final String BOUNDARY = "boundary";
      public static final String MTU = "mtu";
      public static final String TOKEN = "t";
      public static final String SYLLABLE = "syllable";
      public static final String PHONE = "ph";
      //public static final String NONVERBAL = "nvv";
      public static final String NONVERBAL = "vocalization";
  
      private static String version = "0.5";
      private static String namespace = "http://mary.dfki.de/2002/MaryXML";
  
  
      private static DocumentBuilder docBuilder = null;
  
  
      // Static constructor:
      static {
          try {
              DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
              factory.setExpandEntityReferences(true);
              factory.setNamespaceAware(true);
              docBuilder = factory.newDocumentBuilder();
          } catch (ParserConfigurationException e) {
              Log.w("Cannot start up XML parser", e);
          }
      }
  
      public static String getVersion() {
          return version;
      }
  
      public static String getNamespace() {
          return namespace;
      }
  
      public static String getRootTagname() {
          return MARYXML;
      }
  
      public static Document newDocument() {
          Document doc = docBuilder.getDOMImplementation().
                  createDocument(getNamespace(), getRootTagname(), null);
          Element root = doc.getDocumentElement();
          root.setAttribute("version", getVersion());
          root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
          return doc;
      }
  
      /**
       * In the given MaryXML document, create a new element of the given name,
       * with the proper namespace.
       *
       * @param doc         a MaryXML document
       * @param elementName the name of the MaryXML document
       * @return the newly created MaryXML element.
       * @throws IllegalArgumentException if the document is not a maryxml document
       *                                  with the proper namespace.
       */
      public static Element createElement(Document doc, String elementName) {
          if (doc == null)
              throw new NullPointerException("Received null document");
          if (!doc.getDocumentElement().getTagName().equals(getRootTagname()))
              throw new IllegalArgumentException("Not a maryxml document: "
                      + doc.getDocumentElement().getTagName());
          if (doc.getDocumentElement().getNamespaceURI() == null) {
              throw new IllegalArgumentException("Document has no namespace!");
          }
          if (!doc.getDocumentElement().getNamespaceURI().equals(getNamespace()))
              throw new IllegalArgumentException("Document has wrong namespace: "
                      + doc.getDocumentElement().getNamespaceURI());
          return doc.createElementNS(getNamespace(), elementName);
      }
  
      public static Element appendChildElement(Node node, String childName) {
          if (node == null)
              throw new NullPointerException("Received null node");
          return (Element) node.appendChild(createElement(node.getOwnerDocument(), childName));
      }
  
  }
  
  