/* Copyright (C) 2004 - 2008 Versant Inc. http://www.db4o.com
This file is part of the sharpen open source java to c# translator.
sharpen is free software; you can redistribute it and/or modify it under
the terms of version 2 of the GNU General Public License as published
by the Free Software Foundation and as clarified by db4objects' GPL
interpretation policy, available at
http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
Suite 350, San Mateo, CA 94403, USA.
sharpen is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
package sharpen.ui.popup.actions;
import java.util.*;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.jdt.core.*;
import org.eclipse.jface.action.*;
import org.eclipse.jface.dialogs.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.ui.*;
import org.eclipse.ui.progress.*;
import sharpen.builder.*;
import sharpen.core.*;
import sharpen.core.framework.resources.*;
import sharpen.ui.*;
public abstract class AbstractConverterAction implements IObjectActionDelegate{
protected IStructuredSelection _selection;
/**
* @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
*/
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
}
/**
* @see IActionDelegate#selectionChanged(IAction, ISelection)
*/
public void selectionChanged(IAction action, ISelection selection) {
_selection = (IStructuredSelection) selection;
}
/**
* @see IActionDelegate#run(IAction)
*/
public void run(IAction action) {
try {
safeRun();
} catch (Throwable e) {
MessageDialog.openError(null, "Error", e.toString());
e.printStackTrace();
}
}
protected abstract void safeRun() throws Throwable;
protected void scheduleConversionJob(final String jobName, final List compilationUnits, final IJavaProject sourceProject) {
WorkspaceJob job = new WorkspaceJob(jobName) {
@SuppressWarnings("unchecked")
public IStatus runInWorkspace(IProgressMonitor monitor) {
try {
IProject targetProject = null;
if (null != sourceProject) {
targetProject = JavaModelUtility.getTargetProject(sourceProject, monitor);
WorkspaceUtilities.addProjectNature(sourceProject.getProject(), SharpenNature.NATURE_ID);
}
monitor.beginTask(jobName, compilationUnits.size());
SharpenConversionBatch converter = new SharpenConversionBatch();
converter.setSource((ICompilationUnit[])compilationUnits.toArray(new ICompilationUnit[compilationUnits.size()]));
converter.setProgressMonitor(monitor);
converter.setTargetProject(targetProject);
final Configuration configuration = converter.getConfiguration();
configuration.setNamingStrategy(new PascalCaseIdentifiersNamingStrategy());
configuration.setCreateProblemMarkers(true);
converter.run();
int status = monitor.isCanceled() ? IStatus.CANCEL : IStatus.OK;
return new Status(status, SharpenUI.ID, status, "conversion finished", null);
} catch (Exception x) {
x.printStackTrace();
return new Status(IStatus.ERROR, SharpenUI.ID, IStatus.ERROR, "conversion finished with errors", x);
}
}
};
job.setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);
job.setUser(true);
job.schedule();
}
}