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

Java tutorial

Introduction

Here is the source code for es.cv.gvcase.fefem.common.composites.EMFPropertyLabelComposite.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 (Indra SL- CIT)  Initial implementation
 *
 ******************************************************************************/

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

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

import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.conversion.Converter;
import org.eclipse.core.databinding.conversion.IConverter;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.EMFUpdateValueStrategy;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.viewers.ILabelProvider;
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.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.widgets.FormToolkit;

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

/**
 * Readonly composite for displaying feature label
 * 
 * @author Jose Manuel Garca Valladolid (garcia_josval@gva.es)
 * 
 */
public abstract class EMFPropertyLabelComposite extends EMFPropertyComposite {

    /** The text control for the composite. */
    protected Label label;

    protected EMFUpdateValueStrategy modelToTargetStrategy;

    /**
     * The label provider to show info about the control
     */
    protected ILabelProvider labelProvider;

    /**
     * @param parent
     * @param style
     * @param toolkit
     * @param eObject
     * @param page
     */
    public EMFPropertyLabelComposite(Composite parent, int style, FormToolkit toolkit, EObject eObject,
            FEFEMPage page) {
        super(parent, style, toolkit, eObject, page);
    }

    /**
     * @param parent
     * @param style
     * @param toolkit
     * @param viewer
     * @param page
     */
    public EMFPropertyLabelComposite(Composite parent, int style, FormToolkit toolkit, Viewer viewer,
            FEFEMPage page) {
        super(parent, style, toolkit, viewer, page);
    }

    @Override
    protected void createWidgets(FormToolkit toolkit) {

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

        label = new Label(this, SWT.LEFT);
        label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        toolkit.adapt(this);

    }

    @Override
    public Control getRepresentativeControl() {
        return label;
    }

    @Override
    protected IObservableValue getTargetObservable() {
        return SWTObservables.observeText(label);
    }

    @Override
    protected UpdateValueStrategy getModelToTargetUpdateValueStrategy() {
        if (modelToTargetStrategy == null) {
            modelToTargetStrategy = new EMFUpdateValueStrategy();
            modelToTargetStrategy.setConverter(createModelToTargetConverter());
        }
        return modelToTargetStrategy;
    }

    /**
     * The text showed in the text box when there is no value in the reference
     */
    protected String getUndefinedValue() {
        return "";
    }

    protected IConverter createModelToTargetConverter() {
        return new Converter(EObject.class, String.class) {

            public Object convert(Object fromObject) {
                if (fromObject instanceof EObject) {
                    return getLabelProvider().getText(fromObject);
                }
                return getUndefinedValue();
            }
        };
    }

    protected ILabelProvider getLabelProvider() {
        if (labelProvider == null)
            labelProvider = createLabelProvider();
        return labelProvider;
    }

    protected ILabelProvider createLabelProvider() {
        return new EObjectLabelProvider();
    }

    @Override
    public void dispose() {
        if (labelProvider != null)
            labelProvider.dispose();
        super.dispose();
    }

    protected List<Control> getWidgetsList() {
        List<Control> list = new ArrayList<Control>();
        list.add(label);
        return list;
    }
}