package sk.stuba.fiit.perconik.core.java;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.ui.PreferenceConstants;
import org.eclipse.jface.preference.IPreferenceStore;
import sk.stuba.fiit.perconik.eclipse.jdt.core.JavaExceptions;
import static com.google.common.base.Preconditions.checkState;
public final class JavaProjects {
private JavaProjects() {}
public static IJavaProject create(final IProject project) {
checkState(isJavaProject(project));
return JavaCore.create(project);
}
public static boolean inOutputLocation(final IProject project, final IResource resource) {
if (isJavaProject(project)) {
return inOutputLocation(create(project), resource);
}
return false;
}
public static boolean inOutputLocation(final IJavaProject project, final IResource resource) {
return getOutputLocation(project).isPrefixOf(resource.getFullPath());
}
private static IPath getDefaultLocation(final IJavaProject project, final String key) {
IPreferenceStore store = PreferenceConstants.getPreferenceStore();
if (store.getBoolean(PreferenceConstants.SRCBIN_FOLDERS_IN_NEWPROJ)) {
String name = store.getString(key);
return project.getProject().getFullPath().append(name);
}
return project.getProject().getFullPath();
}
public static IPath getDefaultSourceLocation(final IJavaProject project) {
return getDefaultLocation(project, PreferenceConstants.SRCBIN_SRCNAME);
}
public static IPath getDefaultOutputLocation(final IJavaProject project) {
return getDefaultLocation(project, PreferenceConstants.SRCBIN_BINNAME);
}
public static IPath getOutputLocation(final IJavaProject project) {
try {
return project.getOutputLocation();
} catch (JavaModelException e) {
throw JavaExceptions.propagate(e);
}
}
public static boolean isJavaProject(final IProject project) {
try {
return project.hasNature(JavaCore.NATURE_ID);
} catch (CoreException e) {
throw JavaExceptions.propagate(e);
}
}
}