Java tutorial
/******************************************************************************* * 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() { } }