blob: c163b20250c45551f3fa89d319ad51ed8c06dbc4 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2007 IBM Corporation 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.rcp.ui;
import java.net.URL;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.epf.authoring.ui.AuthoringPerspective;
import org.eclipse.epf.common.service.utils.CommandLineRunUtil;
import org.eclipse.epf.common.serviceability.Logger;
import org.eclipse.epf.persistence.refresh.RefreshJob;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.IWorkbenchConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchAdvisor;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.internal.WorkbenchPage;
import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
import org.eclipse.ui.internal.ide.model.WorkbenchAdapterBuilder;
import org.osgi.framework.Bundle;
/**
* Creates the window advisor and specifies the perspective id for the initial
* window.
*
* @author Bingxue Xu
* @author Kelvin Low
* @author Phong Nguyen Le
* @since 1.0
*/
public class MainWorkbenchAdvisor extends WorkbenchAdvisor {
protected Logger logger;
private void declareWorkbenchImage(Bundle ideBundle, String symbolicName,
String path, boolean shared) {
URL url = FileLocator.find(ideBundle, new Path(path), null);
ImageDescriptor desc = ImageDescriptor.createFromURL(url);
getWorkbenchConfigurer().declareImage(symbolicName, desc, shared);
}
/**
* Declares all IDE-specific workbench images that are used by some bundled
* plugins
*
* @see IWorkbenchConfigurer#declareImage
*/
private void declareWorkbenchImages() {
final String ICONS_PATH = "$nl$/icons/full/";//$NON-NLS-1$
final String PATH_OBJECT = ICONS_PATH + "obj16/"; // Model object // icons//$NON-NLS-1$
final String PATH_ETOOL = ICONS_PATH + "etool16/"; // Enabled toolbar icons.//$NON-NLS-1$
Bundle ideBundle = Platform.getBundle("org.eclipse.ui.ide"); //$NON-NLS-1$
declareWorkbenchImage(ideBundle, IDE.SharedImages.IMG_OBJ_PROJECT,
PATH_OBJECT + "prj_obj.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED, PATH_OBJECT
+ "cprj_obj.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_OBJS_ERROR_PATH, PATH_OBJECT
+ "error_tsk.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_OBJS_WARNING_PATH, PATH_OBJECT
+ "warn_tsk.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_OBJS_INFO_PATH, PATH_OBJECT
+ "info_tsk.gif", true); //$NON-NLS-1$
declareWorkbenchImage(ideBundle,
IDEInternalWorkbenchImages.IMG_ETOOL_PROBLEM_CATEGORY,
PATH_ETOOL + "problem_category.gif", true); //$NON-NLS-1$
}
/*
* @see org.eclipse.ui.application.WorkbenchAdvisor#initialize(IWorkbenchConfigurer)
*/
public void initialize(IWorkbenchConfigurer configurer) {
logger = RCPUIPlugin.getDefault().getLogger();
super.initialize(configurer);
configurer.setSaveAndRestore(true);
// Remember the install dir and handle the -library command line
// parameter.
String appStartDir = System.getProperty("user.dir"); //$NON-NLS-1$
logger.logInfo(RCPUIResources.startup_dir_log_info_text + appStartDir);
declareWorkbenchImages();
}
/*
* @see org.eclipse.ui.application.WorkbenchAdvisor#createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer)
*/
public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurer configurer) {
return new MainWorkbenchWindowAdvisor(configurer);
}
/*
* @see org.eclipse.ui.application.WorkbenchAdvisor#getInitialWindowPerspectiveId()
*/
public String getInitialWindowPerspectiveId() {
if (PlatformUI.getWorkbench().isClosing())
return null;
return AuthoringPerspective.PERSPECTIVE_ID;
}
/*
* @see org.eclipse.ui.application.WorkbenchAdvisor#preStartup()
*/
public void preStartup() {
super.preStartup();
WorkbenchAdapterBuilder.registerAdapters();
}
/*
* @see org.eclipse.ui.application.WorkbenchAdvisor#preShutdown()
*/
public boolean preShutdown() {
// Remember whether the welcome view exists or not before exiting.
IWorkbenchWindow activeWindow = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow();
if (activeWindow != null) {
IWorkbenchPage page = activeWindow.getActivePage();
if (page != null) {
if (page instanceof WorkbenchPage) {
IViewReference[] vwRefList = page.getViewReferences();
boolean introViewExists = false;
for (int i = 0; i < vwRefList.length; i++) {
if (vwRefList[i].getId().equals(
"org.eclipse.ui.internal.introview")) { //$NON-NLS-1$
introViewExists = true;
break;
}
}
IPreferenceStore store = RCPUIPlugin.getDefault()
.getPreferenceStore();
store
.setValue(
"welcome_intro_view_exists", introViewExists); //$NON-NLS-1$
RCPUIPlugin.getDefault().savePluginPreferences();
}
}
}
return true;
}
/*
* @see org.eclipse.ui.application.WorkbenchAdvisor#postShutdown()
*/
public void postShutdown() {
try {
// Save the workspace and remove .snap file in the
// workspace\.metadata\.plugins\org.eclipse.core.resources folder.
ResourcesPlugin.getWorkspace().save(true, null);
} catch (CoreException e) {
}
}
/*
* @see org.eclipse.ui.application.WorkbenchAdvisor#postStartup()
*/
public void postStartup() {
super.postStartup();
}
public void eventLoopIdle(Display display) {
CommandLineRunUtil runUtil = CommandLineRunUtil.getInstance();
if (runUtil.isNeedToRun() && runUtil.isNeverExcuted()) {
runUtil.execute(Platform.getApplicationArgs());
final IWorkbench workbench = getWorkbenchConfigurer()
.getWorkbench();
workbench.getDisplay().asyncExec(new Runnable() {
public void run() {
if (! RefreshJob.getInstance().cancel()) {
try {
RefreshJob.getInstance().join();
} catch (Exception e) {
}
}
RefreshJob.getInstance().setEnabled(false);
RefreshJob.getInstance().reset();
workbench.close();
}
});
}
super.eventLoopIdle(display);
}
}