Package org.pdfsam.emp4j.messages.sources

Source Code of org.pdfsam.emp4j.messages.sources.XmlMessagesSource

/*
* Created on 21-June-2006
* Copyright (C) 2006 by Andrea Vacondio.
*
*
* This library is provided under dual licenses.
* You may choose the terms of the Lesser General Public License version 2.1 or the General Public License version 2
* License at your discretion.
*
*
* This library 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 2.1 of the License.
*
* This library 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.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*
*
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation;
* either version 2 of the License.
*
* 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 General Public License for more details.
* You should have received a copy of the GNU General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
*  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.pdfsam.emp4j.messages.sources;

import java.io.File;
import java.net.URL;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.pdfsam.emp4j.messages.interfaces.AbstractMessagesSource;
import org.w3c.dom.DOMException;

/**
* Implementation of the MessageSourceInterface. It gets exception messages from an xml source
* @author Andrea Vacondio
*/
public class XmlMessagesSource extends AbstractMessagesSource {

  private static final long serialVersionUID = -5549563695772599153L;
  private transient Document document;

  public XmlMessagesSource(Node node) throws Exception {
    super(node);
    Node arg1 = node.selectSingleNode("xmlsource/@filename");
    if (arg1 != null) {
      document = getDocument(arg1.getText());
    } else {
      throw new DOMException(DOMException.NOT_FOUND_ERR, "Error reading configuration node, node is null.");
    }
  }

  /**
   * This method tries to get the Document containing the exception messages. First it tries using
   * <code>filename</code> as a path to file. Second it tries to use it as Resource name or a SystemResource name.
   * @param filename
   * @return the Document object
   * @throws Exception
   */
  private Document getDocument(String filename) throws Exception {
    Document retVal;
    SAXReader reader = new SAXReader();
    File resourceFile = new File(filename);
    if (resourceFile.exists()) {
      retVal = reader.read(resourceFile);
    } else {
      ClassLoader cl = XmlMessagesSource.class.getClassLoader();
      URL resourceUrl = null;
      if (cl != null) {
        resourceUrl = cl.getResource(filename);
      } else {
        resourceUrl = ClassLoader.getSystemResource(filename);
      }
      if (resourceUrl != null) {
        retVal = reader.read(resourceUrl);
      } else {
        throw new NullPointerException("Cannot locate XmlMessageSource data file.");
      }
    }
    return retVal;
  }

  public String getLocalizedExceptionMessage(Object exceptionTypeKey, int exceptionErrorCode) throws Exception {
    return getExceptionMessage(exceptionTypeKey, exceptionErrorCode);
  }

  public String getExceptionMessage(Object exceptionTypeKey, int exceptionErrorCode) throws Exception {
    StringBuffer sb = new StringBuffer();
    sb.append(getTypeDescription(exceptionTypeKey.toString()));
    sb.append(padString(Integer.toString(exceptionErrorCode), 3, '0', true));
    sb.append(" - ");
    Node node = document.selectSingleNode("/exception-types/type[@key=\"" + exceptionTypeKey.toString() + "\"]/exception[@errorcode=\""
        + exceptionErrorCode + "\"]/@message");
    if (node != null) {
      sb.append(node.getText());
    }
    return sb.toString();
  }

  /**
   * @param exceptionTypeKey
   *        the given exception type key
   * @return the associated description
   * @throws Exception
   */
  private String getTypeDescription(String exceptionTypeKey) throws Exception {
    String retVal = "UNK";
    Node node = document.selectSingleNode("/exception-types/type[@key=\"" + exceptionTypeKey + "\"]/@description");
    if (node != null) {
      retVal = node.getText();
    }
    return retVal;
  }

  /**
   * Given a string s, length n it fills with char c till length n
   * @param s
   *        input String
   * @param n
   *        output string length
   * @param c
   *        char
   * @param paddingLeft
   *        if <code>true</code> chars are added to the left.
   */
  private String padString(String s, int n, char c, boolean paddingLeft) {
    StringBuffer str = new StringBuffer(s);
    int strLength = str.length();
    if (n > 0 && n > strLength) {
      for (int i = 0; i <= n; i++) {
        if (paddingLeft) {
          if (i < n - strLength) {
            str.insert(0, c);
          }
        } else {
          if (i > strLength) {
            str.append(c);
          }
        }
      }
    }
    return str.toString();
  }
}
TOP

Related Classes of org.pdfsam.emp4j.messages.sources.XmlMessagesSource

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.