org.hibernate.eclipse.console.test.project.ConfigurableTestProject.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.eclipse.console.test.project.ConfigurableTestProject.java

Source

/*******************************************************************************
 * Copyright (c) 2007 Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is 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
 *
 * Contributor:
 *     Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.hibernate.eclipse.console.test.project;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.osgi.util.NLS;
import org.hibernate.eclipse.console.test.ConsoleTestMessages;
import org.hibernate.eclipse.console.test.mappingproject.Customization;
import org.hibernate.eclipse.console.test.mappingproject.MappingTestsAnnotations;
import org.hibernate.eclipse.console.test.mappingproject.MappingTestsJpa;
import org.hibernate.eclipse.console.test.utils.FilesTransfer;

/**
 * 
 * @author Dmitry Geraskov
 * @author Vitali Yemialyanchyk
 */
public class ConfigurableTestProject extends TestProject {

    public static final String RESOURCE_SRC_PATH = "res/project/src/".replaceAll("//", File.separator); //$NON-NLS-1$ //$NON-NLS-2$
    public static final String RESOURCE_LIB_PATH = "res/project/lib/".replaceAll("//", File.separator); //$NON-NLS-1$ //$NON-NLS-2$
    public static final String HIBERNATE_PLUGIN_LIB_PATH = "lib"; //$NON-NLS-1$

    protected ArrayList<String> foldersList = new ArrayList<String>();

    protected int activePackage = -1;

    public ConfigurableTestProject(String projectName) {
        super(projectName);
    }

    protected void buildProject() throws JavaModelException, CoreException, IOException {
        super.buildProject();
        //final File srcFolder = getFolder(RESOURCE_SRC_PATH);
        long startCopyFiles = System.currentTimeMillis();
        IPackageFragmentRoot sourcePackageFragment = createSourceFolder();
        //FilesTransfer.copyFolder(srcFolder, (IFolder)sourcePackageFragment.getResource());
        long startCopyLibs = System.currentTimeMillis();
        final File libFolder = getFolder(RESOURCE_LIB_PATH);
        List<IPath> libs = copyLibs(libFolder);
        libs.addAll(copyLibs(getFolder("res/libs/")));
        long startBuild = System.currentTimeMillis();
        generateClassPath(libs, sourcePackageFragment);
        fullBuild();
        long stopBuild = System.currentTimeMillis();
        if (Customization.USE_CONSOLE_OUTPUT) {
            System.out.println("====================================================="); //$NON-NLS-1$
            System.out.println("copyFiles: " + ((startCopyLibs - startCopyFiles) / 1000)); //$NON-NLS-1$
            System.out.println("copyLibs: " + ((startBuild - startCopyLibs) / 1000)); //$NON-NLS-1$
            System.out.println("build: " + ((stopBuild - startBuild) / 1000)); //$NON-NLS-1$
        }
    }

    protected File getHibernateLibsPluginFolder(String path) throws IOException {
        URL entry = Platform.getBundle("org.hibernate.eclipse.libs").getEntry(path);
        URL resProject = FileLocator.resolve(entry);
        String resolvePath = FileLocator.resolve(resProject).getFile();
        File folder = new File(resolvePath);
        if (!folder.exists()) {
            String out = NLS.bind(ConsoleTestMessages.MappingTestProject_folder_not_found, path);
            throw new RuntimeException(out);
        }
        return folder;
    }

    public void restartTestFolders() {
        activePackage = -1;
    }

    public boolean setupNextTestFolder() throws IOException, CoreException {
        activePackage++;
        if (activePackage >= foldersList.size()) {
            return false;
        }
        FilesTransfer.delete(new File(project.getLocation().append(SRC_FOLDER).toOSString()));
        final String pack = foldersList.get(activePackage);
        final File srcFolder = getFolder(RESOURCE_SRC_PATH + pack);
        IPackageFragmentRoot sourcePackageFragment = createFolder(SRC_FOLDER + File.separator + pack);
        FilesTransfer.copyFolder(srcFolder, (IFolder) sourcePackageFragment.getResource());
        return true;
    }

    public IPackageFragment getCurrentPackage() throws JavaModelException {
        if (activePackage < foldersList.size()) {
            final String pack = foldersList.get(activePackage).replaceAll("\\\\", "."); //$NON-NLS-1$ //$NON-NLS-2$
            IPackageFragment[] packageFragments = javaProject.getPackageFragments();
            for (IPackageFragment iPackageFragment : packageFragments) {
                if (iPackageFragment.getKind() == IPackageFragmentRoot.K_SOURCE
                        && iPackageFragment.getElementName().equals(pack)) {
                    return iPackageFragment;
                }
            }
        }
        return null;
    }

    public boolean createTestFoldersList(FileFilter filterFiles, FileFilter filterFolders) {
        activePackage = -1;
        foldersList = new ArrayList<String>();
        File srcFolder = null;
        try {
            srcFolder = getFolder(RESOURCE_SRC_PATH);
        } catch (IOException e) {
            // ignore
        }
        if (srcFolder == null) {
            return false;
        }
        FilesTransfer.collectFoldersWithFiles(srcFolder, filterFiles, filterFolders, foldersList);
        IPath base = Path.fromOSString(srcFolder.getPath());
        for (int i = 0; i < foldersList.size(); i++) {
            String str = foldersList.get(i);
            IPath path = Path.fromOSString(str);
            path = path.makeRelativeTo(base);
            foldersList.set(i, path.toOSString());
        }
        return true;
    }

    public static final FileFilter filterFoldersOnlyCore = new FileFilter() {
        public boolean accept(File f) {
            return f.exists() && f.isDirectory() && !f.isHidden()
                    && (!f.getAbsolutePath().toLowerCase().contains(MappingTestsAnnotations.annotationsMarkerStr))
                    && (!f.getAbsolutePath().toLowerCase().contains(MappingTestsJpa.jpaMarkerStr))
                    && (!f.getAbsolutePath().toLowerCase().contains(MappingTestsJpa.jpaMarkerMetaInf));
        }
    };

    public boolean createTestFoldersList() {
        return createTestFoldersList(FilesTransfer.filterFilesJava, filterFoldersOnlyCore);
    }

    public boolean useAllSources() {
        activePackage = -1;
        foldersList = new ArrayList<String>();
        File srcFolder = null;
        try {
            srcFolder = getFolder(RESOURCE_SRC_PATH);
        } catch (IOException e) {
            // ignore
        }
        IPackageFragmentRoot sourcePackageFragment = null;
        try {
            sourcePackageFragment = createSourceFolder();
        } catch (CoreException e) {
            // ignore
        }
        if (srcFolder != null && sourcePackageFragment != null) {
            FilesTransfer.copyFolder(srcFolder, (IFolder) sourcePackageFragment.getResource());
            foldersList.add(""); //$NON-NLS-1$
            return true;
        }
        return false;
    }

    public boolean useSelectedFolders() throws IOException, CoreException {
        activePackage = -1;
        if (foldersList == null) {
            return false;
        }
        FilesTransfer.delete(new File(project.getLocation().append(SRC_FOLDER).toOSString()));
        for (int i = 0; i < foldersList.size(); i++) {
            final String pack = foldersList.get(i);
            final File srcFolder = getFolder(RESOURCE_SRC_PATH + pack);
            IPackageFragmentRoot sourcePackageFragment = createFolder(SRC_FOLDER + File.separator + pack);
            FilesTransfer.copyFolder(srcFolder, (IFolder) sourcePackageFragment.getResource());
        }
        foldersList = new ArrayList<String>();
        foldersList.add(""); //$NON-NLS-1$
        return true;
    }
}