package org.conform;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.util.*;
public class Beans implements Serializable, Cloneable, BeanMetaProvider
{
private Map beansMap = new HashMap();
public Collection getBeans() {
return beansMap.values();
}
public void setBeans(Collection beans) {
beansMap.clear();
for (Iterator iterator = beans.iterator(); iterator.hasNext();) {
BeanMeta bean = (BeanMeta)iterator.next();
beansMap.put(bean.getName(), bean);
}
}
public void addBeanMeta(BeanMeta bean) {
beansMap.put(bean.getName(), bean);
}
public void removeBeanMeta(BeanMeta bean) {
beansMap.remove(bean.getName());
}
public BeanMeta getBeanMeta(Class type) {
if (type == null)
return null;
BeanMeta bean = (BeanMeta)beansMap.get(type.getName());
if (bean == null) {
bean = new BeanMeta(type);
addBeanMeta(bean);
return bean;
}
return bean;
}
public void clearCache() {
beansMap.clear();
}
public boolean containsBeanMeta(Class type) {
if (type == null)
return false;
if (beansMap.containsKey(type.getName()))
return true;
return false;
}
public boolean containsBeanMeta(String name) {
if (name == null)
return false;
if (beansMap.containsKey(name))
return true;
return false;
}
public Beans copy() {
byte[] bytes = org.apache.commons.lang.SerializationUtils.serialize(this);
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
try {
ObjectInputStream oin = new ObjectInputStream(in);
return (Beans)oin.readObject();
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
public Object clone() {
try {
Map map = new HashMap();
Beans beans = (Beans)super.clone();
for (Iterator iterator = beansMap.values().iterator(); iterator.hasNext();) {
BeanMeta beanMeta = (BeanMeta)iterator.next();
BeanMeta clone = (BeanMeta) beanMeta.clone();
map.put(clone.getName(), clone);
for (int i = 0; i < clone.getProperties().length; i++) {
PropertyMeta property = (PropertyMeta)clone.getProperties()[i];
BeanMeta relationBean = property.getRelationBean();
PropertyMeta relationProperty = property.getRelationProperty();
if (relationBean != null) {
relationBean = (BeanMeta)map.get(relationBean.getName());
property.setRelationBean(relationBean);
property.setRelationProperty(relationBean.getProperty(relationProperty.getName()));
}
}
}
beans.beansMap = map;
return beans;
}
catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
}
|