/******************************************************************************
* Copyright (c) 2010-2013, Linagora
*
* 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:
* Linagora - initial API and implementation
*******************************************************************************/
package com.ebmwebsourcing.petals.common.internal.commands;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IResource;
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.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.navigator.CommonViewer;
import org.eclipse.ui.progress.IProgressService;
import com.ebmwebsourcing.petals.common.internal.PetalsCommonPlugin;
import com.ebmwebsourcing.petals.common.internal.projectscnf.PetalsProjectManager;
import com.ebmwebsourcing.petals.common.internal.provisional.projectscnf.PetalsProjectCategory;
/**
* Refreshes a Petals category.
* @author Vincent Zurczak - EBM WebSourcing
*/
public class RefreshCategoryHandler extends AbstractHandler {
/* (non-Javadoc)
* @see org.eclipse.core.commands.IHandler
* #execute(org.eclipse.core.commands.ExecutionEvent)
*/
@Override
public Object execute( ExecutionEvent event ) throws ExecutionException {
// Check the target view
IWorkbenchPart part =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();
if( part instanceof CommonNavigator ) {
final CommonViewer viewer = ((CommonNavigator) part).getCommonViewer();
// Check the selection
ISelection s = null;
try {
s = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection();
} catch( Exception e1 ) {
PetalsCommonPlugin.log( e1, IStatus.WARNING );
}
if( s != null && ! s.isEmpty()) {
final PetalsProjectCategory category = (PetalsProjectCategory) ((IStructuredSelection) s).getFirstElement();
IRunnableWithProgress irwp = new IRunnableWithProgress() {
@Override
public void run( IProgressMonitor monitor )
throws InvocationTargetException, InterruptedException {
monitor.beginTask( "Refresh in progress...", 2 );
// Refresh the workspace
try {
ResourcesPlugin.getWorkspace().getRoot().refreshLocal( IResource.DEPTH_INFINITE, monitor );
PetalsProjectManager.INSTANCE.rebuildCategoryAssociations();
} catch( CoreException e1 ) {
PetalsCommonPlugin.log( e1, IStatus.WARNING );
} finally {
// Refresh the category contents
monitor.worked( 1 );
Display.getDefault().asyncExec( new Runnable() {
@Override
public void run() {
viewer.refresh( category, true );
}
});
monitor.done();
}
}
};
// Run it
try {
IProgressService ps = PlatformUI.getWorkbench().getProgressService();
ps.busyCursorWhile( irwp );
} catch( InterruptedException e ) {
// nothing
} catch( InvocationTargetException e ) {
PetalsCommonPlugin.log( e, IStatus.ERROR );
}
}
}
return null;
}
}