User: mulder  
  Date: 00/07/03 17:10:06

  Added:       src/main/org/jboss/metadata/ejbjar EJBBean.java
                        EJBContainer.java EJBField.java EJBMethod.java
                        EJBPlugin.java EJBServer.java EJBXMLReader.java
  Log:
  Added new metadata classes to CVS.  Currently read-only (reads XML files
  written by EJX).  We plan to add GUI and write support for EJX.
  
  Revision  Changes    Path
  1.1                  jboss/src/main/org/jboss/metadata/ejbjar/EJBBean.java
  
  Index: EJBBean.java
  ===================================================================
  package org.jboss.metadata.ejbjar;
  
  import java.util.*;
  import org.jboss.metadata.*;
  import org.jboss.metadata.plugins.AbstractBean;
  
  public class EJBBean extends AbstractBean {
      public String description;
      public String displayName;
      public Class homeClass;
      public Class remoteClass;
      public Class implementationClass;
      public String persistanceType;
      public Class primaryKeyClass;
      public boolean reentrant;
  
      public EJBBean() {
          super();
          setContainerMetaData(new EJBContainer());
      }
  
      public MetaDataPlugin getManager() {
          return EJBPlugin.instance();
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/ejbjar/EJBContainer.java
  
  Index: EJBContainer.java
  ===================================================================
  package org.jboss.metadata.ejbjar;
  
  import java.util.*;
  import org.jboss.metadata.*;
  import org.jboss.metadata.plugins.AbstractContainer;
  
  public class EJBContainer extends AbstractContainer implements ContainerMetaData {
      public EJBContainer() {
      }
  
      public MetaDataPlugin getManager() {
          return EJBPlugin.instance();
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/ejbjar/EJBField.java
  
  Index: EJBField.java
  ===================================================================
  package org.jboss.metadata.ejbjar;
  
  import org.jboss.metadata.MetaDataPlugin;
  import org.jboss.metadata.plugins.*;
  
  public class EJBField extends AbstractField {
      public boolean isCMP;
  
      public EJBField() {
      }
  
      public MetaDataPlugin getManager() {
          return EJBPlugin.instance();
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/ejbjar/EJBMethod.java
  
  Index: EJBMethod.java
  ===================================================================
  package org.jboss.metadata.ejbjar;
  
  import org.jboss.metadata.*;
  import org.jboss.metadata.plugins.AbstractMethod;
  
  public class EJBMethod extends AbstractMethod {
      public static final byte TX_NOT_SUPPORTED  = 0;
      public static final byte TX_REQUIRED       = 1;
      public static final byte TX_SUPPORTS       = 2;
      public static final byte TX_REQUIRES_NEW   = 3;
      public static final byte TX_MANDATORY      = 4;
      public static final byte TX_NEVER          = 5;
  
      public byte transactionAttribute = TX_SUPPORTS;
  
      public EJBMethod() {
      }
  
      public MetaDataPlugin getManager() {
          return EJBPlugin.instance();
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/ejbjar/EJBPlugin.java
  
  Index: EJBPlugin.java
  ===================================================================
  package org.jboss.metadata.ejbjar;
  
  import org.jboss.metadata.MetaDataPlugin;
  import org.jboss.metadata.io.XMLReader;
  
  public class EJBPlugin implements MetaDataPlugin {
      private final static EJBPlugin instance = new EJBPlugin();
      public static EJBPlugin instance() {
          return instance;
      }
  
      private EJBPlugin() {}
  
      public Class getServerClass() {
          return EJBServer.class;
      }
  
      public Class getBeanClass() {
          return EJBBean.class;
      }
  
      public Class getContainerClass() {
          return EJBContainer.class;
      }
  
      public Class getMethodClass() {
          return EJBMethod.class;
      }
  
      public Class getFieldClass() {
          return EJBField.class;
      }
  
      public XMLReader getXMLReader() {
          return new EJBXMLReader();
      }
  
      public boolean equals(Object o) {
          return o instanceof EJBPlugin;
      }
  
      public int hashCode() {
          return getClass().hashCode();
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/ejbjar/EJBServer.java
  
  Index: EJBServer.java
  ===================================================================
  package org.jboss.metadata.ejbjar;
  
  import org.jboss.metadata.*;
  import org.jboss.metadata.plugins.*;
  
  public class EJBServer extends AbstractServer {
      static {
          MetaDataFactory.addPlugin(EJBPlugin.instance());
      }
  
      public EJBServer() {
      }
  
      public MetaDataPlugin getManager() {
          return EJBPlugin.instance();
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/ejbjar/EJBXMLReader.java
  
  Index: EJBXMLReader.java
  ===================================================================
  package org.jboss.metadata.ejbjar;
  
  import java.io.*;
  import java.util.*;
  
  import org.xml.sax.*;
  import com.sun.xml.parser.*;
  
  import org.jboss.metadata.io.XMLReader;
  import org.jboss.metadata.*;
  
  public class EJBXMLReader extends HandlerBase implements XMLReader {
      private EJBServer server = null;
      private EJBContainer container = null;
      private EJBBean bean = null;
      private MethodHolder method = null;
      private String currentElement;
      private String contents;
      private Vector methods = new Vector();
      private ClassLoader loader;
  
      public EJBXMLReader() {
      }
  
      public void setClassLoader(ClassLoader loader) {
          this.loader = loader;
      }
  
      public String getFileName() {
          return "ejb-jar.xml";
      }
  
      public ServerMetaData readXML(Reader input) throws IOException {
          com.sun.xml.parser.Parser parser = new com.sun.xml.parser.Parser();
          parser.setDocumentHandler(this);
          InputSource is = new InputSource(input);
          try {
              parser.parse(is);
          } catch(SAXException e) {
              e.printStackTrace();
              throw new IOException(e.getMessage());
          }
  
          return server;
      }
  
      public void startDocument() throws SAXException {
      }
  
      public void endDocument() throws SAXException {
      }
  
      public void startElement(String name, AttributeList atts) throws SAXException {
          currentElement = name;
          contents = null;
          if(name.equals("ejb-jar"))
              server = new EJBServer();
          else if(name.equals("entity") || name.equals("session")) {
              bean = new EJBBean();
              container = new EJBContainer();
          } else if(name.equals("method"))
              method = new MethodHolder();
          else if(name.equals("container-transaction"))
              methods.clear();
  
      }
  
      public void characters(char[] data, int start, int length) throws SAXException {
          if(contents == null)
              contents = new String(data, start, length);
          else
              contents += new String(data, start, length);
      }
  
      public void endElement(String name) throws SAXException {
          if(name.equals("entity") || name.equals("session")) {
              bean.setContainerMetaData(container);
              container = null;
              server.addBean(bean);
              bean = null;
          } else if(name.equals("ejb-name")) {
              if(bean != null)
                  bean.setName(contents);
              else if(method != null)
                  method.ejbName = contents;
              // otherwise, a container transaction bean reference
          } else if(name.equals("method")) {
              methods.add(method.method);
              if(method.isHome) {
                  try {
                      EJBBean bean = (EJBBean)server.getBean(method.ejbName);
                      bean.addHomeMethod(method.method);
                      method = null;
                  } catch(IllegalArgumentException e) {// a Home?
                      System.out.println("Couldn't find bean '"+method.ejbName+"' to 
add home method '"+method.method.getName()+"' to!");
                  }
              } else {
                  try {
                      EJBBean bean = (EJBBean)server.getBean(method.ejbName);
                      bean.addMethod(method.method);
                      method = null;
                  } catch(IllegalArgumentException e) {// a Home?
                      System.out.println("Couldn't find bean '"+method.ejbName+"' to 
add method '"+method.method.getName()+"' to!");
                  }
              }
          } else if(name.equals("description")) {
              if(bean != null)
                  bean.description = contents;
              // otherwise, a container transaction description
          } else if(name.equals("display-name"))
              bean.displayName = contents;
          else if(name.equals("home"))
              try {
                  bean.homeClass = loadClass(contents);
              } catch(ClassNotFoundException e) {
                  throw new SAXException("Unable to locate class '"+contents+"'");
              }
          else if(name.equals("remote"))
              try {
                  bean.remoteClass = loadClass(contents);
              } catch(ClassNotFoundException e) {
                  throw new SAXException("Unable to locate class '"+contents+"'");
              }
          else if(name.equals("ejb-class"))
              try {
                  bean.implementationClass = loadClass(contents);
              } catch(ClassNotFoundException e) {
                  throw new SAXException("Unable to locate class '"+contents+"'");
              }
          else if(name.equals("prim-key-class"))
              try {
                  if(MetaDataFactory.primitives.containsKey(contents))
                      bean.primaryKeyClass = 
(Class)MetaDataFactory.primitives.get(contents);
                  else
                      bean.primaryKeyClass = loadClass(contents);
              } catch(ClassNotFoundException e) {
                  throw new SAXException("Unable to locate class '"+contents+"'");
              }
          else if(name.equals("persistence-type"))
              bean.persistanceType = contents;
          else if(name.equals("reentrant"))
              bean.reentrant = new Boolean(contents).booleanValue();
          else if(name.equals("field-name")) {
              EJBField field = new EJBField();
              field.setName(contents);
              field.isCMP = true;
              bean.addField(field);
          } else if(name.equals("method-name"))
              method.method.setName(contents);
          else if(name.equals("method-param")) {
              LinkedList list = new 
LinkedList(Arrays.asList(method.method.getParameterTypes()));
              try {
                  if(MetaDataFactory.primitives.containsKey(contents))
                      list.add(MetaDataFactory.primitives.get(contents));
                  else
                      list.add(loadClass(contents));
                  method.method.setParameterTypes((Class[])list.toArray(new 
Class[list.size()]));
              } catch(ClassNotFoundException e) {
                  throw new SAXException("Unable to locate class '"+contents+"'");
              }
          } else if(name.equals("method-intf"))
              method.isHome = contents.equalsIgnoreCase("Home");
          else if(name.equals("trans-attribute")) {
              byte value;
              if(contents.equals("Required"))
                  value = EJBMethod.TX_REQUIRED;
              else if(contents.equals("RequiresNew"))
                  value = EJBMethod.TX_REQUIRES_NEW;
              else if(contents.equals("Supports"))
                  value = EJBMethod.TX_SUPPORTS;
              else if(contents.equals("Never"))
                  value = EJBMethod.TX_NEVER;
              else if(contents.equals("NotSupported"))
                  value = EJBMethod.TX_NOT_SUPPORTED;
              else if(contents.equals("Mandatory"))
                  value = EJBMethod.TX_MANDATORY;
              else throw new SAXException("Unknown transaction type '"+contents+"'");
              for(int i=0; i<methods.size(); i++)
                  ((EJBMethod)methods.get(i)).transactionAttribute = value;
          }
      }
  
      private Class loadClass(String name) throws ClassNotFoundException {
          if(loader == null)
              return Class.forName(name);
          else
              return loader.loadClass(name);
      }
  
      private class MethodHolder {
          EJBMethod method = new EJBMethod();
          String ejbName;
          boolean isHome;
      }
  }
  
  

Reply via email to