| /** |
| * 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.component.internal; |
| |
| import java.lang.reflect.Method; |
| import java.util.Arrays; |
| |
| import org.eclipse.core.databinding.property.IProperty; |
| import org.eclipse.core.databinding.property.ISimplePropertyListener; |
| import org.eclipse.core.databinding.property.NativePropertyListener; |
| |
| import com.vaadin.event.MethodEventSource; |
| import com.vaadin.ui.Component; |
| import com.vaadin.ui.Component.Event; |
| import com.vaadin.util.ReflectTools; |
| |
| // TODO: Auto-generated Javadoc |
| /** |
| * The listener interface for receiving component events. The class that is |
| * interested in processing a component event implements this interface, and the |
| * object created with that class is registered with a component using the |
| * component's <code>addComponentListener</code> method. When |
| * the component event occurs, that object's appropriate |
| * method is invoked. |
| * |
| * @see #componentEvent |
| */ |
| @SuppressWarnings("serial") |
| public class ComponentListener extends NativePropertyListener implements |
| Component.Listener { |
| |
| /** The Constant COMPONENT_EVENT_METHOD. */ |
| public static final Method COMPONENT_EVENT_METHOD = ReflectTools |
| .findMethod(ComponentListener.class, "componentEvent", |
| Component.Event.class); |
| |
| /** The change events. */ |
| private final Class<? extends Component.Event>[] changeEvents; |
| |
| /** The stale events. */ |
| private final Class<? extends Component.Event>[] staleEvents; |
| |
| /** |
| * Instantiates a new component listener. |
| * |
| * @param property |
| * the property |
| * @param listener |
| * the listener |
| * @param changeEvents |
| * the change events |
| * @param staleEvents |
| * the stale events |
| */ |
| public ComponentListener(IProperty property, |
| ISimplePropertyListener listener, |
| Class<? extends Component.Event>[] changeEvents, |
| Class<? extends Component.Event>[] staleEvents) { |
| super(property, listener); |
| this.changeEvents = Arrays.copyOf(changeEvents, changeEvents.length); |
| this.staleEvents = Arrays.copyOf(staleEvents, staleEvents.length); |
| } |
| |
| /* (non-Javadoc) |
| * @see com.vaadin.ui.Component.Listener#componentEvent(com.vaadin.ui.Component.Event) |
| */ |
| @Override |
| public void componentEvent(com.vaadin.ui.Component.Event event) { |
| if (staleEvents != null) { |
| for (int i = 0; i < staleEvents.length; i++) { |
| if (event.getClass().isAssignableFrom(staleEvents[i])) { |
| fireStale(event.getComponent()); |
| break; |
| } |
| } |
| } |
| if (changeEvents != null) { |
| for (int i = 0; i < changeEvents.length; i++) { |
| if (event.getClass().isAssignableFrom(changeEvents[i])) { |
| fireChange(event.getComponent(), null); |
| break; |
| } |
| } |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.core.databinding.property.NativePropertyListener#doAddTo(java.lang.Object) |
| */ |
| protected void doAddTo(Object source) { |
| Component widget = (Component) source; |
| if (changeEvents != null) { |
| for (int i = 0; i < changeEvents.length; i++) { |
| Class<? extends Event> event = changeEvents[i]; |
| if (event != null) { |
| ComponentListenerUtil.asyncAddListener( |
| (MethodEventSource) widget, event, this, |
| COMPONENT_EVENT_METHOD); |
| } |
| } |
| } |
| if (staleEvents != null) { |
| for (int i = 0; i < staleEvents.length; i++) { |
| Class<? extends Event> event = staleEvents[i]; |
| if (event != null) { |
| ComponentListenerUtil.asyncAddListener( |
| (MethodEventSource) widget, event, this, |
| COMPONENT_EVENT_METHOD); |
| } |
| } |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.core.databinding.property.NativePropertyListener#doRemoveFrom(java.lang.Object) |
| */ |
| protected void doRemoveFrom(Object source) { |
| Component widget = (Component) source; |
| if (changeEvents != null) { |
| for (int i = 0; i < changeEvents.length; i++) { |
| Class<? extends Event> event = changeEvents[i]; |
| if (event != null) { |
| ComponentListenerUtil.asyncRemoveListener( |
| (MethodEventSource) widget, event, this, |
| COMPONENT_EVENT_METHOD); |
| } |
| } |
| } |
| if (staleEvents != null) { |
| for (int i = 0; i < staleEvents.length; i++) { |
| Class<? extends Event> event = staleEvents[i]; |
| if (event != null) { |
| ComponentListenerUtil.asyncRemoveListener( |
| (MethodEventSource) widget, event, this, |
| COMPONENT_EVENT_METHOD); |
| } |
| } |
| } |
| } |
| |
| } |