| /** |
| * Copyright (c) 2011, 2015 - Lunifera GmbH (Gross Enzersdorf, Austria), Loetz GmbH&Co.KG (69115 Heidelberg, Germany) |
| * 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: |
| * Florian Pirchner - Initial implementation |
| */ |
| package org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.binding; |
| |
| import org.eclipse.core.databinding.Binding; |
| import org.eclipse.core.databinding.DataBindingContext; |
| import org.eclipse.core.databinding.UpdateListStrategy; |
| import org.eclipse.core.databinding.UpdateValueStrategy; |
| import org.eclipse.core.databinding.beans.BeansObservables; |
| import org.eclipse.core.databinding.conversion.IConverter; |
| import org.eclipse.core.databinding.observable.Realm; |
| import org.eclipse.core.databinding.observable.list.IObservableList; |
| import org.eclipse.core.databinding.observable.value.IObservableValue; |
| import org.eclipse.emf.databinding.EMFObservables; |
| import org.eclipse.emf.databinding.EMFUpdateListStrategy; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.osbp.ecview.core.common.context.IViewContext; |
| import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage; |
| import org.eclipse.osbp.ecview.core.common.model.core.YEditable; |
| import org.eclipse.osbp.ecview.core.common.model.core.YEnable; |
| import org.eclipse.osbp.ecview.core.common.model.core.YVisibleable; |
| import org.eclipse.osbp.ecview.core.databinding.emf.common.ECViewDatabindingContext; |
| import org.eclipse.osbp.ecview.core.databinding.emf.common.ECViewUpdateValueStrategy; |
| import org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.IBindingManager; |
| import org.eclipse.osbp.runtime.web.vaadin.databinding.VaadinObservables; |
| import org.eclipse.osbp.runtime.web.vaadin.databinding.values.IVaadinObservableValue; |
| |
| import com.vaadin.data.Property; |
| import com.vaadin.ui.AbstractComponent; |
| import com.vaadin.ui.Component; |
| |
| // TODO: Auto-generated Javadoc |
| /** |
| * Is used to bind values. |
| */ |
| public class BindingManager extends |
| org.eclipse.osbp.ecview.core.common.binding.AbstractBindingManager |
| implements IBindingManager { |
| |
| /** |
| * Instantiates a new binding manager. |
| * |
| * @param viewContext |
| * the view context |
| * @param validationRealm |
| * the validation realm |
| */ |
| public BindingManager(IViewContext viewContext, Realm validationRealm) { |
| super(validationRealm); |
| } |
| |
| /** |
| * Casts element to EObject. |
| * |
| * @param element |
| * the element |
| * @return the e object |
| */ |
| protected EObject castEObject(Object element) { |
| return (EObject) element; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.osbp.ecview.core.common.binding.AbstractBindingManager#createDatabindingContext(org.eclipse.core.databinding.observable.Realm) |
| */ |
| @Override |
| protected DataBindingContext createDatabindingContext(Realm validationRealm) { |
| return new ECViewDatabindingContext(validationRealm); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.osbp.ecview.core.common.binding.AbstractBindingManager#bindValue(org.eclipse.core.databinding.observable.value.IObservableValue, org.eclipse.core.databinding.observable.value.IObservableValue) |
| */ |
| @Override |
| public Binding bindValue(IObservableValue target, IObservableValue model) { |
| return bindValue( |
| target, |
| model, |
| new ECViewUpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE), |
| new ECViewUpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE)); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.osbp.ecview.core.common.binding.AbstractBindingManager#bindList(org.eclipse.core.databinding.observable.list.IObservableList, org.eclipse.core.databinding.observable.list.IObservableList) |
| */ |
| @Override |
| public Binding bindList(IObservableList target, IObservableList model) { |
| return getDatabindingContext().bindList(target, model, |
| new EMFUpdateListStrategy(UpdateListStrategy.POLICY_UPDATE), |
| new EMFUpdateListStrategy(UpdateListStrategy.POLICY_UPDATE)); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.IBindingManager#bindVisible(org.eclipse.osbp.ecview.core.common.model.core.YVisibleable, com.vaadin.ui.AbstractComponent) |
| */ |
| @Override |
| public Binding bindVisible(YVisibleable yVisibleAble, |
| AbstractComponent abstractComponent) { |
| IVaadinObservableValue uiObservable = VaadinObservables |
| .observeVisible(abstractComponent); |
| IObservableValue modelObservable = EMFObservables.observeValue( |
| castEObject(yVisibleAble), |
| CoreModelPackage.eINSTANCE.getYVisibleable_Visible()); |
| return getDatabindingContext().bindValue(uiObservable, modelObservable); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.IBindingManager#bindEnabled(org.eclipse.osbp.ecview.core.common.model.core.YEnable, com.vaadin.ui.AbstractComponent) |
| */ |
| @Override |
| public Binding bindEnabled(YEnable yEnable, |
| AbstractComponent abstractComponent) { |
| IVaadinObservableValue uiObservable = VaadinObservables |
| .observeEnabled(abstractComponent); |
| IObservableValue modelObservable = EMFObservables.observeValue( |
| castEObject(yEnable), |
| CoreModelPackage.eINSTANCE.getYEnable_Enabled()); |
| return getDatabindingContext().bindValue(uiObservable, modelObservable); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.IBindingManager#bindReadonly(org.eclipse.osbp.ecview.core.common.model.core.YEditable, com.vaadin.data.Property.ReadOnlyStatusChangeNotifier) |
| */ |
| @Override |
| public Binding bindReadonly(YEditable yEditable, |
| Property.ReadOnlyStatusChangeNotifier field) { |
| IVaadinObservableValue uiObservable = VaadinObservables |
| .observeReadonly(field); |
| IObservableValue modelObservable = EMFObservables.observeValue( |
| castEObject(yEditable), |
| CoreModelPackage.eINSTANCE.getYEditable_Editable()); |
| return getDatabindingContext() |
| .bindValue( |
| uiObservable, |
| modelObservable, |
| new ECViewUpdateValueStrategy( |
| UpdateValueStrategy.POLICY_UPDATE) |
| .setConverter(new BoolNegator()), |
| new ECViewUpdateValueStrategy( |
| UpdateValueStrategy.POLICY_UPDATE) |
| .setConverter(new BoolNegator())); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.IBindingManager#bindReadonlyOneway(org.eclipse.osbp.ecview.core.common.model.core.YEditable, com.vaadin.ui.Component) |
| */ |
| @Override |
| public Binding bindReadonlyOneway(YEditable yEditable, Component field) { |
| IObservableValue uiObservable = BeansObservables.observeValue(field, |
| "readOnly"); |
| IObservableValue modelObservable = EMFObservables.observeValue( |
| castEObject(yEditable), |
| CoreModelPackage.eINSTANCE.getYEditable_Editable()); |
| return getDatabindingContext() |
| .bindValue( |
| uiObservable, |
| modelObservable, |
| new ECViewUpdateValueStrategy( |
| UpdateValueStrategy.POLICY_NEVER) |
| .setConverter(new BoolNegator()), |
| new ECViewUpdateValueStrategy( |
| UpdateValueStrategy.POLICY_UPDATE) |
| .setConverter(new BoolNegator())); |
| |
| } |
| |
| /** |
| * Negates booleans. |
| */ |
| private static class BoolNegator implements IConverter { |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.core.databinding.conversion.IConverter#getFromType() |
| */ |
| @Override |
| public Object getFromType() { |
| return Boolean.class; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.core.databinding.conversion.IConverter#getToType() |
| */ |
| @Override |
| public Object getToType() { |
| return Boolean.class; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.core.databinding.conversion.IConverter#convert(java.lang.Object) |
| */ |
| @Override |
| public Object convert(Object fromObject) { |
| return !((Boolean) fromObject); |
| } |
| |
| } |
| |
| } |