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

  Added:       src/main/org/jboss/metadata/plugins AbstractBean.java
                        AbstractContainer.java AbstractField.java
                        AbstractMetaData.java AbstractMethod.java
                        AbstractServer.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/plugins/AbstractBean.java
  
  Index: AbstractBean.java
  ===================================================================
  package org.jboss.metadata.plugins;
  
  import java.util.*;
  import org.jboss.metadata.*;
  
  public abstract class AbstractBean extends AbstractMetaData implements BeanMetaData {
      private String name;
      private HashSet methods;
      private HashSet homeMethods;
      private HashSet fields;
      private ContainerMetaData container;
  
      public AbstractBean() {
          methods = new HashSet();
          homeMethods = new HashSet();
          fields = new HashSet();
          try {
              container = 
(ContainerMetaData)getManager().getContainerClass().newInstance();
          } catch(Exception e) {e.printStackTrace();}
      }
  
      public String getName() {
          return name;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      public ContainerMetaData getContainer() {
          return container;
      }
  
      public void setContainerMetaData(ContainerMetaData container) {
          this.container = container;
      }
  
      public Set getMethods() {
          return methods;
      }
  
      public Set getHomeMethods() {
          return homeMethods;
      }
  
      public Set getFields() {
          return fields;
      }
  
      public void addMethod(MethodMetaData method) {
          methods.add(method);
      }
  
      public void addHomeMethod(MethodMetaData method) {
          homeMethods.add(method);
      }
  
      public void addField(FieldMetaData field) {
          fields.add(field);
      }
  
      public MethodMetaData getMethod(String name, Class[] paramTypes) {
          Iterator it = methods.iterator();
          while(it.hasNext()) {
              MethodMetaData mmd = (MethodMetaData)it.next();
              if(mmd.getName().equals(name) && sameParams(paramTypes, 
mmd.getParameterTypes()))
                  return mmd;
          }
          throw new IllegalArgumentException("No such method!");
      }
  
      public MethodMetaData getHomeMethod(String name, Class[] paramTypes) {
          Iterator it = homeMethods.iterator();
          while(it.hasNext()) {
              MethodMetaData mmd = (MethodMetaData)it.next();
              if(mmd.getName().equals(name) && sameParams(paramTypes, 
mmd.getParameterTypes()))
                  return mmd;
          }
          throw new IllegalArgumentException("No such method!");
      }
  
      public FieldMetaData getField(String name) {
          Iterator it = fields.iterator();
          while(it.hasNext()) {
              FieldMetaData fmd = (FieldMetaData)it.next();
              if(fmd.getName().equals(name))
                  return fmd;
          }
          throw new IllegalArgumentException("No such field!");
      }
  
      private boolean sameParams(Class[] list1, Class[] list2) {
          if(list1.length != list2.length) return false;
          for(int i=0; i<list1.length; i++)
              if(!list1[i].equals(list2[i]))
                  return false;
          return true;
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/plugins/AbstractContainer.java
  
  Index: AbstractContainer.java
  ===================================================================
  package org.jboss.metadata.plugins;
  
  import org.jboss.metadata.*;
  import java.util.*;
  
  public abstract class AbstractContainer extends AbstractMetaData
          implements ContainerMetaData, Cloneable {
  
      public AbstractContainer() {
      }
  
      public Object clone() {
          try {
              return super.clone();
          } catch(CloneNotSupportedException e) {
              return null;
          }
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/plugins/AbstractField.java
  
  Index: AbstractField.java
  ===================================================================
  package org.jboss.metadata.plugins;
  
  import org.jboss.metadata.*;
  
  public abstract class AbstractField extends AbstractMetaData implements 
FieldMetaData {
      private String name;
  
      public AbstractField() {
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      public String getName() {
          return name;
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/plugins/AbstractMetaData.java
  
  Index: AbstractMetaData.java
  ===================================================================
  package org.jboss.metadata.plugins;
  
  import org.jboss.metadata.*;
  import java.lang.reflect.*;
  import java.util.*;
  
  public abstract class AbstractMetaData implements MetaData {
      private Field[] savedFields;
  
      public AbstractMetaData() {
      }
  
      public boolean hasProperty(String name) {
          try {
              getClass().getField(name);
              return true;
          } catch(NoSuchFieldException e) {}
          return false;
      }
  
      public Object getProperty(String name) {
          try {
              return getClass().getField(name).get(this);
          } catch(NoSuchFieldException e) {
          } catch(IllegalAccessException e) {
          }
          return null;
      }
  
      public void setProperty(String name, Object value) {
          try {
              getClass().getField(name).set(this, value);
          } catch(NoSuchFieldException e) {
              throw new IllegalArgumentException("No such field '"+name+"'");
          } catch(IllegalAccessException e) {
              throw new IllegalArgumentException("No such field '"+name+"'");
          }
      }
  
      public String[] getPropertyNames() {
          Vector list = new Vector();
          Field[] fields = getPublicNonStaticFields();
          for(int i=0; i<fields.length; list.addElement(fields[i++].getName()));
          return (String [])list.toArray(new String[list.size()]);
      }
  
      public void clear() {
          String[] list = getPropertyNames();
          for(int i=0; i<list.length; i++)
              remove(list[i]);
      }
  
      public boolean containsKey(Object key) {
          return key instanceof String && hasProperty((String)key);
      }
  
      public boolean containsValue(Object value) {
          Field[] fields = getPublicNonStaticFields();
          try {
              for(int i=0; i<fields.length; i++)
                  if(fields[i].get(this).equals(value))
                      return true;
          } catch(IllegalAccessException e) {
          }
          return false;
      }
  
      public Set entrySet() {
          HashSet set = new HashSet();
          Field[] fields = getPublicNonStaticFields();
          for(int i=0; i<fields.length; set.add(new FieldEntry(fields[i++])));
          return set;
      }
  
      public Object get(Object key) {
          if(!(key instanceof String))
              return null;
          return getProperty((String)key);
      }
  
      public boolean isEmpty() {
          return false;
      }
  
      public Set keySet() {
          HashSet set = new HashSet();
          Field[] fields = getPublicNonStaticFields();
          for(int i=0; i<fields.length; set.add(fields[i++].getName()));
          return set;
      }
  
      public Object put(Object key, Object value) {
          Object old = getProperty((String)key);
          setProperty((String)key, value);
          return old;
      }
  
      public void putAll(Map source) {
          Iterator it = source.keySet().iterator();
          while(it.hasNext()) {
              Object key = it.next();
              setProperty((String)key, source.get(key));
          }
      }
  
      public Object remove(Object key) {
          Object old = getProperty((String)key);
          setProperty((String)key, null);
          return old;
      }
  
      public int size() {
          return getPropertyNames().length;
      }
  
      public Collection values() {
          return new FieldCollection();
      }
  
      private Field[] getPublicNonStaticFields() {
          if(savedFields != null)
              return savedFields;
  
          Field[] fields = getClass().getFields();
          Vector list = new Vector();
          for(int i=0; i<fields.length; i++)
              if(Modifier.isPublic(fields[i].getModifiers()) &&
                 !Modifier.isStatic(fields[i].getModifiers()))
                  list.addElement(fields[i]);
          savedFields = (Field[])list.toArray(new Field[list.size()]);
          return savedFields;
      }
  
      class FieldEntry implements Map.Entry {
          Field field;
  
          FieldEntry(Field field) {
              this.field = field;
          }
  
          public Object setValue(Object o) {
              try {
                  Object old = field.get(AbstractMetaData.this);
                  field.set(AbstractMetaData.this, o);
                  return old;
              } catch(IllegalAccessException e) {
              }
              return null;
          }
  
          public Object getValue() {
              try {
                  return field.get(AbstractMetaData.this);
              } catch(IllegalAccessException e) {
              }
              return null;
          }
  
          public Object getKey() {
              return field.getName();
          }
      }
  
      class FieldCollection extends AbstractCollection {
          int i=0;
          public FieldCollection() {
              getPublicNonStaticFields();
          }
  
          public Iterator iterator() {
              final AbstractMetaData md = AbstractMetaData.this;
              return new Iterator() {
                  public boolean hasNext() {
                      return i < savedFields.length;
                  }
  
                  public Object next() {
                      try {
                          return savedFields[i++].get(md);
                      } catch(ArrayIndexOutOfBoundsException e) {
                          throw new NoSuchElementException();
                      } catch(IllegalAccessException e) {
                      }
                      return null;
                  }
  
                  public void remove() {
                      throw new UnsupportedOperationException();
                  }
              };
          }
  
          public int size() {
              return savedFields.length;
          }
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/plugins/AbstractMethod.java
  
  Index: AbstractMethod.java
  ===================================================================
  package org.jboss.metadata.plugins;
  
  import java.util.*;
  import org.jboss.metadata.*;
  
  public abstract class AbstractMethod extends AbstractMetaData implements 
MethodMetaData {
      private String name;
      private Class[] paramTypes;
  
      public AbstractMethod() {
          paramTypes = new Class[0];
      }
  
      public String getName() {
          return name;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      public Class[] getParameterTypes() {
          return paramTypes;
      }
  
      public void setParameterTypes(Class[] paramTypes) {
          this.paramTypes = paramTypes;
      }
  }
  
  
  1.1                  jboss/src/main/org/jboss/metadata/plugins/AbstractServer.java
  
  Index: AbstractServer.java
  ===================================================================
  package org.jboss.metadata.plugins;
  
  import org.jboss.metadata.*;
  import java.util.*;
  
  public abstract class AbstractServer extends AbstractMetaData implements 
ServerMetaData {
      private HashSet beans;
  
      public AbstractServer() {
          beans = new HashSet();
      }
  
      public Set getBeans() {
          return beans;
      }
  
      public void addBean(BeanMetaData bean) {
          beans.add(bean);
      }
  
      public BeanMetaData getBean(String name) {
          Iterator it = beans.iterator();
          while(it.hasNext()) {
              BeanMetaData bmd = (BeanMetaData)it.next();
              if(bmd.getName().equals(name))
                  return bmd;
          }
          throw new IllegalArgumentException("No such bean!");
      }
  }
  
  

Reply via email to