All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jentity.CheckBoxBean Maven / Gradle / Ivy

The newest version!
package org.jentity;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import javax.swing.AbstractButton;
import javax.swing.JCheckBox;

import org.jentity.datamodel.ChangeListener;
import org.jentity.datamodel.DataEntity;
import org.jentity.datamodel.DataProcessor;
import org.jentity.datamodel.ParameterEnum;

/**
 * Enables checkboxes to be attached to a DataEntity model. 
 */
public class CheckBoxBean implements GUIBean {
    protected final DataEntity model;
    final JCheckBox button;
    protected ButtonController controller;
    protected final ChangeListener listener;
    final List additionalListeners = new LinkedList();
    private ParameterEnum parameter;
    private final EventGuard guard = new EventGuard();
    
	protected final DataProcessor processor = new DataProcessor("Text") {
        protected void processEntity(DataEntity dataEntity){
            // No default behavior, acts as root processor
        }
    };
    
    public CheckBoxBean(final ParameterEnum param,
                        final JCheckBox view,
                        final DataEntity model) {
        parameter = param;
        this.button = view;
        this.model = model;
        listener =  new ChangeListener() {
            public void handleUpdate(ChangeEvent change) {
                DataEntity modelChange = change.getUpdateValues();
                if (modelChange.isDefined(parameter)) {
                    boolean newValue = false;
                    if (model.getAttribute(param) != null && ((Boolean)model.getAttribute(param)).booleanValue()) {
                        newValue = true;
                    }
                    button.setSelected(newValue);
                }
            }
        };
        button.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        		if (guard. getGuard()) {
        			DataEntity update = model.createInstance();
        			update.setAttribute(parameter, new Boolean(button.isSelected()));

        			processor.process(update);    
        			model.update(update);
        			guard.releaseGuard();
        		}
        	}
        });
    }
    
    public void setEnabled(boolean value) {
        button.setEnabled(value);
        button.setFocusable(value);
    }

	public void addSubprocessor(DataProcessor subprocesser) {
		processor.addSubprocessor(subprocesser);
	}	
    
    public AbstractButton getView() {
        return button;
    }
    
    public ButtonController getController() {
        return controller;
    }

    public void addModelListener(ChangeListener listener) {
        additionalListeners.add(listener);
    }
    
    public void attachToModel() {
        model.addListener(listener);
        for (Iterator iter = additionalListeners.iterator(); iter.hasNext();) {
            ChangeListener additionalListener = iter.next();
            model.addListener(additionalListener);
        }
    }
    public void detachFromModel() {
        model.removeListener(listener);
        for (Iterator iter = additionalListeners.iterator(); iter.hasNext();) {
            ChangeListener additionalListener = iter.next();
            model.removeListener(additionalListener);
        }
    }        
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy