Package org.mevenide.idea.repository.util

Source Code of org.mevenide.idea.repository.util.SelectRepositoryItemDialog$DialogRepoBrowser

package org.mevenide.idea.repository.util;

import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogBuilder;
import com.intellij.openapi.ui.DialogWrapper;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreePath;
import org.mevenide.idea.repository.browser.RepositoryBrowser;
import org.mevenide.idea.repository.tree.RepoTree;
import org.mevenide.idea.repository.tree.model.RepoTreeNode;
import org.mevenide.repository.IRepositoryReader;
import org.mevenide.repository.RepoPathElement;

/**
* @author Arik
* @todo rename to RepositoryBrowserDialog
*/
public class SelectRepositoryItemDialog {
    private boolean allowingRoot = false;
    private boolean allowingGroups = false;
    private boolean allowingTypes = false;
    private boolean allowingArtifacts = false;
    private boolean allowingVersions = false;
    private String title;

    public String getTitle() {
        return title;
    }

    public void setTitle(final String pTitle) {
        title = pTitle;
    }

    public boolean isAllowingArtifacts() {
        return allowingArtifacts;
    }

    public void setAllowingArtifacts(final boolean pAllowingArtifacts) {
        allowingArtifacts = pAllowingArtifacts;
    }

    public boolean isAllowingGroups() {
        return allowingGroups;
    }

    public void setAllowingGroups(final boolean pAllowingGroups) {
        allowingGroups = pAllowingGroups;
    }

    public boolean isAllowingRoot() {
        return allowingRoot;
    }

    public void setAllowingRoot(final boolean pAllowingRoot) {
        allowingRoot = pAllowingRoot;
    }

    public boolean isAllowingTypes() {
        return allowingTypes;
    }

    public void setAllowingTypes(final boolean pAllowingTypes) {
        allowingTypes = pAllowingTypes;
    }

    public boolean isAllowingVersions() {
        return allowingVersions;
    }

    public void setAllowingVersions(final boolean pAllowingVersions) {
        allowingVersions = pAllowingVersions;
    }

    public RepoPathElement[] show(final Project pProject) {
        final DialogBuilder builder = new DialogBuilder(pProject);
        final RepositoryBrowser browser = new DialogRepoBrowser(pProject, builder);

        builder.addOkAction();
        builder.addCancelAction();
        builder.setCenterPanel(browser);
        builder.setTitle(title == null || title.trim().length() == 0 ? "Browse Repository" : title);
        builder.setOkActionEnabled(false);

        final int exitCode = builder.show();
        if (exitCode == DialogWrapper.OK_EXIT_CODE)
            return browser.getSelectedItems();
        else
            return null;
    }

    private class MyTreeSelectionListener implements TreeSelectionListener {
        private final DialogBuilder builder;

        public MyTreeSelectionListener(final DialogBuilder pBuilder) {
            builder = pBuilder;
        }

        public void valueChanged(TreeSelectionEvent e) {
            final JTree tree = (JTree) e.getSource();
            builder.setOkActionEnabled(shouldEnableOk(tree.getSelectionPaths()));
        }

        private boolean shouldEnableOk(final TreePath[] pTreePaths) {
            if (pTreePaths == null)
                return false;

            for (TreePath path : pTreePaths) {
                final Object value = path.getLastPathComponent();
                if (!(value instanceof RepoTreeNode))
                    return false;

                final RepoTreeNode node = (RepoTreeNode) value;
                final RepoPathElement desc = node.getPathElement();
                switch (desc.getLevel()) {
                    case RepoPathElement.LEVEL_GROUP:
                        if (!allowingGroups)
                            return false;
                        break;
                    case RepoPathElement.LEVEL_ROOT:
                        if (!allowingRoot)
                            return false;
                        break;
                    case RepoPathElement.LEVEL_TYPE:
                        if (!allowingTypes)
                            return false;
                        break;
                    case RepoPathElement.LEVEL_ARTIFACT:
                        if (!allowingArtifacts)
                            return false;
                        break;
                    case RepoPathElement.LEVEL_VERSION:
                        if (!allowingVersions)
                            return false;
                        break;
                }
            }

            return true;
        }
    }

    private class DialogRepoBrowser extends RepositoryBrowser {
        private final SelectRepositoryItemDialog.MyTreeSelectionListener selectionListener;

        public DialogRepoBrowser(final Project pProject,
                                 final DialogBuilder pBuilder) {
            super(pProject);
            selectionListener = new MyTreeSelectionListener(pBuilder);
        }

        @Override
        protected RepoTree addRepo(final IRepositoryReader pRepo) {
            final RepoTree tree = super.addRepo(pRepo);
            tree.addTreeSelectionListener(selectionListener);
            return tree;
        }
    }
}
TOP

Related Classes of org.mevenide.idea.repository.util.SelectRepositoryItemDialog$DialogRepoBrowser

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.