package org.objectstyle.wolips.templateengine; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; public class InstallTemplateOperation extends WorkspaceModifyOperation { private ProjectTemplate _template; private IProject _project; private IContainer _targetContainer; public InstallTemplateOperation(ProjectTemplate template, IProject project, IContainer targetContainer) { this(template, project, targetContainer, IDEWorkbenchPlugin.getPluginWorkspace().getRoot()); } public InstallTemplateOperation(ProjectTemplate template, IProject project, IContainer targetContainer, ISchedulingRule rule) { super(rule); _template = template; _project = project; _targetContainer = targetContainer; } public ProjectTemplate getTemplate() { return _template; } public IProject getProject() { return _project; } public IContainer getTargetContainer() { return _targetContainer; } @Override protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { try { monitor.beginTask("", 2000);//$NON-NLS-1$ try { preInstallTemplate(monitor); if (monitor.isCanceled()) { throw new OperationCanceledException(); } if (_template != null) { _template.createProjectContents(_project, _targetContainer, new SubProgressMonitor(monitor, 1000)); } postInstallTemplate(new SubProgressMonitor(monitor, 1000)); if (!_project.isOpen()) { _project.open(new SubProgressMonitor(monitor, 1000)); } _targetContainer.refreshLocal(IResource.DEPTH_INFINITE, new SubProgressMonitor(monitor, 1000)); finishInstallTemplate(monitor); } catch (OperationCanceledException e) { throw e; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("Failed to create project.", e); } } finally { monitor.done(); } } protected void preInstallTemplate(@SuppressWarnings("unused") IProgressMonitor monitor) throws Exception { // DO NOTHING } protected void postInstallTemplate(@SuppressWarnings("unused") IProgressMonitor monitor) throws Exception { // DO NOTHING } protected void finishInstallTemplate(@SuppressWarnings("unused") IProgressMonitor monitor) throws Exception { // DO NOTHING } }