org.eclipse.rap.demo.databinding.nestedselection.TestMasterDetailView.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.rap.demo.databinding.nestedselection.TestMasterDetailView.java

Source

/*******************************************************************************
 * Copyright (c) 2006, 2007 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *     Brad Reynolds - bug 116920
 *     Samy Abou-Shama (NOMAD business software GmbH) Adapted as view for RAP
 ******************************************************************************/

package org.eclipse.rap.demo.databinding.nestedselection;

import org.eclipse.core.databinding.*;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.conversion.IConverter;
import org.eclipse.core.databinding.observable.IObserving;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.databinding.observable.map.IObservableMap;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.internal.databinding.conversion.ObjectToStringConverter;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.databinding.swt.ISWTObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.viewers.*;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.rap.demo.databinding.DatabindingSnippetsView;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.part.ViewPart;

/**
 * @since 1.0
 */
public class TestMasterDetailView extends ViewPart {
    private Group bindingGroup;
    private Table personsTable = null;
    private Label label1 = null;
    private Text name = null;
    private Label label2 = null;
    private Text address = null;
    private Label label3 = null;
    private Text city = null;
    private Label label4 = null;
    private Text state = null;
    private Table ordersTable = null;
    private Text validationStatus;
    private final SimpleModel model = new SimpleModel();

    /**
     * @since 1.0
     */
    private static final class CustomUpdateValueStrategy extends UpdateValueStrategy {

        protected IStatus doSet(final IObservableValue observableValue, final Object value) {
            IStatus result = super.doSet(observableValue, value);
            if (result.isOK()) {
                Object changed = observableValue;
                if (changed instanceof IObserving) {
                    changed = ((IObserving) changed).getObserved();
                }
            }
            return result;
        }
    }

    /**
     * This method initializes table
     */
    private void createTable() {
        personsTable = new Table(bindingGroup, SWT.NONE);
        personsTable.setHeaderVisible(true);
        personsTable.setLinesVisible(true);
        TableColumn tableColumn = new TableColumn(personsTable, SWT.NONE);
        tableColumn.setWidth(60);
        tableColumn.setText("Name");
        TableColumn tableColumn1 = new TableColumn(personsTable, SWT.NONE);
        tableColumn1.setWidth(60);
        tableColumn1.setText("State");
        FormData data = new FormData(DatabindingSnippetsView.STD_TEXT_WIDTH_LARGE, 100);
        data.top = new FormAttachment(0, DatabindingSnippetsView.TOP_MARGIN);
        data.left = new FormAttachment(0, 0);
        personsTable.setLayoutData(data);
    }

    /**
     * This method initializes table1
     */
    private void createTable1() {
        ordersTable = new Table(bindingGroup, SWT.NONE);
        ordersTable.setHeaderVisible(true);
        ordersTable.setLinesVisible(true);
        TableColumn tableColumn2 = new TableColumn(ordersTable, SWT.NONE);
        tableColumn2.setWidth(60);
        tableColumn2.setText("Order No");
        TableColumn tableColumn3 = new TableColumn(ordersTable, SWT.NONE);
        tableColumn3.setWidth(60);
        tableColumn3.setText("Date");
        FormData data = new FormData(DatabindingSnippetsView.STD_TEXT_WIDTH_LARGE, 100);
        data.top = new FormAttachment(label4, DatabindingSnippetsView.TOP_MARGIN * 3);
        data.left = new FormAttachment(0, 0);
        ordersTable.setLayoutData(data);
    }

