Version: 2.0 Update
This commit is contained in:
347
src/main/java/burp/ui/MainUI.java
Normal file
347
src/main/java/burp/ui/MainUI.java
Normal file
@@ -0,0 +1,347 @@
|
||||
package burp.ui;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import burp.yaml.LoadConfigFile;
|
||||
import burp.yaml.LoadRule;
|
||||
import burp.yaml.SetRuleConfig;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.DocumentListener;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.util.Map;
|
||||
|
||||
/*
|
||||
* @author LinChen
|
||||
*/
|
||||
|
||||
public class MainUI extends JPanel{
|
||||
public MainUI() {
|
||||
initComponents();
|
||||
}
|
||||
public void closeTabActionPerformed(ActionEvent e){
|
||||
if (tabbedPane1.getTabCount()>2){
|
||||
if (tabbedPane1.getSelectedIndex()!=0){
|
||||
SetRuleConfig setruleconfig = new SetRuleConfig();
|
||||
setruleconfig.deleteRules(tabbedPane1.getTitleAt(tabbedPane1.getSelectedIndex()));
|
||||
tabbedPane1.remove(tabbedPane1.getSelectedIndex());
|
||||
tabbedPane1.setSelectedIndex(tabbedPane1.getSelectedIndex()-1);
|
||||
}else{
|
||||
SetRuleConfig setruleconfig = new SetRuleConfig();
|
||||
setruleconfig.deleteRules(tabbedPane1.getTitleAt(tabbedPane1.getSelectedIndex()));
|
||||
tabbedPane1.remove(tabbedPane1.getSelectedIndex());
|
||||
tabbedPane1.setSelectedIndex(tabbedPane1.getSelectedIndex());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SelectFileMouseClicked(MouseEvent e) {
|
||||
JFileChooser chooseconfig = new JFileChooser();
|
||||
chooseconfig.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||
FileNameExtensionFilter filter = new FileNameExtensionFilter("Yaml File (.yml/.yaml)","yaml", "yml");
|
||||
chooseconfig.setFileFilter(filter);
|
||||
int selectframe = chooseconfig.showDialog(new JLabel(),"Select");
|
||||
if (selectframe == JFileChooser.APPROVE_OPTION){
|
||||
String configpath = chooseconfig.getSelectedFile().toString();
|
||||
reloadRule(configpath);
|
||||
loadfile.setConfigPath(configpath);
|
||||
}
|
||||
configfilepathtext.setText(loadfile.getConfigPath());
|
||||
}
|
||||
private void reloadRule(String configfile){
|
||||
tabbedPane1.removeAll();
|
||||
LoadRule loadrule = new LoadRule(configfile);
|
||||
Map<String,Object[][]> config = loadrule.getConfig();
|
||||
ruleSwitch.setListen(false);
|
||||
config.keySet().forEach(i->tabbedPane1.addTab(i,new RulePane(config.get(i),tabbedPane1)));
|
||||
tabbedPane1.addTab("...",new JLabel());
|
||||
ruleSwitch.setListen(true);
|
||||
}
|
||||
private void reloadRule(){
|
||||
tabbedPane1.removeAll();
|
||||
LoadRule loadrule = new LoadRule(loadfile.getConfigPath());
|
||||
Map<String,Object[][]> config = loadrule.getConfig();
|
||||
ruleSwitch.setListen(false);
|
||||
config.keySet().forEach(i->tabbedPane1.addTab(i,new RulePane(config.get(i),tabbedPane1))
|
||||
);
|
||||
tabbedPane1.addTab("...",new JLabel());
|
||||
ruleSwitch.setListen(true);
|
||||
}
|
||||
|
||||
private void reloadMouseClicked(MouseEvent e) {
|
||||
reloadRule();
|
||||
}
|
||||
private void ESSaveMouseClicked(MouseEvent e) {
|
||||
// TODO add your code here
|
||||
LoadConfigFile lcf = new LoadConfigFile();
|
||||
lcf.setExcludeSuffix(EStext.getText());
|
||||
}
|
||||
private void initComponents() {
|
||||
tabbedPane2 = new JTabbedPane();
|
||||
tabbedPane1 = new JTabbedPane();
|
||||
panel3 = new JPanel();
|
||||
configfilepathtext = new JTextField();
|
||||
label1 = new JLabel();
|
||||
SelectFile = new JButton();
|
||||
reload = new JButton();
|
||||
label2 = new JLabel();
|
||||
EStext = new JTextField();
|
||||
ESSave = new JButton();
|
||||
|
||||
//======== this ========
|
||||
setLayout(new GridBagLayout());
|
||||
((GridBagLayout)getLayout()).columnWidths = new int[] {0, 0};
|
||||
((GridBagLayout)getLayout()).rowHeights = new int[] {0, 0};
|
||||
((GridBagLayout)getLayout()).columnWeights = new double[] {1.0, 1.0E-4};
|
||||
((GridBagLayout)getLayout()).rowWeights = new double[] {1.0, 1.0E-4};
|
||||
|
||||
//======== tabbedPane2 ========
|
||||
{
|
||||
tabbedPane2.addTab("Rules", tabbedPane1);
|
||||
|
||||
//======== panel3 ========
|
||||
{
|
||||
panel3.setLayout(new GridBagLayout());
|
||||
((GridBagLayout)panel3.getLayout()).columnWidths = new int[] {0, 0, 0, 0, 0};
|
||||
((GridBagLayout)panel3.getLayout()).rowHeights = new int[] {0, 0, 0};
|
||||
((GridBagLayout)panel3.getLayout()).columnWeights = new double[] {0.0, 1.0, 0.0, 0.0, 1.0E-4};
|
||||
((GridBagLayout)panel3.getLayout()).rowWeights = new double[] {0.0, 0.0, 1.0E-4};
|
||||
|
||||
//---- configfilepathtext ----
|
||||
configfilepathtext.setEditable(false);
|
||||
panel3.add(configfilepathtext, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
||||
new Insets(5, 0, 5, 5), 0, 0));
|
||||
|
||||
//---- label1 ----
|
||||
label1.setText("Config File Path:");
|
||||
panel3.add(label1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.WEST, GridBagConstraints.VERTICAL,
|
||||
new Insets(5, 5, 5, 5), 0, 0));
|
||||
|
||||
//---- SelectFile ----
|
||||
SelectFile.setText("Select File ...");
|
||||
SelectFile.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
SelectFileMouseClicked(e);
|
||||
}
|
||||
});
|
||||
panel3.add(SelectFile, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
||||
new Insets(5, 0, 5, 5), 0, 0));
|
||||
|
||||
//---- reload ----
|
||||
reload.setText("Reload");
|
||||
reload.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
reloadMouseClicked(e);
|
||||
}
|
||||
});
|
||||
panel3.add(reload, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0,
|
||||
|
||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
||||
new Insets(5, 0, 5, 5), 0, 0));
|
||||
//---- label2 ----
|
||||
label2.setText("ExcludeSuffix:");
|
||||
panel3.add(label2, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.SOUTHWEST, GridBagConstraints.NONE,
|
||||
new Insets(0, 5, 5, 5), 0, 0));
|
||||
panel3.add(EStext, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.SOUTH, GridBagConstraints.HORIZONTAL,
|
||||
new Insets(0, 0, 0, 5), 0, 0));
|
||||
|
||||
//---- ESSave ----
|
||||
ESSave.setText("Save");
|
||||
ESSave.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
ESSaveMouseClicked(e);
|
||||
}
|
||||
});
|
||||
panel3.add(ESSave, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.SOUTH, GridBagConstraints.HORIZONTAL,
|
||||
new Insets(0, 0, 0, 5), 0, 0));
|
||||
}
|
||||
tabbedPane2.addTab("Config", panel3);
|
||||
}
|
||||
add(tabbedPane2, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
|
||||
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
|
||||
new Insets(0, 0, 0, 0), 0, 0));
|
||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||
|
||||
LoadRule loadRule = new LoadRule(loadfile.getConfigPath());
|
||||
Map<String,Object[][]> config = loadRule.getConfig();
|
||||
config.keySet().forEach(i->tabbedPane1.addTab(i,new RulePane(config.get(i),tabbedPane1)));
|
||||
|
||||
tabbedPane1.addTab("...",new JLabel());
|
||||
|
||||
//TabTitleEditListener ruleSwitch = new TabTitleEditListener(tabbedPane1);
|
||||
configfilepathtext.setText(loadfile.getConfigPath());
|
||||
LoadConfigFile lcf =new LoadConfigFile();
|
||||
EStext.setText(lcf.getExcludeSuffix());
|
||||
ruleSwitch = new TabTitleEditListener(tabbedPane1);
|
||||
tabbedPane1.addChangeListener(ruleSwitch);
|
||||
tabbedPane1.addMouseListener(ruleSwitch);
|
||||
closeTab.addActionListener(e -> closeTabActionPerformed(e));
|
||||
tabMenu.add(closeTab);
|
||||
}
|
||||
|
||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||
private JTabbedPane tabbedPane2;
|
||||
private JTabbedPane tabbedPane1;
|
||||
private JPanel panel3;
|
||||
private JTextField configfilepathtext;
|
||||
private JLabel label1;
|
||||
private JButton SelectFile;
|
||||
private JButton reload;
|
||||
private JLabel label2;
|
||||
private JTextField EStext;
|
||||
private JButton ESSave;
|
||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||
protected static JPopupMenu tabMenu = new JPopupMenu();
|
||||
private JMenuItem closeTab = new JMenuItem("Delete");
|
||||
private TabTitleEditListener ruleSwitch;
|
||||
private LoadConfigFile loadfile = new LoadConfigFile();
|
||||
}
|
||||
|
||||
class TabTitleEditListener extends MouseAdapter implements ChangeListener, DocumentListener {
|
||||
protected final JTextField editor = new JTextField();
|
||||
protected final JTabbedPane tabbedPane;
|
||||
protected int editingIdx = -1;
|
||||
protected int len = -1;
|
||||
protected Boolean listen = true;
|
||||
protected Dimension dim;
|
||||
protected Component tabComponent;
|
||||
protected Boolean isRenamesucc = false;
|
||||
protected LoadConfigFile loadfile = new LoadConfigFile();
|
||||
protected LoadRule lr = new LoadRule(loadfile.getConfigPath());
|
||||
protected SetRuleConfig setruleconfig = new SetRuleConfig();
|
||||
protected final Action startEditing = new AbstractAction() {
|
||||
@Override public void actionPerformed(ActionEvent e) {
|
||||
editingIdx = tabbedPane.getSelectedIndex();
|
||||
tabComponent = tabbedPane.getTabComponentAt(editingIdx);
|
||||
tabbedPane.setTabComponentAt(editingIdx, editor);
|
||||
isRenamesucc = true;
|
||||
editor.setVisible(true);
|
||||
editor.setText(tabbedPane.getTitleAt(editingIdx));
|
||||
editor.selectAll();
|
||||
editor.requestFocusInWindow();
|
||||
len = editor.getText().length();
|
||||
dim = editor.getPreferredSize();
|
||||
editor.setMinimumSize(dim);
|
||||
}
|
||||
};
|
||||
protected final Action renameTabTitle = new AbstractAction() {
|
||||
@Override public void actionPerformed(ActionEvent e) {
|
||||
String title = editor.getText().trim();
|
||||
if (editingIdx >= 0 && !title.isEmpty()) {
|
||||
String oldname = tabbedPane.getTitleAt(editingIdx);
|
||||
tabbedPane.setTitleAt(editingIdx, title);
|
||||
setruleconfig.rename(oldname,title);
|
||||
}
|
||||
cancelEditing.actionPerformed(null);
|
||||
}
|
||||
};
|
||||
protected final Action cancelEditing = new AbstractAction() {
|
||||
@Override public void actionPerformed(ActionEvent e) {
|
||||
if (editingIdx >= 0) {
|
||||
tabbedPane.setTabComponentAt(editingIdx, tabComponent);
|
||||
editor.setVisible(false);
|
||||
editingIdx = -1;
|
||||
len = -1;
|
||||
tabComponent = null;
|
||||
editor.setPreferredSize(null);
|
||||
tabbedPane.requestFocusInWindow();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
protected TabTitleEditListener(JTabbedPane tabbedPane) {
|
||||
super();
|
||||
this.tabbedPane = tabbedPane;
|
||||
editor.setBorder(BorderFactory.createEmptyBorder());
|
||||
editor.addFocusListener(new FocusAdapter() {
|
||||
@Override public void focusLost(FocusEvent e) {
|
||||
renameTabTitle.actionPerformed(null);
|
||||
}
|
||||
});
|
||||
InputMap im = editor.getInputMap(JComponent.WHEN_FOCUSED);
|
||||
ActionMap am = editor.getActionMap();
|
||||
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel-editing");
|
||||
am.put("cancel-editing", cancelEditing);
|
||||
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "rename-tab-title");
|
||||
am.put("rename-tab-title", renameTabTitle);
|
||||
editor.getDocument().addDocumentListener(this);
|
||||
tabbedPane.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "start-editing");
|
||||
tabbedPane.getActionMap().put("start-editing", startEditing);
|
||||
}
|
||||
@Override public void stateChanged(ChangeEvent e) {
|
||||
if (e.getSource() instanceof JTabbedPane && listen) {
|
||||
JTabbedPane pane = (JTabbedPane) e.getSource();
|
||||
if (!isRenamesucc){
|
||||
if (pane.getSelectedIndex() == pane.getComponentCount()-1){
|
||||
newTab();
|
||||
}
|
||||
}else{
|
||||
if (pane.getSelectedIndex() == pane.getComponentCount()-2){
|
||||
newTab();
|
||||
}
|
||||
}
|
||||
}
|
||||
renameTabTitle.actionPerformed(null);
|
||||
}
|
||||
public void newTab(){
|
||||
Object[][] data = new Object[][]{{false, "New Name", "(New Regex)", "gray", "any", "nfa"}};
|
||||
insertTab(tabbedPane,setruleconfig.newRules(),data);
|
||||
}
|
||||
public void insertTab(@NotNull JTabbedPane pane,String title,Object[][] data){
|
||||
pane.addTab(title,new RulePane(data,pane));
|
||||
pane.remove(pane.getSelectedIndex());
|
||||
pane.addTab("...",new JLabel());
|
||||
}
|
||||
public void setListen(Boolean listen){
|
||||
this.listen = listen;
|
||||
}
|
||||
@Override public void insertUpdate(DocumentEvent e) {
|
||||
updateTabSize();
|
||||
}
|
||||
|
||||
@Override public void removeUpdate(DocumentEvent e) {
|
||||
updateTabSize();
|
||||
}
|
||||
|
||||
@Override public void changedUpdate(DocumentEvent e) {}
|
||||
|
||||
@Override public void mouseClicked(MouseEvent e) {
|
||||
switch (e.getButton()){
|
||||
case 1:
|
||||
{
|
||||
Rectangle r = tabbedPane.getBoundsAt(tabbedPane.getSelectedIndex());
|
||||
boolean isDoubleClick = e.getClickCount() >= 2;
|
||||
if (isDoubleClick && r.contains(e.getPoint())) {
|
||||
startEditing.actionPerformed(null);
|
||||
} else {
|
||||
renameTabTitle.actionPerformed(null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:{
|
||||
MainUI.tabMenu.show(e.getComponent(),e.getX(),e.getY());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected void updateTabSize() {
|
||||
editor.setPreferredSize(editor.getText().length() > len ? null : dim);
|
||||
tabbedPane.revalidate();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user