package org.eclipselabs.spray.xtext.ui.commands;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
public class SprayJavaProjectUtil {
protected IPackageFragmentRoot getPackageFragmentRoot(IJavaElement elem) {
if (elem == null) {
return null;
}
if (elem instanceof IPackageFragmentRoot) {
return (IPackageFragmentRoot) elem;
}
return getPackageFragmentRoot(elem.getParent());
}
/**
* Returns <code>true</code> when the compilation unit is in the generated sources folder, does not end with the name "Base", but
* has a sibling unit that has this name.
*/
public boolean isGeneratedExtensionFile(ICompilationUnit cu) {
IPackageFragmentRoot pfRoot = getPackageFragmentRoot(cu);
if (pfRoot != null && pfRoot.getResource().equals(getSrcGenFolder(cu.getResource().getProject()))) {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IPath baseClassPath = new Path(cu.getPath().removeFileExtension().toString() + "Base.java");
if (root.findMember(baseClassPath) != null) {
return true;
}
}
return false;
}
public boolean hasGeneratedBaseClass(ICompilationUnit cu) {
IPackageFragmentRoot pfRoot = null;
try {
pfRoot = getSrcGenPackageFragmentRoot(cu.getJavaProject());
if (pfRoot == null)
return false;
} catch (JavaModelException e) {
return false;
}
// compute the relative path of this resource
IPath relativePath = cu.getPath().makeRelativeTo(getPackageFragmentRoot(cu).getPath());
IPath baseClassPath = new Path(pfRoot.getPath().append(relativePath.removeFileExtension()).toString() + "Base.java");
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
boolean baseClassExists = root.findMember(baseClassPath) != null;
return baseClassExists;
}
public IFolder getSrcGenFolder(final IProject builtProject) {
// TODO: Respect spray properties
return builtProject.getFolder("src-gen");
}
public IPackageFragmentRoot getSrcManPackageFragmentRoot(IJavaProject project) throws JavaModelException {
return getPackageFragmentRoot(project, "src");
}
public IPackageFragmentRoot getSrcGenPackageFragmentRoot(IJavaProject project) throws JavaModelException {
return getPackageFragmentRoot(project, "src-gen");
}
protected IPackageFragmentRoot getPackageFragmentRoot(IJavaProject project, String name) throws JavaModelException {
for (IPackageFragmentRoot pfr : project.getPackageFragmentRoots()) {
if (pfr.getElementName().equals(name)) {
return pfr;
}
}
return null;
}
}