org.eclim.installer.step.EclipseStep.java Source code

Java tutorial

Introduction

Here is the source code for org.eclim.installer.step.EclipseStep.java

Source

/**
 * Copyright (C) 2005 - 2012  Eric Van Dewoestine
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.eclim.installer.step;

import java.awt.Component;

import java.io.File;

import java.util.Properties;

import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;

import org.apache.commons.io.FilenameUtils;

import org.apache.commons.lang.SystemUtils;

import org.apache.tools.ant.taskdefs.condition.Os;

import org.formic.Installer;

import org.formic.wizard.form.GuiForm;
import org.formic.wizard.form.Validator;

import org.formic.wizard.form.gui.component.FileChooser;

import org.formic.wizard.form.validator.ValidatorBuilder;

import org.formic.wizard.step.AbstractGuiStep;

import net.miginfocom.swing.MigLayout;

/**
 * Step for specifying location of eclipse installation.
 *
 * @author Eric Van Dewoestine
 */
public class EclipseStep extends AbstractGuiStep {
    private static final String[] WINDOWS_ECLIPSES = { "C:/eclipse", "C:/Program Files/eclipse",
            "C:/Program Files (x86)/eclipse", };

    private static final String[] UNIX_ECLIPSES = { "/opt/eclipse", "/usr/lib/eclipse", "/usr/local/eclipse",
            "/usr/share/eclipse", SystemUtils.USER_HOME + "/eclipse", "/Applications/eclipse", };

    private FileChooser eclipseHomeChooser;

    /**
     * Constructs the welcome step.
     */
    public EclipseStep(String name, Properties properties) {
        super(name, properties);
    }

    /**
     * {@inheritDoc}
     * @see org.formic.wizard.step.GuiStep#init()
     */
    public Component init() {
        final JPanel panel = new JPanel(new MigLayout("wrap 2, fillx", "[growprio 0] [fill]"));
        GuiForm form = createForm();

        String home = fieldName("home");

        eclipseHomeChooser = new FileChooser(JFileChooser.DIRECTORIES_ONLY);

        panel.add(form.createMessagePanel(), "span");
        panel.add(new JLabel(Installer.getString(home)));
        panel.add(eclipseHomeChooser);

        form.bind(home, eclipseHomeChooser.getTextField(),
                new ValidatorBuilder().required().isDirectory().validator(new EclipseHomeValidator()).validator());

        String eclipseHomeDefault = getDefaultEclipseHome();
        eclipseHomeChooser.getTextField().setText(eclipseHomeDefault);

        return panel;
    }

    /**
     * {@inheritDoc}
     * @see org.formic.wizard.WizardStep#displayed()
     */
    public void displayed() {
        eclipseHomeChooser.getTextField().requestFocus();
    }

    /**
     * {@inheritDoc}
     * @see org.formic.wizard.WizardStep#proceed()
     */
    public boolean proceed() {
        boolean proceed = super.proceed();
        String home = (String) Installer.getContext().getValue("eclipse.home");
        home = FilenameUtils.normalizeNoEndSeparator(home).replace('\\', '/');
        Installer.getContext().setValue("eclipse.home", home);
        return proceed;
    }

    /**
     * Gets the default value to use for the eclipse home if any.
     *
     * @return The default value or null if none could be determined.
     */
    private String getDefaultEclipseHome() {
        String home = Installer.getEnvironmentVariable("ECLIPSE_HOME");
        if (home == null || home.trim().length() == 0) {
            if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                for (int ii = 0; ii < WINDOWS_ECLIPSES.length; ii++) {
                    if (new File(WINDOWS_ECLIPSES[ii]).exists()) {
                        home = WINDOWS_ECLIPSES[ii];
                        break;
                    }
                }
            } else {
                for (int ii = 0; ii < UNIX_ECLIPSES.length; ii++) {
                    if (new File(UNIX_ECLIPSES[ii]).exists()) {
                        home = UNIX_ECLIPSES[ii];
                        break;
                    }
                }
            }
        }
        return home;
    }

    private class EclipseHomeValidator implements Validator {
        public boolean isValid(Object value) {
            String folder = (String) value;
            if (folder != null && folder.trim().length() > 0) {
                File plugins = new File(FilenameUtils.concat(folder, "plugins"));
                if (plugins.exists() && plugins.isDirectory()) {
                    return EclipseUtils.findEclipseLauncherJar(folder) != null;
                }
            }
            return false;
        }

        public String getErrorMessage() {
            return getName() + ".home.invalid";
        }
    }
}