Example usage for java.beans Customizer addPropertyChangeListener

List of usage examples for java.beans Customizer addPropertyChangeListener

Introduction

In this page you can find the example usage for java.beans Customizer addPropertyChangeListener.

Prototype

void addPropertyChangeListener(PropertyChangeListener listener);

Source Link

Document

Register a listener for the PropertyChange event.

Usage

From source file:org.eclipse.wb.internal.swing.customize.CustomizerAction.java

private void performCustomize0() throws Exception {
    Customizer customizer = m_customizerClass.newInstance();
    // prepare properties information
    final JavaInfoState javaInfoState = JavaInfoState.getState(m_javaInfo);
    boolean explicit = isExplicitPropertyChange(m_javaInfo);
    PropertyChangeListener propertyChangeListener = null;
    if (explicit) {
        propertyChangeListener = new PropertyChangeListener() {
            public void propertyChange(PropertyChangeEvent event) {
                javaInfoState.changedProperties.add(event.getPropertyName());
                javaInfoState.changedPropertyValues.put(event.getPropertyName(), event.getNewValue());
            }//from   w w  w.ja v a  2  s.c o  m
        };
        customizer.addPropertyChangeListener(propertyChangeListener);
    }
    //
    try {
        // open customizer dialog
        customizer.setObject(javaInfoState.object);
        AwtComponentDialog dialog = new AwtComponentDialog(DesignerPlugin.getDefault(), (Component) customizer,
                ModelMessages.CustomizerAction_dialogTitle, MessageFormat
                        .format(ModelMessages.CustomizerAction_dialogMessage, m_customizerClass.getName()));
        int dialogResult = dialog.open();
        // handle update properties
        if (dialogResult == Window.OK) {
            RunnableEx runnable = null;
            if (explicit) {
                // update changed properties
                runnable = new RunnableEx() {
                    public void run() throws Exception {
                        int size = javaInfoState.properties.size();
                        for (int i = 0; i < size; i++) {
                            Property property = javaInfoState.properties.get(i);
                            if (javaInfoState.changedProperties.contains(property.getTitle())) {
                                Object newValue = javaInfoState.changedPropertyValues.get(property.getTitle());
                                Object oldValue = javaInfoState.oldValues.get(i);
                                if (!ObjectUtils.equals(newValue, oldValue)) {
                                    property.setValue(newValue);
                                }
                            }
                        }
                    }
                };
            } else {
                // update all properties
                runnable = new RunnableEx() {
                    public void run() throws Exception {
                        int size = javaInfoState.properties.size();
                        for (int i = 0; i < size; i++) {
                            Object newValue = javaInfoState.getters.get(i).invoke(javaInfoState.object);
                            Object oldValue = javaInfoState.oldValues.get(i);
                            if (!ObjectUtils.equals(newValue, oldValue)) {
                                javaInfoState.properties.get(i).setValue(newValue);
                            }
                        }
                    }
                };
            }
            // run update
            ExecutionUtils.run(m_javaInfo, runnable);
        }
        // rollback property changes
        if (dialogResult == Window.CANCEL) {
            ExecutionUtils.run(m_javaInfo, new RunnableEx() {
                public void run() throws Exception {
                    int size = javaInfoState.properties.size();
                    for (int i = 0; i < size; i++) {
                        Object newValue = javaInfoState.getters.get(i).invoke(javaInfoState.object);
                        Object oldValue = javaInfoState.oldValues.get(i);
                        if (!ObjectUtils.equals(newValue, oldValue)) {
                            javaInfoState.setters.get(i).invoke(javaInfoState.object, oldValue);
                        }
                    }
                }
            });
        }
    } finally {
        if (propertyChangeListener != null) {
            customizer.removePropertyChangeListener(propertyChangeListener);
        }
    }
}