org.eclipse.pde.ds.ui.internal.editor.OverviewPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.pde.ds.ui.internal.editor.OverviewPage.java

Source

/**
 * Copyright (c) 2009 Anyware Technologies and others.
 * 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:
 *     Anyware Technologies - initial API and implementation
 *
 * $Id: OverviewPage.java,v 1.12 2009/07/13 19:46:28 bcabe Exp $
 */
package org.eclipse.pde.ds.ui.internal.editor;

import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.databinding.EMFUpdateValueStrategy;
import org.eclipse.emf.databinding.edit.EMFEditProperties;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.databinding.viewers.ViewerProperties;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.pde.ds.scr.ScrPackage;
import org.eclipse.pde.ds.ui.internal.editor.composites.ComponentComposite;
import org.eclipse.pde.ds.ui.internal.editor.composites.OptionsComposite;
import org.eclipse.pde.emfforms.editor.AbstractEmfFormPage;
import org.eclipse.pde.emfforms.editor.EmfFormEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.Section;

public class OverviewPage extends AbstractEmfFormPage {

    public final static String ID = "ds.overview"; //$NON-NLS-1$

    // Composites
    private ComponentComposite _componentComposite;
    private OptionsComposite _optionsComposite;

    /**
     * @param editor
     */
    public OverviewPage(EmfFormEditor<?> editor) {
        super(editor, 2);
    }

    public void bind(DataBindingContext bindingContext) {
        final EditingDomain editingDomain = ((DSEditor) getEditor()).getEditingDomain();

        /**
         * Bind Component composite
         */
        // component name
        bindingContext.bindValue(WidgetProperties.text(SWT.FocusOut).observe(_componentComposite.getTextName()),
                EMFEditProperties.value(editingDomain, ScrPackage.eINSTANCE.getComponent_Name())
                        .observeDetail(getObservedValue()),
                null, null);
        // component impl
        bindingContext.bindValue(
                WidgetProperties.text(SWT.FocusOut).observe(_componentComposite.getTextImplementation()),
                EMFEditProperties.value(editingDomain, ScrPackage.eINSTANCE.getComponent_Implementation())
                        .value(ScrPackage.eINSTANCE.getImplementation_Class()).observeDetail(getObservedValue()),
                new EMFUpdateValueStrategy() {
                    @Override
                    public Object convert(Object value) {
                        if (((String) value).trim().equals(""))
                            return null;
                        return super.convert(value);
                    }
                }, null);

        // component activate
        bindingContext.bindValue(WidgetProperties.text(SWT.FocusOut).observe(_componentComposite.getTextActivate()),
                EMFEditProperties.value(editingDomain, ScrPackage.eINSTANCE.getComponent_Activate())
                        .observeDetail(getObservedValue()),
                null, null);

        // component deactivate
        bindingContext.bindValue(
                WidgetProperties.text(SWT.FocusOut).observe(_componentComposite.getTextDeactivate()),
                EMFEditProperties.value(editingDomain, ScrPackage.eINSTANCE.getComponent_Deactivate())
                        .observeDetail(getObservedValue()),
                null, null);

        // component modified
        bindingContext.bindValue(WidgetProperties.text(SWT.FocusOut).observe(_componentComposite.getTextModified()),
                EMFEditProperties.value(editingDomain, ScrPackage.eINSTANCE.getComponent_Modified())
                        .observeDetail(getObservedValue()),
                null, null);

        /**
         * Bind Options composite
         */
        // component factory ID
        bindingContext.bindValue(WidgetProperties.text(SWT.FocusOut).observe(_optionsComposite.getTextFactory()),
                EMFEditProperties.value(editingDomain, ScrPackage.eINSTANCE.getComponent_Factory())
                        .observeDetail(getObservedValue()),
                null, null);
        // component configuration policy
        bindingContext.bindValue(
                ViewerProperties.singleSelection().observe(_optionsComposite.getComboViewerConfigurationPolicy()),
                EMFEditProperties.value(editingDomain, ScrPackage.eINSTANCE.getComponent_ConfigurationPolicy())
                        .observeDetail(getObservedValue()),
                null, null);
        // component enablement
        bindingContext.bindValue(WidgetProperties.selection().observe(_optionsComposite.getButtonEnabled()),
                EMFEditProperties.value(editingDomain, ScrPackage.eINSTANCE.getComponent_Enabled())
                        .observeDetail(getObservedValue()),
                null, null);
        // component immediacy
        bindingContext.bindValue(WidgetProperties.selection().observe(_optionsComposite.getButtonImmediate()),
                EMFEditProperties.value(editingDomain, ScrPackage.eINSTANCE.getComponent_Immediate())
                        .observeDetail(getObservedValue()),
                null, null);

        // perform bindings to get a message manager up to date
        // FIXME this is just not good to do such a thing :)
        bindingContext.updateModels();
        editingDomain.getCommandStack().flush();
    }

    public void createContents(Composite parent) {
        createComponentSection(parent);
        createOptionsSection(parent);

        addToolbarActions();
    }

    private void addToolbarActions() {
        IToolBarManager toolBarManager = getManagedForm().getForm().getToolBarManager();

        // add actions here

        toolBarManager.update(true);
    }

    private void createComponentSection(Composite parent) {
        Section s = getFormToolkit().createSection(parent, Section.TITLE_BAR | Section.DESCRIPTION);
        s.setDescription(Messages.OverviewPage_Component_Section_desc);
        GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(s);

        s.setText(Messages.OverviewPage_Component_Section);
        _componentComposite = new ComponentComposite(s, SWT.NONE);
        s.setClient(_componentComposite);
    }

    private void createOptionsSection(Composite parent) {
        Section s = getFormToolkit().createSection(parent, Section.TITLE_BAR | Section.DESCRIPTION);
        s.setDescription(Messages.OverviewPage_Options_Section_desc);
        GridDataFactory.fillDefaults().grab(true, false).span(1, 1).applyTo(s);

        s.setText(Messages.OverviewPage_Options_Section);
        _optionsComposite = new OptionsComposite(s, SWT.NONE);
        s.setClient(_optionsComposite);
    }

    @Override
    public String getId() {
        return ID;
    }

    @Override
    public String getPartName() {
        return Messages.OverviewPage_Title;
    }

    @Override
    public Viewer getViewer() {
        return null;
    }

    private IObservableValue getObservedValue() {
        return ((DSEditor) getEditor()).getInputObservable();
    }

}