blob: 8d1fd5149866b948abc12807055b9a19fe9eebf7 [file] [log] [blame]
/*
* Copyright (c) 2015 Eike Stepper (Berlin, Germany) 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.ui.internal.compare;
import org.eclipse.net4j.util.AdapterUtil;
import org.eclipse.net4j.util.ui.actions.LongRunningActionDelegate;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchPart;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* @author Eike Stepper
*/
public abstract class CompareActionDelegate<TARGET> extends LongRunningActionDelegate
{
private final Class<TARGET> targetClass;
private IWorkbenchPart targetPart;
private ISelection selection;
public CompareActionDelegate(Class<TARGET> targetClass)
{
this.targetClass = targetClass;
}
public IWorkbenchPart getTargetPart()
{
return targetPart;
}
public void setActivePart(IAction action, IWorkbenchPart targetPart)
{
this.targetPart = targetPart;
}
@Override
public void selectionChanged(IAction action, ISelection selection)
{
this.selection = selection;
}
@Override
protected void doRun(IProgressMonitor progressMonitor) throws Exception
{
if (selection instanceof IStructuredSelection)
{
IStructuredSelection ssel = (IStructuredSelection)selection;
List<TARGET> targets = new ArrayList<TARGET>();
@SuppressWarnings("unchecked")
Iterator<Object> iterator = ssel.iterator();
while (iterator.hasNext())
{
Object element = iterator.next();
TARGET target = AdapterUtil.adapt(element, targetClass);
if (target != null)
{
targets.add(target);
}
}
run(targets, progressMonitor);
}
}
protected abstract void run(List<TARGET> targets, IProgressMonitor progressMonitor);
}