    private void bind(final Control parent) {
        Realm realm = SWTObservables.getRealm(parent.getDisplay());
        TableViewer peopleViewer = new TableViewer(personsTable);
        ObservableListContentProvider peopleViewerContent = new ObservableListContentProvider();
        peopleViewer.setContentProvider(peopleViewerContent);

        String[] attrSimplePerson = new String[] { "name", "state" };
        IObservableMap[] attributeMaps = BeansObservables.observeMaps(peopleViewerContent.getKnownElements(),
                SimplePerson.class, attrSimplePerson);
        ObservableMapLabelProvider omlProvider = new ObservableMapLabelProvider(attributeMaps);
        peopleViewer.setLabelProvider(omlProvider);
        peopleViewer.setInput(new WritableList(realm, model.getPersonList(), SimpleModel.class));
        IObservableValue selectedPerson = ViewersObservables.observeSingleSelection(peopleViewer);
        DataBindingContext dbc = new DataBindingContext(realm) {
            protected UpdateValueStrategy createTargetToModelUpdateValueStrategy(IObservableValue fromValue,
                    IObservableValue toValue) {
                return new CustomUpdateValueStrategy();
            }
        };
        IConverter upperCaseConverter = new IConverter() {
            public Object convert(Object fromObject) {
                return ((String) fromObject).toUpperCase();
            }

            public Object getFromType() {
                return String.class;
            }

            public Object getToType() {
                return String.class;
            }
        };
        IValidator vowelValidator = new IValidator() {
            public IStatus validate(Object value) {
                String s = (String) value;
                if (!s.matches("[aeiouAEIOU]*")) {
                    return ValidationStatus.error("only vowels allowed");
                }
                return Status.OK_STATUS;
            }
        };

        IObservableValue modelObservableValue = BeansObservables.observeDetailValue(realm, selectedPerson, "name",
                String.class);
        ISWTObservableValue targetObservableValue = SWTObservables.observeText(name, SWT.Modify);
        CustomUpdateValueStrategy customUpdateValueStrategy = new CustomUpdateValueStrategy();
        customUpdateValueStrategy.setConverter(upperCaseConverter);
        UpdateValueStrategy targetToModel = customUpdateValueStrategy.setAfterGetValidator(vowelValidator);
        Binding binding = dbc.bindValue(targetObservableValue, modelObservableValue, targetToModel, null);

        UpdateValueStrategy updateValueStrategy = new UpdateValueStrategy();
        updateValueStrategy.setConverter(new ObjectToStringConverter());
        dbc.bindValue(SWTObservables.observeText(validationStatus, SWT.NONE), binding.getValidationStatus(), null,
                updateValueStrategy);
        dbc.bindValue(SWTObservables.observeText(address, SWT.Modify),
                BeansObservables.observeDetailValue(realm, selectedPerson, "address", String.class), null, null);
        dbc.bindValue(SWTObservables.observeText(city, SWT.Modify),
                BeansObservables.observeDetailValue(realm, selectedPerson, "city", String.class), null, null);
        dbc.bindValue(SWTObservables.observeText(state, SWT.Modify),
                BeansObservables.observeDetailValue(realm, selectedPerson, "state", String.class), null, null);
        TableViewer ordersViewer = new TableViewer(ordersTable);
        ObservableListContentProvider ordersViewerContent = new ObservableListContentProvider();
        ordersViewer.setContentProvider(ordersViewerContent);
        String[] propertyNames = new String[] { "orderNumber", "date" };
        IObservableMap[] observeMaps = BeansObservables.observeMaps(ordersViewerContent.getKnownElements(),
                SimpleOrder.class, propertyNames);
        ObservableMapLabelProvider observableMapLabelProvider = new ObservableMapLabelProvider(observeMaps);
        ordersViewer.setLabelProvider(observableMapLabelProvider);
        IObservableList orders = BeansObservables.observeDetailList(realm, selectedPerson, "orders",
                SimpleOrder.class);
        ordersViewer.setInput(orders);
    }

