/***************************************************************************** * Copyright (c) 2010 CEA LIST. * * 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: * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation *****************************************************************************/ package org.eclipse.papyrus.infra.widgets.editors; import org.eclipse.core.databinding.UpdateListStrategy; import org.eclipse.core.databinding.conversion.IConverter; import org.eclipse.core.databinding.observable.list.IObservableList; import org.eclipse.swt.widgets.Composite; /** * An abstract class to represent List Editors. * List editors are based on the Eclipse Databinding Framework * They take {@link IObservableList}s as Input * * @author Camille Letavernier * */ public abstract class AbstractListEditor extends AbstractEditor { /** * The IObservableList associated to the model property */ protected IObservableList modelProperty; /** * The UpdateStrategy for binding data from widget to model */ protected UpdateListStrategy targetToModelStrategy; /** * The UpdateStrategy for binding data from model to widget */ protected UpdateListStrategy modelToTargetStrategy; /** * The IObservableList associated to the widget */ protected IObservableList widgetObservable; protected AbstractListEditor(Composite parent) { super(parent); } protected AbstractListEditor(Composite parent, int style, String label) { super(parent, style, label); } protected AbstractListEditor(Composite parent, int style) { super(parent, style); } protected AbstractListEditor(Composite parent, String label) { super(parent, label); } /** * Sets this editor's IObservableList associated to the widget property * * @param widgetObservable * @param targetToModel * the IConverter to convert data from Widget to Model * @param modelToTarget * the IConverter to convert data from Model to Widget */ protected void setWidgetObservable(IObservableList widgetObservable, IConverter targetToModel, IConverter modelToTarget) { this.widgetObservable = widgetObservable; setConverters(targetToModel, modelToTarget); } /** * Sets this editor's IObservableList associated to the widget property * * @param widgetObservable */ protected void setWidgetObservable(IObservableList widgetObservable) { this.widgetObservable = widgetObservable; } /** * Sets this editor's IObservableList associated to the model property, * and binds it to the Editor's Widget * * @param modelProperty */ public void setModelObservable(IObservableList modelProperty) { this.modelProperty = modelProperty; doBinding(); } /** * {@inheritDoc} */ @Override public void setConverters(IConverter targetToModel, IConverter modelToTarget) { if(targetToModelStrategy == null) { targetToModelStrategy = new UpdateListStrategy(); } if(modelToTargetStrategy == null) { modelToTargetStrategy = new UpdateListStrategy(); } targetToModelStrategy.setConverter(targetToModel); modelToTargetStrategy.setConverter(modelToTarget); } /** * Sets the UpdateStrategies for databinding between the widget and the model * * @param targetToModelStrategy * The widget to model Update strategy * @param modelToTargetStrategy * The model to widget Update strategy */ public void setUpdateStrategies(UpdateListStrategy targetToModelStrategy, UpdateListStrategy modelToTargetStrategy) { this.targetToModelStrategy = targetToModelStrategy; this.modelToTargetStrategy = modelToTargetStrategy; } /** * Binds the Widget Observable to the Model observable property, * using the specified converters or Update strategies when available * * When overriding this method, you should also override {@link #refreshValue()} * * @see org.eclipse.papyrus.infra.widgets.AbstractEditor#doBinding() */ @Override protected void doBinding() { if(modelProperty == null || widgetObservable == null) { return; } binding = getBindingContext().bindList(widgetObservable, modelProperty, targetToModelStrategy, modelToTargetStrategy); } }