package org.jactr.eclipse.demo.export.ops; /* * default logging */ import java.lang.reflect.InvocationTargetException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.jactr.eclipse.runtime.launching.env.EnvironmentConfigurator; public class WriteEnvironmentOperation extends WorkspaceModifyOperation { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(WriteEnvironmentOperation.class); private ILaunchConfiguration _configuration; private IProject _project; private IFile _environmentFile; public WriteEnvironmentOperation(ILaunchConfiguration configuration, IProject project) { _configuration = configuration; _project = project; } public IFile getEnvironmentFile() { return _environmentFile; } /** * make sure the project has the demo diretory * configuration/demo/launchName/environment.xml */ protected IFile ensureFile(String folderName, String fileName) throws CoreException { IFolder folder = _project.getFolder(folderName); create(folder); return folder.getFile(fileName); } private void create(IFolder folder) throws CoreException { if (folder.exists()) return; if (!folder.getParent().exists()) create((IFolder) folder.getParent()); folder.create(true, true, null); } protected IFile writeEnvironment(ILaunchConfiguration configuration) throws CoreException { /* * */ IFile environmentFile = ensureFile("configuration/demo/" + configuration.getName(), "environment.xml"); if (environmentFile.exists()) environmentFile.delete(true, null); EnvironmentConfigurator.writeEnvironmentConfiguration(environmentFile, configuration, ILaunchManager.RUN_MODE, null); return environmentFile; } @Override protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { if (monitor != null) monitor = new SubProgressMonitor(monitor, 1); else monitor = new NullProgressMonitor(); try { monitor.beginTask("Writing environment", 1); _environmentFile = writeEnvironment(_configuration); } finally { monitor.done(); } } }