org.eclipselabs.spray.xtext.ui.commands.SprayJavaProjectUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipselabs.spray.xtext.ui.commands.SprayJavaProjectUtil.java

Source

/** ****************************************************************************
 * Copyright (c)  The Spray Project.
 * 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:
 *     Spray Dev Team - initial API and implementation
 **************************************************************************** */
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;
    }
}