es.cv.gvcase.fefem.common.composites.EMFPropertyEEnumComposite.java Source code

Java tutorial

Introduction

Here is the source code for es.cv.gvcase.fefem.common.composites.EMFPropertyEEnumComposite.java

Source

/***************************************************************************
* Copyright (c) 2008 Conselleria de Infraestructuras y Transporte,
* Generalitat de la Comunitat Valenciana . All rights reserved. This program
* and the accompanying materials are 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: Jose Manuel Garca Valladolid (CIT) - Initial API and implementation
*
**************************************************************************/

package es.cv.gvcase.fefem.common.composites;

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

import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EEnumLiteral;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.databinding.viewers.ViewersObservables;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;

import es.cv.gvcase.fefem.common.FEFEMPage;

/**
 * Composite that binds a EEnum ecore feature to a non-editable combo dropdown list with all
 * the Enumerator values as a selectable options
 *
 * @author Jose Manuel Garca Valladolid
 */
public abstract class EMFPropertyEEnumComposite extends EMFPropertyComposite {

    protected ComboViewer comboViewer;

    public EMFPropertyEEnumComposite(Composite parent, int style, FormToolkit toolkit, EObject object,
            FEFEMPage page) {
        super(parent, style, toolkit, object, page);
    }

    public EMFPropertyEEnumComposite(Composite parent, int style, FormToolkit toolkit, Viewer viewer,
            FEFEMPage page) {
        super(parent, style, toolkit, viewer, page);
    }

    /* (non-Javadoc)
     * @see es.cv.gvcase.fefem.common.composites.EMFPropertyComposite#createWidgets(org.eclipse.ui.forms.widgets.FormToolkit)
     */
    @Override
    protected void createWidgets(FormToolkit toolkit) {

        this.setLayout(new GridLayout(2, false));

        this.createLabel(toolkit);

        Combo combo = new Combo(this, SWT.READ_ONLY);
        comboViewer = new ComboViewer(combo);

        if (getFeature() instanceof EAttribute) {
            EDataType dt = ((EAttribute) getFeature()).getEAttributeType();
            if (dt instanceof EEnum) {

                comboViewer.setContentProvider(new ArrayContentProvider());

                List<Enumerator> lEnums = new ArrayList<Enumerator>();
                Iterator<EEnumLiteral> iter = ((EEnum) dt).getELiterals().iterator();
                while (iter.hasNext()) {
                    EEnumLiteral el = iter.next();
                    lEnums.add(el.getInstance());
                }
                comboViewer.setInput(lEnums.toArray());
                comboViewer.setLabelProvider(getLabelProvider());
            }
        }

        //         combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        combo.setLayoutData(new GridData(GridData.FILL));
        toolkit.adapt(combo);
        toolkit.adapt(this);

    }

    @Override
    public int getStyle() {
        return SWT.BORDER | SWT.FLAT;
    }

    /* (non-Javadoc)
     * @see es.cv.gvcase.fefem.common.composites.EMFPropertyComposite#getTargetObservable()
     */
    @Override
    protected IObservableValue getTargetObservable() {
        return ViewersObservables.observeSingleSelection(comboViewer);
    }

    public Viewer getViewer() {
        return comboViewer;
    }

    protected LabelProvider getLabelProvider() {
        return new LabelProvider() {

            @Override
            public String getText(Object element) {
                if (element instanceof Enumerator) {
                    return ((Enumerator) element).getLiteral();
                } else if (element == null)
                    return "  ";
                else
                    return element.toString();
            }

        };
    }
}