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

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

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

import com.yiwowang.intellij.finding.util.UIUtils;
import com.yiwowang.intellij.finding.base.bean.ClassBean;
import com.yiwowang.intellij.finding.menu.ContextMenu;
import com.yiwowang.intellij.finding.base.util.Utils;
import org.apache.commons.lang3.StringUtils;

import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Map;

public class SearchClass {
    private static final int INPUT_MIN_CHAR = 3;
    private SearchForm form;
    protected Map> componentMap;
    protected ClassBean selectedClass;
    private boolean update;

    public SearchClass(SearchForm form) {
        this.form = form;
        initComponents();
    }

    private void initComponents() {
        form.classInput.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                search();
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                search();
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                search();
            }
        });
        clear();
        form.classTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) form.classTree.getLastSelectedPathComponent();
                if (selectedNode == null) {
                    return;
                }
                Object object = selectedNode.getUserObject();
                if (object instanceof ClassBean) {
                    ClassBean clazz = (ClassBean) object;
                    onSelected(clazz);
                }
            }
        });
        form.androidClassChk.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                form.context.projectFinding.setAndroidClassEnable(form.androidClassChk.isSelected());
                selectedClass = null;
                search();
            }
        });

        form.classTree.addMouseListener(new ContextMenu(form.classTree));

    }

    private void clear() {
        selectedClass = null;
        form.classTree.setModel(new DefaultTreeModel(null));
    }

    protected void onSelected(ClassBean classBean) {
        update = true;
        selectedClass = classBean;
        form.classInput.setText(selectedClass.name);
        form.memberComponentLabel.setText(classBean.component.name);
        update = false;
    }

    private void search() {
        if (update) {
            return;
        }
        String input = form.classInput.getText();
        if (input == null || input.isEmpty()) {
            clear();
            return;
        }
        if (input.length() < INPUT_MIN_CHAR) {
            clear();
            return;
        }
        if (selectedClass != null && StringUtils.equals(selectedClass.name, input)) {
            return;
        }
        selectedClass = null;

        Utils.executeThread(new Utils.AsyncTask() {
            @Override
            public DefaultMutableTreeNode doInBackground() {
                componentMap = form.context.projectFinding.searchClass(input,
                        form.memberIgnoreCaseChk.isSelected(), -1);

                DefaultMutableTreeNode top = new DefaultMutableTreeNode("");
                for (Map.Entry> entry : componentMap.entrySet()) {
                    String componentName = entry.getKey();
                    List classes = entry.getValue();
                    DefaultMutableTreeNode componentNode = new DefaultMutableTreeNode(componentName);
                    top.add(componentNode);
                    for (ClassBean clazz : classes) {
                        componentNode.add(new DefaultMutableTreeNode(clazz));
                    }
                }
                return top;
            }

            @Override
            public void doUi(DefaultMutableTreeNode top) {
                if (top == null) {
                    return;
                }
                top.setUserObject("result size:" + top.getChildCount());
                form.classTree.setModel(new DefaultTreeModel(top, false));
                UIUtils.expandAll(form.classTree, true);
            }
        });

    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy