/******************************************************************************* * Copyright (c) 2007, 2009 Symbian Software Limited 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: * Andrew Gvozdev (Quoin Inc.) - Initial API and implementation extracted from CreateSourceFolder.java. *******************************************************************************/ package org.eclipse.cdt.core.templateengine.process.processes; import org.eclipse.cdt.core.templateengine.TemplateCore; import org.eclipse.cdt.core.templateengine.process.ProcessArgument; import org.eclipse.cdt.core.templateengine.process.ProcessFailureException; import org.eclipse.cdt.core.templateengine.process.ProcessRunner; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; /** * Creates regular folder in the project. * @since 5.1 */ public class CreateFolder extends ProcessRunner { /** * @see org.eclipse.cdt.core.templateengine.process.ProcessRunner#process(org.eclipse.cdt.core.templateengine.TemplateCore, org.eclipse.cdt.core.templateengine.process.ProcessArgument[], java.lang.String, org.eclipse.core.runtime.IProgressMonitor) */ @Override public void process(TemplateCore template, ProcessArgument[] args, String processId, IProgressMonitor monitor) throws ProcessFailureException { createFolder(args[0].getSimpleValue(), args[1].getSimpleValue(), monitor); } /** * Creates specified folder in the project recursively. * * @param projectName - name of the project. * @param targetPath - relative path to the new folder. * @param monitor - progress monitor. * @throws ProcessFailureException if there is a problem with creating new folder. */ public static void createFolder(String projectName, String targetPath, IProgressMonitor monitor) throws ProcessFailureException { //If the targetPath is an empty string, there will be no folder to create. // Also this is not an error. So just return gracefully. if (targetPath == null || targetPath.length()==0) { return; } IProject projectHandle = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); if (!projectHandle.exists()) { throw new ProcessFailureException(Messages.getString("CreateSourceFolder.0") + projectName); //$NON-NLS-1$ } IPath path = new Path(targetPath); try { for (int i=1;i<=path.segmentCount();i++) { IFolder subfolder = projectHandle.getFolder(path.uptoSegment(i)); if (!subfolder.exists()) { subfolder.create(true, true, monitor); } } } catch (CoreException e) { throw new ProcessFailureException(Messages.getString("CreateSourceFolder.1") + e.getMessage(), e); //$NON-NLS-1$ } } }