package org.objectstyle.wolips.baseforplugins.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IProjectNature;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.objectstyle.wolips.baseforplugins.Activator;
public class WOLipsNatureUtils {
public final static String INCREMENTAL_FRAMEWORK_ID = "org.objectstyle.wolips.incrementalframeworknature";
public final static String INCREMENTAL_APPLICATION_ID = "org.objectstyle.wolips.incrementalapplicationnature";
public final static String ANT_FRAMEWORK_ID = "org.objectstyle.wolips.antframeworknature";
public final static String ANT_APPLICATION_ID = "org.objectstyle.wolips.antapplicationnature";
private final static String TARGET_BUILDER_ID = "org.objectstyle.wolips.targetbuilder.targetbuildernature";
private final static String[] NATURES = new String[] { INCREMENTAL_FRAMEWORK_ID, INCREMENTAL_APPLICATION_ID, ANT_FRAMEWORK_ID, ANT_APPLICATION_ID };
/**
* @param project
* @param monitor
* @return true when the nature successfully added
* @throws CoreException
*/
public static boolean addIncrementalFrameworkNatureToProject(IProject project, IProgressMonitor monitor) throws CoreException {
return addNatureToProject(WOLipsNatureUtils.INCREMENTAL_FRAMEWORK_ID, project, monitor);
}
/**
* @param project
* @param monitor
* @return true when the nature successfully added
* @throws CoreException
*/
public static boolean addIncrementalApplicationNatureToProject(IProject project, IProgressMonitor monitor) throws CoreException {
return addNatureToProject(WOLipsNatureUtils.INCREMENTAL_APPLICATION_ID, project, monitor);
}
/**
* @param project
* @param monitor
* @return true when the nature successfully added
* @throws CoreException
*/
public static boolean addAntFrameworkNatureToProject(IProject project, IProgressMonitor monitor) throws CoreException {
return addNatureToProject(WOLipsNatureUtils.ANT_FRAMEWORK_ID, project, monitor);
}
/**
* @param project
* @param monitor
* @return true when the nature successfully added
* @throws CoreException
*/
public static boolean addAntApplicationNatureToProject(IProject project, IProgressMonitor monitor) throws CoreException {
return addNatureToProject(WOLipsNatureUtils.ANT_APPLICATION_ID, project, monitor);
}
public static boolean addNatureToProject(String id, IProject project, IProgressMonitor monitor) throws CoreException {
IProjectNature nature = project.getNature(id);
if (nature == null) {
IProjectDescription description = project.getDescription();
List<String> naturesList = new ArrayList<String>(Arrays.asList(description.getNatureIds()));
naturesList.add(id);
description.setNatureIds(naturesList.toArray(new String[naturesList.size()]));
project.setDescription(description, monitor);
}
return project.isNatureEnabled(id);
}
public static void removeNaturesFromProject(IProject project, IProgressMonitor monitor) throws CoreException {
setNatureForProject(null, false, project, monitor);
}
public static void setNatureForProject(String id, boolean useTargetBuilder, IProject project, IProgressMonitor monitor) throws CoreException {
IProjectDescription description = project.getDescription();
List<String> naturesList = new ArrayList<String>(Arrays.asList(description.getNatureIds()));
naturesList.remove(WOLipsNatureUtils.ANT_APPLICATION_ID);
naturesList.remove(WOLipsNatureUtils.ANT_FRAMEWORK_ID);
naturesList.remove(WOLipsNatureUtils.INCREMENTAL_APPLICATION_ID);
naturesList.remove(WOLipsNatureUtils.INCREMENTAL_FRAMEWORK_ID);
naturesList.remove(WOLipsNatureUtils.TARGET_BUILDER_ID);
if (id != null) {
naturesList.add(id);
}
if (useTargetBuilder) {
naturesList.add(WOLipsNatureUtils.TARGET_BUILDER_ID);
}
description.setNatureIds(naturesList.toArray(new String[naturesList.size()]));
project.setDescription(description, monitor);
}
public static void removeNatureFromProject(String id, IProject project, IProgressMonitor monitor) throws CoreException {
IProjectNature nature = project.getNature(id);
if (nature != null) {
IProjectDescription description = project.getDescription();
List<String> naturesList = new ArrayList<String>(Arrays.asList(description.getNatureIds()));
naturesList.remove(id);
description.setNatureIds(naturesList.toArray(new String[naturesList.size()]));
project.setDescription(description, monitor);
}
}
/**
* @return The wonature if one is installes otherwise null
* @throws CoreException
*/
public static IProjectNature getNature(IProject project) {
if (!project.isAccessible() || !project.exists()) {
return null;
}
IProjectNature nature = null;
try {
for (int i = 0; i < NATURES.length; i++) {
nature = project.getNature(NATURES[i]);
if (nature != null) {
return nature;
}
}
} catch (CoreException e) {
Activator.getDefault().debug("Error while resolving nature for project: " + project.getName(), e);
}
return nature;
}
public static boolean isWOLipsNature(IProject project) {
return WOLipsNatureUtils.getNature(project) != null;
}
/**
* Returns true if this project is a Maven project.
*
* @param project the project to test
* @return true if the project is a Maven project
*/
public static boolean isMavenNature(IProject project) {
try {
IProjectNature nature = project.getNature("org.maven.ide.eclipse.maven2Nature");
if (nature != null) {
return true;
}
} catch (CoreException e) {
Activator.getDefault().debug("Error while resolving nature for project: " + project.getName(), e);
}
return false;
}
}