    public void createPartControl(final Composite parent) {
        FormLayout formLayout = new FormLayout();
        formLayout.marginHeight = DatabindingSnippetsView.GROUP_MARGIN_HEIGHT;
        formLayout.marginWidth = DatabindingSnippetsView.GROUP_MARGIN_WIDTH;
        parent.setLayout(new FormLayout());
        bindingGroup = new Group(parent, SWT.NONE);
        bindingGroup.setText("Adaptation of the Databinding " + "TestMasterDetailView Example");
        FormData data = new FormData(DatabindingSnippetsView.GROUP_WIDTH, SWT.DEFAULT);
        data.top = new FormAttachment(0, DatabindingSnippetsView.TOP_MARGIN);
        data.left = new FormAttachment(0, DatabindingSnippetsView.GROUP_MARGIN_WIDTH);
        bindingGroup.setLayoutData(data);
        FormLayout formLayoutGroup = new FormLayout();
        formLayoutGroup.marginHeight = DatabindingSnippetsView.GROUP_MARGIN_HEIGHT;
        formLayoutGroup.marginWidth = DatabindingSnippetsView.GROUP_MARGIN_WIDTH;
        bindingGroup.setLayout(formLayoutGroup);
        createTable();
        label1 = new Label(bindingGroup, SWT.NONE);
        label1.setText("Name");
        data = new FormData(DatabindingSnippetsView.STD_LABEL_WIDTH, SWT.DEFAULT);
        data.top = new FormAttachment(personsTable, DatabindingSnippetsView.TOP_MARGIN * 3);
        data.left = new FormAttachment(0, 0);
        label1.setLayoutData(data);
        name = new Text(bindingGroup, SWT.BORDER);
        data = new FormData(DatabindingSnippetsView.STD_LABEL_WIDTH, SWT.DEFAULT);
        data.top = new FormAttachment(personsTable, DatabindingSnippetsView.TOP_MARGIN * 3);
        data.left = new FormAttachment(label1, 0);
        name.setLayoutData(data);
        label2 = new Label(bindingGroup, SWT.NONE);
        label2.setText("Address");
        data = new FormData(DatabindingSnippetsView.STD_LABEL_WIDTH, SWT.DEFAULT);
        data.top = new FormAttachment(name, DatabindingSnippetsView.TOP_MARGIN);
        data.left = new FormAttachment(0, 0);
        label2.setLayoutData(data);
        address = new Text(bindingGroup, SWT.BORDER);
        data = new FormData(DatabindingSnippetsView.STD_LABEL_WIDTH, SWT.DEFAULT);
        data.top = new FormAttachment(name, DatabindingSnippetsView.TOP_MARGIN);
        data.left = new FormAttachment(label2, 0);
        address.setLayoutData(data);
        label3 = new Label(bindingGroup, SWT.NONE);
        label3.setText("City");
        data = new FormData(DatabindingSnippetsView.STD_LABEL_WIDTH, SWT.DEFAULT);
        data.top = new FormAttachment(address, DatabindingSnippetsView.TOP_MARGIN);
        data.left = new FormAttachment(0, 0);
        label3.setLayoutData(data);
        city = new Text(bindingGroup, SWT.BORDER);
        data = new FormData(DatabindingSnippetsView.STD_LABEL_WIDTH, SWT.DEFAULT);
        data.top = new FormAttachment(address, DatabindingSnippetsView.TOP_MARGIN);
        data.left = new FormAttachment(label3, 0);
        city.setLayoutData(data);
        label4 = new Label(bindingGroup, SWT.NONE);
        label4.setText("State");
        data = new FormData(DatabindingSnippetsView.STD_LABEL_WIDTH, SWT.DEFAULT);
        data.top = new FormAttachment(city, DatabindingSnippetsView.TOP_MARGIN);
        data.left = new FormAttachment(0, 0);
        label4.setLayoutData(data);
        state = new Text(bindingGroup, SWT.BORDER);
        data = new FormData(DatabindingSnippetsView.STD_LABEL_WIDTH, SWT.DEFAULT);
        data.top = new FormAttachment(city, DatabindingSnippetsView.TOP_MARGIN);
        data.left = new FormAttachment(label4, 0);
        state.setLayoutData(data);
        createTable1();
        validationStatus = new Text(bindingGroup, SWT.READ_ONLY | SWT.BORDER);
        data = new FormData(400, SWT.DEFAULT);
        data.top = new FormAttachment(ordersTable, DatabindingSnippetsView.TOP_MARGIN);
        data.left = new FormAttachment(0, 0);
        validationStatus.setLayoutData(data);
        bind(parent);
    }

    public void setFocus() {
    }
}