view com.redhat.thermostat.tools.eclipse.plugin/src/com/redhat/thermostat/tools/eclipse/plugin/wizards/ThermostatProjectCreationWizard.java @ 120:1c4f192bf2e2

Share code for thermostat-plugin.xml creation
author Omair Majid <omajid@redhat.com>
date Mon, 17 Mar 2014 16:40:07 -0400
parents b788a26c0d4d
children 4c549b4c6fb3
line wrap: on
line source

package com.redhat.thermostat.tools.eclipse.plugin.wizards;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;

import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.jdt.launching.LibraryLocation;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;

public class ThermostatProjectCreationWizard extends Wizard implements INewWizard {

    private ThermostatProjectCreationWizardPage page;
    private ThermostatProjectCreationWizardPageTwo pageTwo;
    private HashMap<String, Boolean> selectedComponents;

    public ThermostatProjectCreationWizard() {
        super();
        setNeedsProgressMonitor(true);
    }

    public void init(IWorkbench workbench, IStructuredSelection selection) {
        setWindowTitle("Create New Thermostat Plugin");
    }

    public void addPages() {
        page = new ThermostatProjectCreationWizardPage();
        addPage(page);
        pageTwo = new ThermostatProjectCreationWizardPageTwo();
        addPage(pageTwo);
    }

    public boolean performFinish() {
        try {
            selectedComponents = page.getSelectedComponents();

            createProject(page.getProjectName());
            for (Entry<String, Boolean> temp : selectedComponents.entrySet()) {
                if (temp.getValue()) {
                    createProject(page.getProjectName() + "-" + temp.getKey());
                }
            }
        } catch (CoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return true;
    }

    private void createProject(String projectTitle) throws CoreException {
        IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
        IProject project = root.getProject(projectTitle);
        if (project.exists()) {
            project.delete(true, null);
        }
        try {
            project.create(null);
            project.open(null);
        } catch (CoreException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // Set the Java nature to created project
        IProjectDescription description = project.getDescription();
        description.setNatureIds(new String[] { JavaCore.NATURE_ID });
        project.setDescription(description, null);

        // Create Java project
        IJavaProject javaProject = JavaCore.create(project);

        // Add bin/ouput folder
        IFolder binFolder = project.getFolder("bin");
        binFolder.create(false, true, null);
        javaProject.setOutputLocation(binFolder.getFullPath(), null);

        // Add libs to project class path
        List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
        IVMInstall vmInstall = JavaRuntime.getDefaultVMInstall();
        LibraryLocation[] locations = JavaRuntime
                .getLibraryLocations(vmInstall);
        for (LibraryLocation element : locations) {
            entries.add(JavaCore.newLibraryEntry(
                    element.getSystemLibraryPath(), null, null));
        }

        javaProject.setRawClasspath(
                entries.toArray(new IClasspathEntry[entries.size()]), null);

        // If root then folder create sub directories corresponding components
        if (page.getProjectName().equals(projectTitle)) {
            for (Entry<String, Boolean> currentComponent : selectedComponents
                    .entrySet()) {
                if (currentComponent.getValue()) {
                    IFolder componentFolder = project.getFolder(currentComponent
                            .getKey());
                    componentFolder.create(false, true, null);
                }
            }
        }

        // Create src folder
        IFolder srcFolder = project.getFolder("src");
        srcFolder.create(false, true, null);

        IFolder srcMainFolder = srcFolder.getFolder("main");
        srcMainFolder.create(true, true, null);

        IFolder srcMainJavaFolder = srcMainFolder.getFolder("java");
        srcMainJavaFolder.create(true, true, null);

        IPackageFragmentRoot packageFragmentRoot = javaProject
                .getPackageFragmentRoot(srcMainJavaFolder);
        IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
        IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
        System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
        newEntries[oldEntries.length] = JavaCore
                .newSourceEntry(packageFragmentRoot.getPath());
        javaProject.setRawClasspath(newEntries, null);

        IPackageFragment pack = javaProject.getPackageFragmentRoot(
                srcMainJavaFolder).createPackageFragment(pageTwo.getPackageName(),
                false, null);

        StringBuffer buffer = new StringBuffer();
        buffer.append("package " + pack.getElementName() + ";\n");
        buffer.append("\n");
        // Empty file for testing
        ICompilationUnit cu = pack.createCompilationUnit(
                "ThermostatPlugin.java", buffer.toString(), false, null);

        createThermostatPluginXml(projectTitle);
    }

    private void createThermostatPluginXml(String projectName) {
        if (page.getProjectName().equals(projectName)) {
            GuiPluginXmlCreator creator = new GuiPluginXmlCreator();
            creator.createPluginWithFeedback(projectName, this);
        }
    }

}