/******************************************************************************* * Copyright (c) 2014 Hussein Mhanna * * 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: * Hussein Mhanna - initial API and implementation ******************************************************************************/ package org.eclipse.rmf.reqif10.csv.importer.ui.wizards.pages; import static org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage.Literals.MAPPING_ITEM__ATTRIBUTE_NAME; import static org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage.Literals.MAPPING_ITEM__COLUMN_ID; import static org.eclipse.rmf.reqif10.csv.importer.mapping.MappingPackage.Literals.MAPPING_ITEM__DATA_TYPE; import java.util.ArrayList; import java.util.List; import org.eclipse.core.databinding.Binding; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.observable.Realm; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.emf.databinding.edit.EMFEditObservables; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.databinding.fieldassist.ControlDecorationSupport; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.databinding.viewers.ViewersObservables; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.rmf.reqif10.csv.importer.mapping.DataType; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; 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.swt.widgets.Label; import org.eclipse.swt.widgets.Text; public class RightMappingPart extends Composite { /** * The input object */ private Object input; /** * The column mapping combo viewer */ private ComboViewer columnMappingComboViewer; /** * The attribute name text widget */ private Text attributeNameTextWidget; /** * The data type combo viewer */ private ComboViewer dataTypeComboViewer; /** * The writable value */ private WritableValue writableValue = new WritableValue(); /** * The editing domain */ private EditingDomain editingDomain; /** * The data binding context */ private DataBindingContext bindingContext; private List<String> columnMappingInput = new ArrayList<String>(); public RightMappingPart(Composite parent, EditingDomain editingDomain) { super(parent, SWT.NONE); this.editingDomain = editingDomain; setLayout(new FillLayout()); createControls(); } /** * {@inheritDoc} Update the selection and call {@link #update(Object)} */ public void selectionChanged(final ISelection selection) { final IStructuredSelection structuredSelection = (IStructuredSelection) selection; if (structuredSelection.size() == 1) { input = structuredSelection.getFirstElement(); } writableValue.setValue(input); } protected void initDataBindings() { bindingContext = new DataBindingContext(); Binding columnMappingComboViewerBinding = bindComboViewer( columnMappingComboViewer, MAPPING_ITEM__COLUMN_ID); ControlDecorationSupport.create(columnMappingComboViewerBinding, SWT.TOP | SWT.LEFT); Binding attributeNameTextWidgetBinding = bindTextWidget( attributeNameTextWidget, MAPPING_ITEM__ATTRIBUTE_NAME); ControlDecorationSupport.create(attributeNameTextWidgetBinding, SWT.TOP | SWT.LEFT); Binding dataTypeComboViewerBinding = bindComboViewer( dataTypeComboViewer, MAPPING_ITEM__DATA_TYPE); ControlDecorationSupport.create(dataTypeComboViewerBinding, SWT.TOP | SWT.LEFT); } private Binding bindTextWidget(Text textWidget, EStructuralFeature feature) { IObservableValue target = WidgetProperties.text(SWT.Modify).observe( textWidget); IObservableValue model = EMFEditObservables.observeDetailValue( Realm.getDefault(), editingDomain, writableValue, feature); return bindingContext.bindValue(target, model, null, null); } private Binding bindComboViewer(ComboViewer comboViewer, EStructuralFeature feature) { // IObservableValue target = ViewersObservables .observeSingleSelection(comboViewer); IObservableValue model = EMFEditObservables.observeDetailValue( Realm.getDefault(), editingDomain, writableValue, feature); return bindingContext.bindValue(target, model, null, null); } private void createControls() { Composite composite = new Composite(this, SWT.NONE); composite.setLayout(new GridLayout(2, false)); createColumnMappingComboViewer(composite); createAttributeNameTextWidget(composite); createDataTypeComboViewer(composite); initDataBindings(); } private void createColumnMappingComboViewer(Composite composite) { columnMappingComboViewer = createComboViewer("Column Mapping: ", composite, columnMappingInput); } protected void setColumnMappingInput(List<String> columnMappingInput) { this.columnMappingInput.clear(); this.columnMappingInput.add(""); this.columnMappingInput.addAll(columnMappingInput); if (columnMappingComboViewer != null) { columnMappingComboViewer.refresh(); } } private void createAttributeNameTextWidget(Composite composite) { attributeNameTextWidget = createText("Attribute Name:", composite); } private void createDataTypeComboViewer(Composite composite) { dataTypeComboViewer = createComboViewer("Data Type: ", composite, DataType.values()); } private Label createLabel(Composite parent, String labelText) { Label label = new Label(parent, SWT.NONE); label.setText(labelText); return label; } private Text createText(String labelText, Composite composite) { createLabel(composite, labelText); Text text = new Text(composite, SWT.BORDER); text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); return text; } private ComboViewer createComboViewer(String labelText, Composite parent, Object input) { createLabel(parent, labelText); ComboViewer comboViewer = new ComboViewer(parent, SWT.READ_ONLY); Combo combo = comboViewer.getCombo(); combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); comboViewer.setLabelProvider(new LabelProvider()); comboViewer.setContentProvider(new ArrayContentProvider()); comboViewer.setInput(input); return comboViewer; } }