blob: e55d6c62643a9832e121b81d80c40f914fd03614 [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 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Florian Pirchner - Initial implementation
*/
package org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal.services;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.osbp.ecview.core.common.context.IViewContext;
import org.eclipse.osbp.ecview.core.common.model.core.YEmbeddable;
import org.eclipse.osbp.ecview.core.common.services.IWidgetAssocationsService;
import org.eclipse.osbp.ecview.core.common.tooling.IWidgetMouseClickService;
import org.eclipse.osbp.runtime.common.event.IEventBroker;
import com.vaadin.event.LayoutEvents;
import com.vaadin.event.LayoutEvents.LayoutClickEvent;
import com.vaadin.event.LayoutEvents.LayoutClickListener;
import com.vaadin.event.LayoutEvents.LayoutClickNotifier;
import com.vaadin.ui.Component;
import com.vaadin.ui.Panel;
@SuppressWarnings("serial")
public class WidgetMouseClickService implements IWidgetMouseClickService,
LayoutClickListener {
private Set<Listener> listeners = Collections
.synchronizedSet(new HashSet<IWidgetMouseClickService.Listener>());
private IWidgetAssocationsService<Component, YEmbeddable> associations;
private IViewContext context;
private LayoutClickNotifier widget;
private IEventBroker eventBroker;
public WidgetMouseClickService(IViewContext context) {
this.context = context;
this.associations = context.getService(IWidgetAssocationsService.ID);
this.eventBroker = context.getService(IEventBroker.class.getName());
}
@Override
public void addListener(Listener listener) {
listeners.add(listener);
}
@Override
public void removeListener(Listener listener) {
listeners.remove(listener);
}
@Override
public void activate() {
Panel panel = (Panel) context.getViewEditpart().getPresentation()
.getWidget();
widget = (LayoutEvents.LayoutClickNotifier) panel.getContent();
widget.addLayoutClickListener(this);
}
@Override
public void dactivate() {
if (widget != null) {
widget.removeLayoutClickListener(this);
widget = null;
}
}
@Override
public void layoutClick(LayoutClickEvent event) {
synchronized (listeners) {
Object model = associations.getModelElement(event
.getClickedComponent());
for (Listener listener : listeners) {
listener.clicked(model);
}
if (eventBroker != null) {
Map<String, Object> data = new HashMap<String, Object>();
data.put(PROP_MODEL_ELEMENT, model);
data.put(PROP_WIDGET, event.getChildComponent());
eventBroker.send(IWidgetMouseClickService.EVENT_TOPIC, data);
}
}
}
}