/*******************************************************************************
* Copyright (c) 2007 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.util;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.ui.dialogs.IOverwriteQuery;
import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider;
import org.eclipse.ui.wizards.datatransfer.ImportOperation;
import org.osgi.framework.Bundle;
/**
* @author eskimo
*
*/
public class ResourcesUtils {
public static IProject importProject(Bundle bundle, String templLocation,
IProgressMonitor monitor) throws IOException, CoreException,
InvocationTargetException, InterruptedException {
String tplPrjLcStr;
tplPrjLcStr = FileLocator.resolve(bundle.getEntry(templLocation))
.getFile();
return importProject(tplPrjLcStr, monitor);
}
public static IProject importProject(String location,
IProgressMonitor monitor) throws CoreException, IOException,
InvocationTargetException, InterruptedException {
IProject importedPrj = createEclipseProjectDromDescriptor(location,
monitor);
ImportOperation op = new ImportOperation(importedPrj.getFullPath(),
new File(location), FileSystemStructureProvider.INSTANCE,
new IOverwriteQuery() {
public String queryOverwrite(String pathString) {
return IOverwriteQuery.ALL;
}
}, Arrays.asList(new File(location).listFiles()));
op.setCreateContainerStructure(false);
op.run(monitor);
return importedPrj;
}
public static IProject importExistingProject(IProject project, String location, String name) throws CoreException {
return importExistingProject(project, location, name, new NullProgressMonitor(), true);
}
public static IProject importExistingProject(IProject project, String location, String name, IProgressMonitor monitor, boolean refreshWorkspace) throws CoreException {
IPath path = new Path(location).append(".project"); //$NON-NLS-1$
IProjectDescription description = ResourcesPlugin.getWorkspace().loadProjectDescription(path);
description.setName(name);
project.create(description, monitor);
project.open(IResource.NONE, monitor);
if(refreshWorkspace) {
ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
}
return project;
}
public static IProject createEclipseProject(String projectName,
IProgressMonitor monitor) throws CoreException {
IProject newProjectHandle = ResourcesPlugin.getWorkspace().getRoot()
.getProject(projectName);
IWorkspace workspace = ResourcesPlugin.getWorkspace();
final IProjectDescription description = workspace
.newProjectDescription(projectName);
newProjectHandle.create(description, new NullProgressMonitor());
newProjectHandle.open(monitor);
return newProjectHandle;
}
public static IProject createEclipseProjectDromDescriptor(
String templateLocation, IProgressMonitor monitor)
throws CoreException, IOException {
IPath tplPrjDescr = new Path(templateLocation)
.append(IProjectDescription.DESCRIPTION_FILE_NAME);
IProjectDescription descr = ResourcesPlugin.getWorkspace()
.loadProjectDescription(tplPrjDescr);
descr.setLocation(null);
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(
descr.getName());
project.create(descr, monitor);
project.open(IResource.BACKGROUND_REFRESH, monitor);
return project;
}
}