package bndtools; import java.lang.reflect.InvocationTargetException; import java.util.List; import org.bndtools.api.ILogger; import org.bndtools.api.Logger; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.handlers.HandlerUtil; import aQute.bnd.service.Refreshable; import aQute.bnd.service.RepositoryPlugin; import bndtools.central.Central; import bndtools.central.RepositoryUtils; public class RefreshReposHandler extends AbstractHandler { private static final ILogger logger = Logger.getLogger(RefreshReposHandler.class); @Override public Object execute(ExecutionEvent event) throws ExecutionException { IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event); try { final IFile buildFile = Central.getWorkspaceBuildFile(); if (buildFile == null) { MessageDialog.openError(window.getShell(), "Error", "Unable to refresh repositories: workspace build file is missing."); return null; } window.run(true, false, new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { buildFile.getWorkspace().run(new IWorkspaceRunnable() { @Override public void run(IProgressMonitor monitor) throws CoreException { List<RepositoryPlugin> repos = RepositoryUtils.listRepositories(true); for (RepositoryPlugin i : repos) { if (i instanceof Refreshable) { try { ((Refreshable) i).refresh(); } catch (Exception e) { logger.logError("An error occurred while refreshing repository: " + i.getName(), e); } } } buildFile.touch(monitor); } }, monitor); } catch (CoreException e) { throw new InvocationTargetException(e); } } }); } catch (Exception e) { logger.logError("Error refreshing repositories.", e); } return null; } }