net.orfjackal.sbt.plugin.SelectSbtActionDialog.java Source code

Java tutorial

Introduction

Here is the source code for net.orfjackal.sbt.plugin.SelectSbtActionDialog.java

Source

// Copyright  2010, Esko Luontola <www.orfjackal.net>
// This software is released under the Apache License 2.0.
// The license text is at http://www.apache.org/licenses/LICENSE-2.0

package net.orfjackal.sbt.plugin;

import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.DialogWrapper;
import net.miginfocom.swing.MigLayout;

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.util.List;

public class SelectSbtActionDialog extends DialogWrapper {

    private static final String[] SBT_07_ACTIONS = new String[] { "compile", "test-compile",
            ";compile;copy-resources", ";test-compile;copy-test-resources", };
    private static final String[] SBT_10_ACTIONS = new String[] { "compile", "test:compile", "products",
            "test:products" };
    public static final String[] SBT_ACTIONS_WITH_SEPARATOR = combineActions();
    private static final String SBT_07_HEADER = " SBT 0.7.x";
    private static final String SBT_10_HEADER = " SBT 0.10.x";
    private static final String SEPARATOR = "---";

    private static String[] combineActions() {
        List<String> buffer = new ArrayList<String>();
        buffer.addAll(Arrays.asList(SBT_10_ACTIONS));
        return buffer.toArray(new String[buffer.size()]);
    }

    public static final List<String> NON_SELECTABLE_ITEMS = Arrays.asList(SBT_07_HEADER, SBT_10_HEADER, SEPARATOR);

    private String selectedAction;
    private JComboBox actionField;
    private boolean runInCurrentModule;
    private JCheckBox runInCurrentModuleField;

    public SelectSbtActionDialog(Project project, String selectedAction, boolean runInCurrentModule) {
        super(project, false);
        this.selectedAction = selectedAction;
        this.runInCurrentModule = runInCurrentModule;

        setTitle(MessageBundle.message("sbt.tasks.select.action.title"));
        init();
    }

    public boolean isRunInCurrentModule() {
        return runInCurrentModule;
    }

    public String getSelectedAction() {
        return selectedAction;
    }

    protected JComponent createCenterPanel() {
        runInCurrentModuleField = new JCheckBox();
        runInCurrentModuleField.setSelected(runInCurrentModule);
        JLabel runInCurrentModuleLabel = new JLabel(MessageBundle.message("sbt.tasks.select.action.run.current"));
        runInCurrentModuleLabel
                .setToolTipText(MessageBundle.message("sbt.tasks.select.action.run.current.tooltip"));

        actionField = new ComboBox(SBT_ACTIONS_WITH_SEPARATOR);
        actionField.setEditable(true);
        actionField.setSelectedItem(selectedAction);
        actionField.setRenderer(new DefaultListCellRenderer() {
            public Component getListCellRendererComponent(JList jList, Object value, int index, boolean isSelected,
                    boolean cellHasFocus) {
                if (value.equals(SEPARATOR)) {
                    return new JSeparator(JSeparator.HORIZONTAL);
                }
                if (value.equals(SBT_07_HEADER) || value.equals(SBT_10_HEADER)) {
                    setEnabled(false);
                    setText("<html><b>" + value + "</b></html>");
                    return this;
                }
                return super.getListCellRendererComponent(jList, value, index, isSelected, cellHasFocus);
            }
        });
        // TODO Make the headings and separator non-selectable.

        JPanel root = new JPanel(new MigLayout());
        root.add(runInCurrentModuleField, "");
        root.add(runInCurrentModuleLabel, "wrap");
        root.add(actionField, "width 200::, spanx 2");
        return root;
    }

    protected void doOKAction() {
        super.doOKAction();
        this.selectedAction = nullIfEmpty((String) actionField.getSelectedItem());
        this.runInCurrentModule = runInCurrentModuleField.isSelected();
    }

    private static String nullIfEmpty(String s) {
        s = s.trim();
        return s.equals("") ? null : s;
    }
}