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!");
}
}