/******************************************************************************* * Copyright (c) 2013 BundleMaker Project Team * 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: * Nils Hartmann - initial API and implementation ******************************************************************************/ package org.bundlemaker.core.ui.projecteditor.provider.impl; import java.lang.reflect.InvocationTargetException; import java.util.List; import org.bundlemaker.core.project.AnalyzeMode; import org.bundlemaker.core.project.IProjectContentEntry; import org.bundlemaker.core.project.IProjectContentProvider; import org.bundlemaker.core.project.IProjectDescriptionAwareBundleMakerProject; import org.bundlemaker.core.ui.ErrorDialogUtil; import org.bundlemaker.core.ui.projecteditor.Activator; import org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditor; import org.bundlemaker.core.ui.projecteditor.provider.IProjectContentProviderEditorElement; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; /** * Abstract base class for IProjectContentProviderEditor implementors * * @author Nils Hartmann (nils@nilshartmann.net) * */ public abstract class AbstractProjectContentProviderEditor implements IProjectContentProviderEditor { /** * {@inheritDoc} */ @Override public boolean canHandle(IProjectContentProvider provider) { return false; } /** * {@inheritDoc} */ @Override public Object getRootElement(IProjectDescriptionAwareBundleMakerProject project, IProjectContentProvider provider) { return provider; } /** * {@inheritDoc} */ @Override public boolean canChangeAnalyzeMode(IProjectContentProvider projectContentProvider, Object element) { // can't edit analyze mode return false; } /** * {@inheritDoc} */ @Override public void setAnalyzeMode(IProjectContentProvider projectContentProvider, Object element, AnalyzeMode analyzeMode) { // default: do nothing } /** * {@inheritDoc} */ @Override public boolean canEdit(Object selectedObject) { // can't edit anything return false; } /** * {@inheritDoc} */ @Override public boolean edit(Shell shell, IProjectDescriptionAwareBundleMakerProject project, IProjectContentProvider provider, Object selectedObject) { // can't edit anything return false; } /** * {@inheritDoc} */ @Override public boolean canRemove(Object selectedObject) { // can't remove anything return false; } /** * {@inheritDoc} */ @Override public void remove(Shell shell, IProjectDescriptionAwareBundleMakerProject project, IProjectContentProvider provider, Object selectedObject) { // default: do nothing } @Override public List<IAction> getContextMenuActions(IProjectDescriptionAwareBundleMakerProject project, List<IProjectContentProviderEditorElement> selectedElements) { // default: no context menu contribution return null; } /** * Can be used to retrieve content from a {@link IProjectContentProvider}. This method opens a Progress Monitor Dialog * in case retrieving took some time * * @param bundleMakerProject * @param projectContentProvider * @return */ protected List<IProjectContentEntry> getContentFromProvider( IProjectDescriptionAwareBundleMakerProject bundleMakerProject, IProjectContentProvider projectContentProvider) { GetBundleMakerProjectContentRunnable runnable = new GetBundleMakerProjectContentRunnable(bundleMakerProject, projectContentProvider); try { PlatformUI.getWorkbench().getProgressService().busyCursorWhile(runnable); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InterruptedException e) { // ignore e.printStackTrace(); } if (runnable.hasThrowable()) { // String pluginId = runnable.getThrowable() instanceof CoreException ? ((CoreException) runnable.getThrowable()) .getStatus().getPlugin() : Activator.PLUGIN_ID; // ErrorDialogUtil.errorDialogWithStackTrace("Error", runnable.getThrowable().getMessage(), pluginId, ErrorDialogUtil.getNestedNonCoreThrowable(runnable.getThrowable())); } return runnable.getBundleMakerProjectContent(); } /** * <p> * </p> * * @author Gerd Wütherich (gerd@gerd-wuetherich.de) */ class GetBundleMakerProjectContentRunnable implements IRunnableWithProgress { /** - */ private final IProjectDescriptionAwareBundleMakerProject _bundleMakerProject; /** - */ private final IProjectContentProvider _projectContentProvider; /** - */ private List<IProjectContentEntry> _bundleMakerProjectContent; /** - */ private Throwable _throwable; /** * <p> * Creates a new instance of type {@link GetBundleMakerProjectContentRunnable}. * </p> * * @param bundleMakerProject * @param provider */ private GetBundleMakerProjectContentRunnable(IProjectDescriptionAwareBundleMakerProject bundleMakerProject, IProjectContentProvider provider) { this._bundleMakerProject = bundleMakerProject; this._projectContentProvider = provider; } /** * {@inheritDoc} */ @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { // try { _bundleMakerProjectContent = _projectContentProvider.getBundleMakerProjectContent(); } catch (Throwable e) { _throwable = e; } } /** * <p> * </p> * * @return */ public List<IProjectContentEntry> getBundleMakerProjectContent() { return _bundleMakerProjectContent; } /** * <p> * </p> * * @return */ public Throwable getThrowable() { return _throwable; } /** * <p> * </p> * * @return */ public boolean hasThrowable() { return _throwable != null; } } }