Java tutorial
/* * Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved. * * This program and the accompanying materials are made available * under the terms of the Eclipse Public License, Version 1.0, * which accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html * */ package net.rim.ejde.internal.imports; import java.lang.reflect.InvocationTargetException; import net.rim.ejde.internal.ui.wizards.BlackBerryElementWizard; import org.apache.log4j.Logger; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.operation.IThreadListener; /** * This class is a help class to create a workspace runnable task which can batch workspace resource change events and broadcast * them after the job is done. * * */ public class WorkspaceRunnableAdapter implements IRunnableWithProgress, IThreadListener { static private final Logger _log = Logger.getLogger(BlackBerryElementWizard.class); private IWorkspaceRunnable _runnable; private ISchedulingRule _rule; private boolean _transfer; /** * Runs a workspace runnable with the workspace lock. * * @param runnable * the runnable */ public WorkspaceRunnableAdapter(IWorkspaceRunnable runnable) { this(runnable, ResourcesPlugin.getWorkspace().getRoot()); } /** * Runs a workspace runnable with the given lock or <code>null</code> to run with no lock at all. * * @param runnable * the runnable * @param rule * the scheduling rule, or <code>null</code> */ public WorkspaceRunnableAdapter(IWorkspaceRunnable runnable, ISchedulingRule rule) { _runnable = runnable; _rule = rule; } /** * Runs a workspace runnable with the given lock or <code>null</code> to run with no lock at all. * * @param runnable * the runnable * @param rule * the scheduling rule, or <code>null</code> * @param transfer * <code>true</code> if the rule is to be transfered to the modal context thread */ public WorkspaceRunnableAdapter(IWorkspaceRunnable runnable, ISchedulingRule rule, boolean transfer) { _runnable = runnable; _rule = rule; _transfer = transfer; } public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { JavaCore.run(_runnable, _rule, monitor); } catch (OperationCanceledException e) { _log.error(e); throw new InterruptedException(e.getMessage()); } catch (CoreException e) { _log.error(e); throw new InvocationTargetException(e); } } public void threadChange(Thread thread) { if (_transfer) { Job.getJobManager().transferRule(_rule, thread); } } }