All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yiwowang.intellij.finding.SearchComponent Maven / Gradle / Ivy

The newest version!
package com.yiwowang.intellij.finding;

import com.yiwowang.intellij.finding.base.bean.Component;
import com.yiwowang.intellij.finding.menu.ContextMenu;
import com.yiwowang.intellij.finding.wrap.DocumentListenerWrap;
import org.apache.commons.lang.StringUtils;

import javax.swing.event.DocumentEvent;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;

public class SearchComponent {
    public static final int TYPE_DEP_ALL = 0;
    public static final int TYPE_DEP_FIRST = 1;
    public static final int TYPE_DEP_CODE = 2;
    protected SearchForm form;
    private List list;

    public SearchComponent(SearchForm form) {
        this.form = form;
        initComponents();
        setData(form.context.projectFinding.getComponents());
    }

    private void initComponents() {
        form.componentInput.getDocument().addDocumentListener(new DocumentListenerWrap() {
            @Override
            public void onChange(DocumentEvent e) {
                search();
            }
        });
        form.dependentChk.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                setData(list);
            }
        });

        form.componentTree.addMouseListener(new ContextMenu(form.componentTree));
    }

    private void search() {
        String input = StringUtils.deleteWhitespace(form.componentInput.getText());
        if (!StringUtils.isEmpty(input)) {
            List list = form.context.projectFinding
                    .searchComponent(input, true, -1);
            setData(list);
        } else {
            setData(form.context.projectFinding.getComponents());
        }
    }

    private void setData(List list) {
        if (list == null) {
            this.list = new ArrayList<>();
        } else {
            this.list = list;
        }
        DefaultMutableTreeNode top;
        if (form.dependentChk.isSelected()) {
            top = getDependentNode(list);
        } else {
            top = getDependencyNode(list);
        }
        form.componentTree.setModel(new DefaultTreeModel(top, false));
    }

    private DefaultMutableTreeNode getDependencyNode(List list) {
        DefaultMutableTreeNode top = new DefaultMutableTreeNode("");
        for (Component component : list) {
            String componentName = component.name;
            Collection refComponents = getRefComponents(component);
            DefaultMutableTreeNode componentNode = new DefaultMutableTreeNode(componentName);
            top.add(componentNode);
            for (String ref : refComponents) {
                if (!StringUtils.equals(ref, componentName)) {
                    componentNode.add(new DefaultMutableTreeNode(ref));
                }
            }
        }
        top.setUserObject("result size:" + top.getChildCount());
        return top;
    }

    private DefaultMutableTreeNode getDependentNode(List list) {
        DefaultMutableTreeNode top = new DefaultMutableTreeNode("");
        for (Component component : list) {
            String componentName = component.name;
            DefaultMutableTreeNode componentNode = new DefaultMutableTreeNode(componentName);
            top.add(componentNode);

            for (Component component2 : this.list) {
                if (StringUtils.equals(component2.name, componentName)) {
                    continue;
                }
                Collection refComponents = getRefComponents(component2);
                if (refComponents.contains(componentName)) {
                    componentNode.add(new DefaultMutableTreeNode(component2.name));
                }
            }
        }
        top.setUserObject("result size:" + top.getChildCount());
        return top;
    }

    private int getDepType() {
        if (form.depAllRbtn.isSelected()) {
            return TYPE_DEP_ALL;
        } else if (form.depFirstRbtn.isSelected()) {
            return TYPE_DEP_FIRST;
        } else if (form.depCodeRbtn.isSelected()) {
            return TYPE_DEP_CODE;
        }
        return -1;
    }

    private Collection getRefComponents(Component component) {
        Collection refComponents = new HashSet<>();
        switch (getDepType()) {
            case TYPE_DEP_ALL:
                if (component.depRefFull != null) {
                    refComponents.addAll(component.depRefFull);
                }
                break;
            case TYPE_DEP_FIRST:
                if (component.depRef != null) {
                    for (Component ref : component.depRef) {
                        refComponents.add(ref.name);
                    }
                }
                break;
            case TYPE_DEP_CODE:
                if (component.codeRef != null) {
                    for (Component ref : component.codeRef) {
                        refComponents.add(ref.name);
                    }
                }
                break;
        }
        return refComponents;
    }

    public void refreshData() {
        search();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy