/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.workflow; import java.net.URL; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import de.rcenvironment.core.component.execution.api.ComponentState; import de.rcenvironment.core.component.workflow.execution.api.WorkflowState; import de.rcenvironment.core.gui.resources.api.ImageManager; import de.rcenvironment.core.gui.resources.api.StandardImages; /** * * Activates the Bundle. * <ul> * <li>Registers an IWorkbenchListener to display a confirm dialog upon shutdown in case undisposed * workflows exist</li> * </ul> * * @author Christian Weiss * @author Oliver Seebach */ public class Activator extends AbstractUIPlugin { /** Image identifier. */ public static final String IMAGE_WORKFLOW_EDITOR_BACKGROUND = "de.rcenvironment.rce.gui.workflow.editor.background"; /** Image identifier. */ public static final String IMAGE_INPUT = "de.rcenvironment.rce.gui.workflow.editor.input"; /** Image identifier. */ public static final String IMAGE_OUTPUT = "de.rcenvironment.rce.gui.workflow.editor.output"; /** Image identifier. */ public static final String IMAGE_ADD_INPUT = "de.rcenvironment.rce.gui.workflow.editor.addinput"; /** Image identifier. */ public static final String IMAGE_ADD_OUTPUT = "de.rcenvironment.rce.gui.workflow.editor.addoutput"; /** Image identifier. */ public static final String IMAGE_RCE_ICON_16 = "de.rcenvironment.rce.icon.16"; /** Image identifier. */ public static final String IMAGE_RCE_ICON_32 = "de.rcenvironment.rce.icon.32"; /** Image identifier. */ public static final String IMAGE_COPY = "de.rcenvironment.rce.gui.copy"; /** Image identifier. */ public static final String UNKNOWN_STATE = "de.rcenvironment.rce.gui.workflow.state.unknown"; private static Activator instance = null; private UncompletedJobsShutdownListener uncompletedJobsShutdownListener = null; private ActiveWorkflowShutdownListener undisposedWorkflowShutdownListener = null; @Override public void start(BundleContext context) throws Exception { super.start(context); instance = this; } @Override public void stop(BundleContext context) throws Exception { super.stop(context); instance = null; } /** * Registers {@link ActiveWorkflowShutdownListener} if not registered yet. */ public synchronized void registerUndisposedWorkflowShutdownListener() { if (undisposedWorkflowShutdownListener == null) { undisposedWorkflowShutdownListener = new ActiveWorkflowShutdownListener(); PlatformUI.getWorkbench().addWorkbenchListener(undisposedWorkflowShutdownListener); } if (uncompletedJobsShutdownListener == null) { uncompletedJobsShutdownListener = new UncompletedJobsShutdownListener(); PlatformUI.getWorkbench().addWorkbenchListener(uncompletedJobsShutdownListener); } } /** * Unregisters {@link ActiveWorkflowShutdownListener} if registered. */ public synchronized void unregisterUndisposedWorkflowShutdownListener() { if (undisposedWorkflowShutdownListener != null) { PlatformUI.getWorkbench().removeWorkbenchListener(undisposedWorkflowShutdownListener); } if (uncompletedJobsShutdownListener != null) { PlatformUI.getWorkbench().removeWorkbenchListener(uncompletedJobsShutdownListener); } } public static Activator getInstance() { return instance; } @Override protected void initializeImageRegistry(ImageRegistry reg) { Bundle bundle = Platform.getBundle("de.rcenvironment.core.gui.workflow"); initializeImageRegistry1(reg, bundle); initializeImageRegistry2(reg, bundle); super.initializeImageRegistry(reg); } private void initializeImageRegistry1(ImageRegistry reg, Bundle bundle) { IPath path; URL url; ImageDescriptor desc; // idling path = new Path("resources/icons/states/ready.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(ComponentState.IDLING.name(), desc); // idling after reset path = new Path("resources/icons/states/resetting.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(ComponentState.RESETTING.name(), desc); // idling after reset path = new Path("resources/icons/states/reset.png"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(ComponentState.IDLING_AFTER_RESET.name(), desc); // preparing path = new Path("resources/icons/states/preparing.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.INIT.name(), desc); reg.put(WorkflowState.PREPARING.name(), desc); reg.put(ComponentState.INIT.name(), desc); reg.put(ComponentState.PREPARING.name(), desc); reg.put(ComponentState.PREPARED.name(), desc); // running path = new Path("resources/icons/states/run_enabled.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.RUNNING.name(), desc); reg.put(ComponentState.PROCESSING_INPUTS.name(), desc); reg.put(ComponentState.STARTING.name(), desc); // waiting for resources path = new Path("resources/icons/states/run_and_wait_for_resources.png"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(ComponentState.WAITING_FOR_RESOURCES.name(), desc); // waiting for verification path = new Path("resources/icons/states/waiting_for_approval.png"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(ComponentState.WAITING_FOR_APPROVAL.name(), desc); // verification failed path = new Path("resources/icons/states/results_rejected.png"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(ComponentState.RESULTS_REJECTED.name(), desc); reg.put(WorkflowState.RESULTS_REJECTED.name(), desc); // pausing path = new Path("resources/icons/states/suspend_disabled.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.PAUSING.name(), desc); reg.put(ComponentState.PAUSING.name(), desc); // paused path = new Path("resources/icons/states/suspend_enabled.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.PAUSED.name(), desc); reg.put(ComponentState.PAUSED.name(), desc); // resuming path = new Path("resources/icons/states/resume_enabled.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.RESUMING.name(), desc); reg.put(ComponentState.RESUMING.name(), desc); // tearing down path = new Path("resources/icons/states/tearing_down.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(ComponentState.TEARING_DOWN.name(), desc); // finished path = new Path("resources/icons/states/finished.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.FINISHED.name(), desc); reg.put(ComponentState.FINISHED.name(), desc); } private void initializeImageRegistry2(ImageRegistry reg, Bundle bundle) { IPath path; URL url; ImageDescriptor desc; // canceling path = new Path("resources/icons/states/cancel_disabled.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.CANCELING.name(), desc); reg.put(WorkflowState.CANCELING_AFTER_FAILED.name(), desc); reg.put(WorkflowState.CANCELING_AFTER_RESULTS_REJECTED.name(), desc); reg.put(ComponentState.CANCELLING.name(), desc); // canceled path = new Path("resources/icons/states/cancel_enabled.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.CANCELLED.name(), desc); reg.put(ComponentState.CANCELED.name(), desc); // failed path = new Path("resources/icons/states/failed.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.FAILED.name(), desc); reg.put(ComponentState.FAILED.name(), desc); // disposing path = new Path("resources/icons/states/disposed.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.DISPOSING.name(), desc); reg.put(WorkflowState.DISPOSED.name(), desc); reg.put(ComponentState.DISPOSING.name(), desc); reg.put(ComponentState.DISPOSED.name(), desc); // unknown path = new Path("/resources/icons/states/unknownState.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(WorkflowState.UNKNOWN.name(), desc); reg.put(ComponentState.UNKNOWN.name(), desc); // finished no run path = new Path("resources/icons/states/finishedNoRun.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(ComponentState.FINISHED_WITHOUT_EXECUTION.name(), desc); // editor background path = new Path("resources/editor-background.png"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(IMAGE_WORKFLOW_EDITOR_BACKGROUND, desc); // input icon path = new Path("resources/icons/endpoints/input.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(IMAGE_INPUT, desc); // output icon path = new Path("resources/icons/endpoints/output.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(IMAGE_OUTPUT, desc); // additional (dynamic) input icon path = new Path("resources/icons/endpoints/addInput.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(IMAGE_ADD_INPUT, desc); // additional (dynamic) output icon path = new Path("resources/icons/endpoints/addOutput.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(IMAGE_ADD_OUTPUT, desc); ImageManager sharedImageManager = ImageManager.getInstance(); // RCE icons reg.put(IMAGE_RCE_ICON_16, sharedImageManager.getSharedImage(StandardImages.RCE_LOGO_16)); reg.put(IMAGE_RCE_ICON_32, sharedImageManager.getSharedImage(StandardImages.RCE_LOGO_32)); path = new Path("resources/icons/copy.gif"); url = FileLocator.find(bundle, path, null); desc = ImageDescriptor.createFromURL(url); reg.put(IMAGE_COPY, desc); } }