/*******************************************************************************
* Copyright (c) 2011 Red Hat, Inc.
* 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:
* Red Hat - initial API and implementation
************************************************************************/
package org.eclipse.linuxtools.rpm.core;
import java.net.URI;
import java.net.URISyntaxException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IWorkspaceRoot;
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.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
/**
* Utility class to ease creation of RPM projects.
*
*/
public class RPMProjectCreator {
private RPMProjectLayout layout;
/**
* Creates the utility class and sets the layout that will be used.
*
* @param layout
* The layout of the projects to be created.
*/
public RPMProjectCreator(RPMProjectLayout layout) {
this.layout = layout;
}
/**
* Creates the utility class with the default(RPMBuild) layout.
*/
public RPMProjectCreator() {
this(RPMProjectLayout.RPMBUILD);
}
/**
* Creates a project with the given name in the given location.
*
* @param projectName
* The name of the project.
* @param projectPath
* The parent location of the project.
* @param monitor
* Progress monitor to report back status.
* @return The newly created project.
* @throws CoreException If the location is wrong.
*/
public IProject create(String projectName, IPath projectPath, IProgressMonitor monitor) throws CoreException {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject project = root.getProject(projectName);
IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName());
String parsedIPathString = null;
if (!Platform.getLocation().equals(projectPath)) {
parsedIPathString = projectPath.toString().replaceFirst(":/", "://"); //$NON-NLS-1$ //$NON-NLS-2$
try {
description.setLocationURI(new URI(parsedIPathString));
} catch (URISyntaxException e) {
throw new CoreException(new Status(IStatus.ERROR, IRPMConstants.RPM_CORE_ID, e.getMessage(), e));
}
}
description.setNatureIds(new String[] { IRPMConstants.RPM_NATURE_ID });
project.create(description, monitor);
monitor.worked(10);
project.open(monitor);
new RPMProject(project, layout);
return project;
}
}