/* * Copyright (c) 2009 Netcetera AG and others. * 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: * - Netcetera AG: initial implementation */ package ch.netcetera.eclipse.workspaceconfig.ui.handler; import org.eclipse.core.commands.common.CommandException; import org.eclipse.core.runtime.ILog; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.ui.IStartup; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.IHandlerService; import org.osgi.framework.FrameworkUtil; import ch.netcetera.eclipse.workspaceconfig.ui.PluginImages; import ch.netcetera.eclipse.workspaceconfig.ui.WorkspaceConfigurationUIPlugin; import ch.netcetera.eclipse.workspaceconfig.ui.preferences.ConfigurationUtil; import ch.netcetera.eclipse.workspaceconfig.ui.preferences.WorkspaceConfigurationConstants; import ch.netcetera.eclipse.workspaceconfig.ui.util.WorkspaceConfigurationStatusUtil; /** * Class that is called by the environment on startup. It then checks whether a * new workspace is started and offers to import a remote configuration. */ public class WorkspaceStartupHandler implements IStartup { /** Dialog result to enable the configuration. */ protected static final int IMPORT_CONFIG = 0; /** Dialog result to skip the configuration. */ protected static final int DO_NOT_IMPORT_CONFIG = 1; /** {@inheritDoc} */ @Override public void earlyStartup() { final IWorkbench workbench = PlatformUI.getWorkbench(); final String bundleId = FrameworkUtil.getBundle(getClass()).getSymbolicName(); boolean isNewWorkspace = WorkspaceConfigurationStatusUtil.isNewWorkspace(); boolean checkEnabled = Platform.getPreferencesService().getBoolean(bundleId, WorkspaceConfigurationConstants.CONFIG_STARTUP_CHECK, true, null); boolean urlConfigured = ConfigurationUtil.isEpfUrlConfigured(); if (checkEnabled && isNewWorkspace && urlConfigured) { workbench.getDisplay().asyncExec(new Runnable() { @Override public void run() { IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); if (window != null) { String[] buttonLabels = new String[] { WorkspaceConfigurationUIPlugin.getDefault().getText("startup.handler.dialog.button.yes"), WorkspaceConfigurationUIPlugin.getDefault().getText("startup.handler.dialog.button.no"), WorkspaceConfigurationUIPlugin.getDefault().getText("startup.handler.dialog.button.ask.again")}; String message = WorkspaceConfigurationUIPlugin.getDefault().getText("startup.handler.dialog.text"); Image titleImage = WorkspaceConfigurationUIPlugin.getImageDescriptor( PluginImages.IMG_DIALOG_TITLE).createImage(); String title = WorkspaceConfigurationUIPlugin.getDefault().getText("startup.handler.dialog.title"); MessageDialog dialog = new MessageDialog(window.getShell(), title, titleImage, message, MessageDialog.QUESTION, buttonLabels, 0); int result = dialog.open(); if (result == IMPORT_CONFIG) { applySettings(); WorkspaceConfigurationStatusUtil.writeConfiguredFlag(); } else if (result == DO_NOT_IMPORT_CONFIG) { WorkspaceConfigurationStatusUtil.writeNoConfigFlag(); } // else: do nothing } } private void applySettings() { IHandlerService service = (IHandlerService) workbench.getService(IHandlerService.class); try { service.executeCommand(ImportWorkspaceConfigurationHandler.COMMAND_ID, null); } catch (CommandException e) { ILog log = WorkspaceConfigurationUIPlugin.getDefault().getLog(); log.log(new Status(IStatus.ERROR, bundleId, "applying settings failed", e)); displayErrorDialog(); } } }); } } /** * Displays an error dialog that the import failed. */ private void displayErrorDialog() { WorkspaceConfigurationStatusUtil.writeErrorFlag(); MessageBox errorDialog = new MessageBox( WorkspaceConfigurationUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.ERROR); errorDialog.setText(WorkspaceConfigurationUIPlugin.getDefault().getText( "startup.handler.resultdialog.title.error")); errorDialog.setMessage(WorkspaceConfigurationUIPlugin.getDefault().getText( "startup.handler.resultdialog.text.error")); errorDialog.open(); } }