org.eclipse.bpmn2.modeler.ui.property.editors.IntObjectEditor.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.bpmn2.modeler.ui.property.editors.IntObjectEditor.java

Source

/*******************************************************************************
 * Copyright (c) 2011 Red Hat, Inc.
 *  All rights reserved.
 * This program is made available under the terms of the
 * Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * Red Hat, Inc. - initial API and implementation
 *
 * @author Bob Brodt
 ******************************************************************************/

package org.eclipse.bpmn2.modeler.ui.property.editors;

import java.math.BigInteger;

import org.eclipse.bpmn2.modeler.core.utils.ErrorUtils;
import org.eclipse.bpmn2.modeler.ui.Activator;
import org.eclipse.bpmn2.modeler.ui.property.AbstractBpmn2PropertiesComposite;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.observable.value.IValueChangeListener;
import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;

/**
 * @author Bob Brodt
 *
 */
public class IntObjectEditor extends ObjectEditor {

    /**
     * @param parent
     * @param object
     * @param feature
     */
    public IntObjectEditor(AbstractBpmn2PropertiesComposite parent, EObject object, EStructuralFeature feature) {
        super(parent, object, feature);
    }

    /* (non-Javadoc)
     * @see org.eclipse.bpmn2.modeler.ui.property.editors.ObjectEditor#createControl(org.eclipse.swt.widgets.Composite, java.lang.String)
     */
    @Override
    public Control createControl(Composite composite, String label, int style) {
        createLabel(composite, label);

        final Text text = getToolkit().createText(composite, "");
        text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
        text.addVerifyListener(new VerifyListener() {

            /**
             * taken from
             * http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets
             * /Snippet19.java?view=co
             */
            @Override
            public void verifyText(VerifyEvent e) {
                String string = e.text;
                char[] chars = new char[string.length()];
                string.getChars(0, chars.length, chars, 0);
                for (int i = 0; i < chars.length; i++) {
                    if (!('0' <= chars[i] && chars[i] <= '9')) {
                        e.doit = false;
                        return;
                    }
                }
            }
        });

        Object eGet = object.eGet(feature);
        if (eGet != null) {
            text.setText(eGet.toString());
        }

        IObservableValue textObserveTextObserveWidget = SWTObservables.observeText(text, SWT.Modify);
        textObserveTextObserveWidget.addValueChangeListener(new IValueChangeListener() {
            @Override
            public void handleValueChange(ValueChangeEvent event) {

                try {
                    final int i = Integer.parseInt(text.getText());
                    if (!object.eGet(feature).equals(i)) {
                        setFeatureValue(i);
                    }
                } catch (NumberFormatException e) {
                    text.setText((String) object.eGet(feature));
                    Activator.logError(e);
                }
            }

            @SuppressWarnings("restriction")
            private void setFeatureValue(final int i) {
                RecordingCommand command = new RecordingCommand(getDiagramEditor().getEditingDomain()) {
                    @Override
                    protected void doExecute() {
                        Class eTypeClass = feature.getEType().getInstanceClass();
                        if (BigInteger.class.equals(eTypeClass)) {
                            object.eSet(feature, BigInteger.valueOf((long) i));
                        } else
                            object.eSet(feature, i);
                    }
                };
                getDiagramEditor().getEditingDomain().getCommandStack().execute(command);
                if (getDiagramEditor().getDiagnostics() != null) {
                    // revert the change and display error status message.
                    text.setText((String) object.eGet(feature));
                    ErrorUtils.showErrorMessage(getDiagramEditor().getDiagnostics().getMessage());
                } else
                    ErrorUtils.showErrorMessage(null);
            }
        });

        text.addFocusListener(new FocusListener() {

            @Override
            public void focusGained(FocusEvent e) {
            }

            @Override
            public void focusLost(FocusEvent e) {
                ErrorUtils.showErrorMessage(null);
            }
        });

        return text;
    }

}