blob: 36454e66da43122d6f3d7f7216c118784f0a33d7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2004 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:
* Andy Clement - initial version
* Sian January - added Jobs support
*******************************************************************************/
package org.eclipse.contribution.visualiser;
import org.eclipse.contribution.visualiser.core.ProviderManager;
import org.eclipse.contribution.visualiser.internal.preference.VisualiserPreferences;
import org.eclipse.contribution.visualiser.text.VisualiserMessages;
import org.eclipse.contribution.visualiser.views.Menu;
import org.eclipse.contribution.visualiser.views.Visualiser;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The main plugin class for the Visualiser plugin.
*/
public class VisualiserPlugin extends AbstractUIPlugin {
public static final String PLUGIN_ID = "org.eclipse.contribution.visualiser"; //$NON-NLS-1$
public static int LOGLEVEL = 0;
public static Visualiser visualiser;
public static Menu menu;
private static VisualiserPlugin plugin;
public static final String VIEWS_MENU = "org.eclipse.contribution.visualiser.views.Menu";
/**
* 3.0 compatible Plugin constructor
*/
public VisualiserPlugin() {
super();
plugin = this;
}
/**
* Getter method for the provider manager
* @return the provider manager
*/
public static ProviderManager getProviderManager() {
return ProviderManager.getProviderManager();
}
/**
* Refresh the Visualiser views.
*/
public static void refresh() {
if (visualiser != null && visualiser.getSite() != null) {
if(visualiser.getSite().getPage().isPartVisible(visualiser)) {
VisualiserUpdateJob.getInstance().schedule();
} else {
visualiser.setNeedsUpdating();
}
}
}
/**
* Gets the active workbench window
*/
public static IWorkbenchWindow getActiveWorkbenchWindow() {
return getDefault().getWorkbench().getActiveWorkbenchWindow();
}
/**
* Returns the shared instance as VisualiserPlugin is a singleton.
*/
public static VisualiserPlugin getDefault() {
return plugin;
}
/**
* Returns the workspace instance.
*/
public static IWorkspace getWorkspace() {
return ResourcesPlugin.getWorkspace();
}
/**
* Set the Visualiser view
*/
public void setVisualiser(Visualiser visualiser) {
VisualiserPlugin.visualiser = visualiser;
// When the visualiser is known, tell it where to get its data from
// and activate the content provider
VisualiserPlugin.visualiser.setVisContentProvider(ProviderManager.getContentProvider());
VisualiserPlugin.visualiser.setVisMarkupProvider(ProviderManager.getMarkupProvider());
ProviderManager.getContentProvider().activate();
if(VisualiserPlugin.menu != null) {
VisualiserPlugin.refresh();
}
}
/**
* Remove the Visualiser view
*/
public void removeVisualiser() {
VisualiserPlugin.visualiser = null;
}
/**
* Set the Visualiser Menu view
*/
public void setMenu(Menu menu) {
VisualiserPlugin.menu = menu;
// When the menu is known, tell it where to get its data from
// and activate the markup provider
VisualiserPlugin.menu.setVisMarkupProvider(ProviderManager.getMarkupProvider());
ProviderManager.getMarkupProvider().activate();
if(VisualiserPlugin.visualiser != null) {
VisualiserPlugin.refresh();
}
}
/**
* Remove the Visualiser Menu view
*/
public void removeMenu() {
VisualiserPlugin.menu = null;
}
/**
* Log the given message at the given log level.
* @param logLevel
* @param message
*/
public static void log(int logLevel, String message) {
if (logLevel<=LOGLEVEL) {
System.err.println(message);
VisualiserPlugin.getDefault().getLog().log(new Status(Status.INFO, "org.eclipse.contribution.visualiser", 0, message, null)); //$NON-NLS-1$
}
}
/**
* Write the given exception or error to the log file (without displaying a dialog)
* @param e
*/
public static void logException(Throwable e) {
IStatus status = null;
if (e instanceof CoreException) {
status = ((CoreException) e).getStatus();
} else {
String message = e.getMessage();
if (message == null) {
message = e.toString();
}
status = new Status(IStatus.ERROR, VisualiserPlugin.PLUGIN_ID, IStatus.OK, message, e);
}
getDefault().getLog().log(status);
}
/**
* This method is called upon plug-in activation - process any
* defined extensions and add the resource change listener.
*/
public void start(BundleContext context) throws Exception {
super.start(context);
ProviderManager.initialise();
VisualiserPreferences.initDefaults();
}
/**
* This method is called when the plug-in is stopped
*/
public void stop(BundleContext context) throws Exception {
super.stop(context);
}
}
/*
* Job that updates the Visualiser
* This update job includes collecting the visualization data, wheras
* the two redraw jobs in the Visualiser and Menu classes only cover the redrawing.
*/
class VisualiserUpdateJob extends Job {
private static VisualiserUpdateJob theJob;
private VisualiserUpdateJob(String name){
super (name);
}
public static VisualiserUpdateJob getInstance() {
if(theJob == null) {
theJob = new VisualiserUpdateJob(VisualiserMessages.Jobs_VisualiserUpdate);
theJob.setUser(true);
theJob.setPriority(Job.INTERACTIVE);
}
return theJob;
}
public IStatus run(IProgressMonitor monitor) {
if (VisualiserPlugin.visualiser!=null) {
VisualiserPlugin.visualiser.updateDisplay(true, monitor);
}
return Status.OK_STATUS;
}
}