FactoryAttributes.java :  » Science » logisim-2.3.4 » com » cburch » logisim » tools » Java Open Source

Java Open Source » Science » logisim 2.3.4 
logisim 2.3.4 » com » cburch » logisim » tools » FactoryAttributes.java
/* Copyright (c) 2006, 2010, Carl Burch. License information is located in the
 * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */
 
package com.cburch.logisim.tools;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.cburch.logisim.comp.ComponentFactory;
import com.cburch.logisim.data.Attribute;
import com.cburch.logisim.data.AttributeEvent;
import com.cburch.logisim.data.AttributeListener;
import com.cburch.logisim.data.AttributeSet;
import com.cburch.logisim.data.AttributeSets;

class FactoryAttributes implements AttributeSet, AttributeListener, Cloneable {
    private Class descBase;
    private FactoryDescription desc;
    private ComponentFactory factory;
    private AttributeSet baseAttrs;
    private ArrayList listeners;
    
    public FactoryAttributes(Class descBase, FactoryDescription desc) {
        this.descBase = descBase;
        this.desc = desc;
        this.factory = null;
        this.baseAttrs = null;
        this.listeners = new ArrayList();
    }
    
    public FactoryAttributes(ComponentFactory factory) {
        this.descBase = null;
        this.desc = null;
        this.factory = factory;
        this.baseAttrs = null;
        this.listeners = new ArrayList();
    }
    
    private AttributeSet getBase() {
        AttributeSet ret = baseAttrs;
        if(ret == null) {
            ComponentFactory fact = factory;
            if(fact == null) {
                fact = desc.getFactory(descBase);
                factory = fact;
            }
            if(fact == null) {
                ret = AttributeSets.EMPTY;
            } else {
                ret = fact.createAttributeSet();
                ret.addAttributeListener(this);
            }
            baseAttrs = ret;
        }
        return ret;
    }

    public void addAttributeListener(AttributeListener l) {
        listeners.add(l);
    }

    public void removeAttributeListener(AttributeListener l) {
        listeners.remove(l);
    }
    
    public Object clone() {
        return getBase().clone();
    }

    public boolean containsAttribute(Attribute attr) {
        return getBase().containsAttribute(attr);
    }

    public Attribute getAttribute(String name) {
        return getBase().getAttribute(name);
    }

    public List getAttributes() {
        return getBase().getAttributes();
    }

    public Object getValue(Attribute attr) {
        return getBase().getValue(attr);
    }

    public boolean isReadOnly(Attribute attr) {
        return getBase().isReadOnly(attr);
    }
    
    public boolean isToSave(Attribute attr) {
        return getBase().isToSave(attr);
    }

    public void setReadOnly(Attribute attr, boolean value) {
        getBase().setReadOnly(attr, value);
    }

    public void setValue(Attribute attr, Object value) {
        getBase().setValue(attr, value);
    }

    public void attributeListChanged(AttributeEvent baseEvent) {
        AttributeEvent e = null;
        for(Iterator it = listeners.iterator(); it.hasNext(); ) {
            AttributeListener l = (AttributeListener) it.next();
            if(e == null) {
                e = new AttributeEvent(this, baseEvent.getAttribute(),
                        baseEvent.getValue());
            }
            l.attributeListChanged(e);
        }
    }

    public void attributeValueChanged(AttributeEvent baseEvent) {
        AttributeEvent e = null;
        for(Iterator it = listeners.iterator(); it.hasNext(); ) {
            AttributeListener l = (AttributeListener) it.next();
            if(e == null) {
                e = new AttributeEvent(this, baseEvent.getAttribute(),
                        baseEvent.getValue());
            }
            l.attributeValueChanged(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.