Beans.java :  » Workflow-Engines » osbl-1_0 » org » conform » Java Open Source

Java Open Source » Workflow Engines » osbl 1_0 
osbl 1_0 » org » conform » Beans.java
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);
        }
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.