--- /dev/null
+package no.uio.ifi.refaktor.handlers;
+
+import no.uio.ifi.refaktor.change.changers.RefaktorChanger;
+import no.uio.ifi.refaktor.change.exceptions.RefaktorChangerException;
+import no.uio.ifi.refaktor.debugging.RefaktorDebug;
+import no.uio.ifi.refaktor.statistics.StatisticsAspect;
+import no.uio.ifi.refaktor.statistics.StatisticsAspect.Statistics;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+public abstract class AbstractSearchBasedExtractAndMoveMethodChangerHandler extends AbstractHandler {
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ISelection selection = HandlerUtil.getCurrentSelectionChecked(event);
+ IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
+
+ assert selection instanceof ITreeSelection;
+ ITreeSelection treeSelection = (ITreeSelection) selection;
+ Object element = treeSelection.getFirstElement();
+
+ StatisticsAspect.init();
+ RefaktorChanger changer = createChanger(element);
+ try {
+ changer.checkPreconditions();
+ changer.execute(new NullProgressMonitor());
+ MessageDialog.openInformation(window.getShell(), "no.uio.ifi.refaktor", changer.getClass() + " has been excuted");
+ return null;
+ } catch (RefaktorChangerException e) {
+ RefaktorDebug.log(e);
+ } catch (CoreException e) {
+ RefaktorDebug.log(e);
+ } finally {
+ Statistics snapshot = StatisticsAspect.getSnapshot();
+ RefaktorDebug.println("\n\n" + snapshot);
+ snapshot.generateReportFile();
+ }
+
+ MessageDialog.openInformation(window.getShell(), "no.uio.ifi.refaktor", changer.getClass() + " did not execute correctly");
+ return null;
+ }
+
+ protected abstract RefaktorChanger createChanger(Object element);
+
+}
\ No newline at end of file