blob: e2f37d5d3a70f724d6452c55d49d4d1cd822d7cd [file] [log] [blame]
/**
* 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);
}
}
}