
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