Package org.netbeans.gradle.project.api.entry

Source Code of org.netbeans.gradle.project.api.entry.SampleGradleProject

package org.netbeans.gradle.project.api.entry;

import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import org.gradle.util.GradleVersion;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.gradle.model.util.Exceptions;
import org.netbeans.gradle.model.util.ZipUtils;
import org.netbeans.gradle.project.NbGradleProject;
import org.netbeans.gradle.project.NbGradleProjectFactory;
import org.netbeans.gradle.project.properties.GlobalGradleSettings;
import org.netbeans.gradle.project.properties.GradleLocation;
import org.netbeans.gradle.project.properties.GradleLocationVersion;
import org.openide.filesystems.FileUtil;

public final class SampleGradleProject implements Closeable {
    public static final String DEFAULT_GRADLE_VERSION = GradleVersion.current().getVersion();
    public static final GradleLocation DEFAULT_GRADLE_TARGET = new GradleLocationVersion(DEFAULT_GRADLE_VERSION);

    private static final int DAEMON_TIMEOUT_SEC = 60;

    private final File tempFolder;

    public SampleGradleProject(File tempFolder) {
        ExceptionHelper.checkNotNullArgument(tempFolder, "tempFolder");
        this.tempFolder = tempFolder;
    }

    public static SampleGradleProject createProject(String resourceRelPath) throws IOException {
        GlobalGradleSettings.getGradleDaemonTimeoutSec().setValue(DAEMON_TIMEOUT_SEC);
        return createProject(SampleGradleProject.class, resourceRelPath);
    }

    public static SampleGradleProject createProject(
            Class<?> resourceBase,
            String resourceRelPath) throws IOException {

        return new SampleGradleProject(ZipUtils.unzipResourceToTemp(resourceBase, resourceRelPath));
    }

    private static File subDir(File base, String... subDirs) throws IOException {
        File result = base;
        for (String subDir: subDirs) {
            result = new File(result, subDir);
        }
        return result.getCanonicalFile();
    }

    private Project getUnloadedProject(File projectDir) throws IOException {
        File normProjectDir = FileUtil.normalizeFile(projectDir);
        try (Closeable safeToOpenRef = NbGradleProjectFactory.safeToOpen(normProjectDir)) {
            assert safeToOpenRef != null; // Avoid warning

            Project project = ProjectManager.getDefault().findProject(FileUtil.toFileObject(normProjectDir));
            if (project == null) {
                throw new IllegalArgumentException("Project does not exist: " + normProjectDir);
            }

            return project;
        } catch (IOException ex) {
            throw Exceptions.throwUnchecked(ex);
        }
    }

    public Project getUnloadedProject(String... projectPath) throws IOException {
        File projectDir = subDir(tempFolder, projectPath);
        return getUnloadedProject(projectDir);
    }

    private NbGradleProject toLoadedProject(Project project) throws IOException {
        try {
            final NbGradleProject gradleProject = project.getLookup().lookup(NbGradleProject.class);
            if (gradleProject == null) {
                throw new IllegalArgumentException("Not a Gradle project: " + project.getProjectDirectory());
            }

            gradleProject.ensureLoadRequested();

            return gradleProject;
        } catch (Throwable ex) {
            throw Exceptions.throwUnchecked(ex);
        }
    }

    public Project getSingleUnloadedProject() throws IOException {
        File[] dirs = tempFolder.listFiles();
        if (dirs.length != 1) {
            throw new IllegalStateException(tempFolder + " does not contain a single folder but " + dirs.length);
        }

        return getUnloadedProject(dirs[0]);
    }

    public NbGradleProject loadSingleProject() throws IOException {
        Project project = getSingleUnloadedProject();
        return toLoadedProject(project);
    }

    public NbGradleProject loadProject(String... projectPath) throws IOException {
        Project project = getUnloadedProject(projectPath);
        return toLoadedProject(project);
    }

    @Override
    public void close() throws IOException {
        ZipUtils.recursiveDelete(tempFolder);
    }
}
TOP

Related Classes of org.netbeans.gradle.project.api.entry.SampleGradleProject

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.