Package ivory.core.util

Source Code of ivory.core.util.XMLTools

/*
* Ivory: A Hadoop toolkit for Web-scale information retrieval
*
* Licensed under the Apache License, Version 2.0 (the "License"); you
* may not use this file except in compliance with the License. You may
* obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/

package ivory.core.util;


import ivory.core.exception.ConfigurationException;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Attr;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;


/**
* @author Don Metzler
*
*/
public class XMLTools {

  /**
   * @param node
   * @param name
   * @param defaultValue
   */
  public static boolean getAttributeValue(Node node, String name, boolean defaultValue) {
    String value = getAttributeValue(node, name, null);
    if (value == null) {
      setAttributeValue(node, name, defaultValue + "");
      return defaultValue;
    }
    return Boolean.parseBoolean(value);
  }

  /**
   * @param node
   * @param name
   * @param defaultValue
   */
  public static float getAttributeValue(Node node, String name, float defaultValue) {
    String value = getAttributeValue(node, name, null);
    if (value == null) {
      setAttributeValue(node, name, defaultValue + "");
      return defaultValue;
    }
    return Float.parseFloat(value);
  }
 
  /**
   * @param node
   * @param name
   * @param defaultValue
   */
  public static int getAttributeValue(Node node, String name, int defaultValue) {
    String value = getAttributeValue(node, name, null);
    if (value == null) {
      setAttributeValue(node, name, defaultValue + "");
      return defaultValue;
    }
    return Integer.parseInt(value);
  }

  public static String getAttributeValue(Node node, String name) {
    if (node == null || !node.hasAttributes()) {
      return null;
    }

    NamedNodeMap attributes = node.getAttributes();
    if (attributes.getNamedItem(name) == null) {
      return null;
    }

    return attributes.getNamedItem(name).getNodeValue();
  }

  /**
   * Returns the value of an attribute, and if the attribute is not found, throws an
   * ConfigurationException with the specified message.
   */
  public static String getAttributeValueOrThrowException(Node node, String name, String errMsg)
      throws ConfigurationException {
    if (node == null || !node.hasAttributes()) {
      throw new ConfigurationException(errMsg);
    }

    NamedNodeMap attributes = node.getAttributes();
    if (attributes.getNamedItem(name) == null) {
      throw new ConfigurationException(errMsg);
    }

    return attributes.getNamedItem(name).getNodeValue();
  }

  /**
   * @param node
   * @param name
   * @param defaultValue
   */
  public static String getAttributeValue(Node node, String name, String defaultValue) {
    if (node == null || !node.hasAttributes()) {
      return defaultValue;
    }

    NamedNodeMap attributes = node.getAttributes();
    if (attributes.getNamedItem(name) == null) {
      setAttributeValue(node, name, defaultValue);
      return defaultValue;
    }

    return attributes.getNamedItem(name).getNodeValue();
  }

  public static String getStringAttributeValue(Node node, String name) {
    return getAttributeValue(node, name, null)}
 
  /**
   * @param node
   * @param name
   * @param value
   */
  public static synchronized void setAttributeValue(Node node, String name, String value) {
    NamedNodeMap attributes = node.getAttributes();
    Attr a = node.getOwnerDocument().createAttribute(name);
    a.setValue(value);
    attributes.setNamedItem(a);
  }

  // Pretty-prints a DOM document to XML using DOM Load and Save's
  // LSSerializer. Note that the "format-pretty-print" DOM configuration
  // parameter can only be set in JDK 1.6+.
  public static String format(String xml) {
    return format(parseXMLString(xml));
  }
 
  public static String format(Document doc) {
    DOMImplementation domImplementation = doc.getImplementation();

    if (domImplementation.hasFeature("LS", "3.0")
        && domImplementation.hasFeature("Core", "2.0")) {
      DOMImplementationLS domImplementationLS = (DOMImplementationLS) domImplementation
          .getFeature("LS", "3.0");
      LSSerializer lsSerializer = domImplementationLS.createLSSerializer();
      DOMConfiguration domConfiguration = lsSerializer.getDomConfig();
      if (domConfiguration.canSetParameter("format-pretty-print", Boolean.TRUE)) {
        lsSerializer.getDomConfig().setParameter("format-pretty-print", Boolean.TRUE);
        LSOutput lsOutput = domImplementationLS.createLSOutput();
        lsOutput.setEncoding("UTF-8");
        StringWriter stringWriter = new StringWriter();
        lsOutput.setCharacterStream(stringWriter);
        lsSerializer.write(doc, lsOutput);
        return stringWriter.toString();
      } else {
        throw new RuntimeException(
            "DOMConfiguration 'format-pretty-print' parameter isn't settable.");
      }
    } else {
      throw new RuntimeException("DOM 3.0 LS and/or DOM 2.0 Core not supported.");
    }
  }

  private static Document parseXMLString(String in) {
    try {
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
      InputSource is = new InputSource(new StringReader(in));
      return db.parse(is);
    } catch (ParserConfigurationException e) {
      throw new RuntimeException(e);
    } catch (SAXException e) {
      throw new RuntimeException(e);
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }

}
TOP

Related Classes of ivory.core.util.XMLTools

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.