blob: 3c05ce057730427b34d138ca519bc798726e41af [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.vaadin.databinding.properties;
import java.util.Arrays;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.core.databinding.observable.set.IObservableSet;
import org.eclipse.core.databinding.property.INativePropertyListener;
import org.eclipse.core.databinding.property.ISimplePropertyListener;
import org.eclipse.core.databinding.property.set.SimpleSetProperty;
import org.eclipse.osbp.runtime.web.vaadin.databinding.VaadinObservables;
import org.eclipse.osbp.runtime.web.vaadin.databinding.component.internal.ComponentListener;
import org.eclipse.osbp.runtime.web.vaadin.databinding.values.IVaadinObservableSet;
import org.eclipse.osbp.runtime.web.vaadin.databinding.values.VaadinObservableSetDecorator;
import com.vaadin.ui.Component;
public abstract class AbstractVaadinSetProperty extends SimpleSetProperty
implements IVaadinSetProperty {
private Class<? extends Component.Event>[] changeEvents;
private Class<? extends Component.Event>[] staleEvents;
/**
* Constructs a ComponentValueProperty which does not listen for any vaadin
* events.
*/
protected AbstractVaadinSetProperty() {
this(null, null);
}
/**
* Constructs a ComponentValueProperty with the specified vaadin event type
*
* @param changeEvent
* vaadin event type of the event that signifies a property
* change.
*/
@SuppressWarnings("unchecked")
protected AbstractVaadinSetProperty(
Class<? extends Component.Event> changeEvent) {
this(new Class[] { changeEvent }, null);
}
/**
* Constructs a ComponentValueProperty with the specified vaadin event
* type(s).
*
* @param changeEvents
* array of vaadin event constants of the events that signify a
* property change.
*/
protected AbstractVaadinSetProperty(
Class<? extends Component.Event>[] changeEvents) {
this(changeEvents, null);
}
/**
* Constructs a ComponentValueProperty with the specified vaadin event
* types.
*
* @param changeEvents
* array of vaadin event types of the events that signify a
* property change.
* @param staleEvents
* array of vaadin event types of the events that signify a
* property became stale.
*/
public AbstractVaadinSetProperty(
Class<? extends Component.Event>[] changeEvents,
Class<? extends Component.Event>[] staleEvents) {
this.changeEvents = changeEvents != null ? Arrays.copyOf(changeEvents,
changeEvents.length) : changeEvents;
this.staleEvents = staleEvents != null ? Arrays.copyOf(staleEvents,
staleEvents.length) : staleEvents;
}
public INativePropertyListener adaptListener(
ISimplePropertyListener listener) {
if (changeEvents == null && staleEvents == null) {
return null;
}
return new ComponentListener(this, listener, changeEvents, staleEvents);
}
public IVaadinObservableSet observe(Object source) {
if (source instanceof Component) {
return observe((Component) source);
}
return (IVaadinObservableSet) super.observe(source);
}
public IObservableSet observe(Realm realm, Object source) {
return wrapObservable(super.observe(realm, source), (Component) source);
}
protected IVaadinObservableSet wrapObservable(IObservableSet observable,
Object widget) {
return new VaadinObservableSetDecorator(observable);
}
public IVaadinObservableSet observe(Component widget) {
return (IVaadinObservableSet) observe(
VaadinObservables.getRealm(VaadinObservables.getUI(widget)),
widget);
}
}