package org.jfox.ejb.meta;

import java.io.IOException;
import java.io.InputStream;

import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

/**
 * @author <a href="mailto:yangyong@ufsoft.com.cn">Young Yang</a>
 */

public class EJBEntityResolver implements EntityResolver {
  private static String ejb_11 = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN"; //"ejb-jar.dtd");
  private static String ejb_12 = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.2//EN"; //"ejb-jar.dtd");
  private static String ejb_2x = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"; //"ejb-jar_2_0.dtd");

  private static String ejb_1x_dtd = "ejb-jar.dtd";
  private static String ejb_2x_dtd = "ejb-jar_2_0.dtd";

  public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
    String dtd = null;
    if (publicId.equals(ejb_11) || publicId.equals(ejb_12)) {
      dtd = ejb_1x_dtd;
    }
    else if (publicId.equals(ejb_2x)) {
      dtd = ejb_2x_dtd;
    }
    if (dtd != null) {
      try {
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        // The DTDs are expected to be in the current package
        String dtdResource = this.getClass().getPackage().getName().replace('.','/') + "/" + dtd;
        InputStream dtdStream = loader.getResourceAsStream(dtdResource);
        InputSource inputSource = new InputSource(dtdStream);
        return inputSource;
      }
      catch (Exception ignore) {
        ignore.printStackTrace();
      }
    }
    return null;

  }

  public static void main(String[] args) {

  }
}