package org.ovirt.engine.ui.webadmin.plugin; import java.util.logging.Logger; import org.ovirt.engine.ui.common.auth.CurrentUser; import org.ovirt.engine.ui.common.auth.UserLoginChangeEvent; import org.ovirt.engine.ui.webadmin.plugin.entity.EntityObject; import org.ovirt.engine.ui.webadmin.plugin.entity.SystemTreeItemObject; import org.ovirt.engine.ui.webadmin.plugin.entity.TagObject; import org.ovirt.engine.ui.webadmin.plugin.jsni.JsArrayHelper; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.ClusterSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.DataCenterSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.DiskSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.EventSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.HostSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.NetworkSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.PoolSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.ProviderSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.QuotaSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.StorageSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.TemplateSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.UserSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.VirtualMachineSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.VolumeSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.system.MessageEventData; import org.ovirt.engine.ui.webadmin.system.MessageReceivedEvent; import org.ovirt.engine.ui.webadmin.uicommon.model.SystemTreeSelectionChangeEvent; import org.ovirt.engine.ui.webadmin.uicommon.model.TagActivationChangeEvent; import com.google.gwt.event.shared.EventBus; import com.google.inject.Inject; /** * Handles WebAdmin application events to be consumed by UI plugins. * <p> * Should be bound as GIN eager singleton, created early on during application startup. */ public class PluginEventHandler { private static final Logger logger = Logger.getLogger(PluginEventHandler.class.getName()); @Inject public PluginEventHandler(EventBus eventBus, final PluginManager manager, final CurrentUser user) { // User login and logout eventBus.addHandler(UserLoginChangeEvent.getType(), event -> { if (user.isLoggedIn()) { manager.invokePluginsNowOrLater("UserLogin", //$NON-NLS-1$ JsArrayHelper.createStringArray(user.getFullUserName(), user.getUserId())); } else { manager.invokePluginsNowOrLater("UserLogout", null); //$NON-NLS-1$ } }); // Standard main tab item selection change eventBus.addHandler(DataCenterSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("DataCenterSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(ClusterSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("ClusterSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(HostSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("HostSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(NetworkSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("NetworkSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(StorageSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("StorageSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(DiskSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("DiskSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(VirtualMachineSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("VirtualMachineSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(PoolSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("PoolSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(TemplateSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("TemplateSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(VolumeSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("GlusterVolumeSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(ProviderSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("ProviderSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(UserSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("UserSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(QuotaSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("QuotaSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); eventBus.addHandler(EventSelectionChangeEvent.getType(), event -> manager.invokePluginsNow("EventSelectionChange", //$NON-NLS-1$ EntityObject.arrayFrom(event.getSelectedItems()))); // System tree item selection change eventBus.addHandler(SystemTreeSelectionChangeEvent.getType(), event -> { if (event.getSelectedItem() != null) { manager.invokePluginsNow("SystemTreeSelectionChange", //$NON-NLS-1$ JsArrayHelper.createMixedArray( SystemTreeItemObject.from(event.getSelectedItem()))); } }); // Cross-window messaging eventBus.addHandler(MessageReceivedEvent.getType(), event -> { final MessageEventData eventData = event.getData(); manager.invokePluginsNowOrLater("MessageReceived", //$NON-NLS-1$ JsArrayHelper.createMixedArray(eventData.getData(), eventData.getSourceWindow()), plugin -> { if (eventData.originMatches(plugin.getApiOptionsObject().getAllowedMessageOrigins())) { return true; } logger.info("Plugin [" + plugin.getName() //$NON-NLS-1$ + "] rejected message event for origin [" + eventData.getOrigin() + "]"); //$NON-NLS-1$ //$NON-NLS-2$ return false; }); }); // Tag Activation Change Event. eventBus.addHandler(TagActivationChangeEvent.getType(), event -> manager.invokePluginsNow("TagActivationChange", //$NON-NLS-1$ TagObject.activeTagArray(event.getActiveTags()))); } }