Java tutorial
/* * Copyright (C) 2010, Andiparos Project * * Code contributed by Stephen de Vries * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see http://www.gnu.org/copyleft/ * */ package org.parosproxy.paros.extension.beanshell; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.HeadlessException; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.JPanel; import org.parosproxy.paros.extension.AbstractDialog; import org.parosproxy.paros.extension.Extension; import org.parosproxy.paros.extension.ViewDelegate; import org.parosproxy.paros.model.Model; import org.parosproxy.paros.network.HttpSender; import org.parosproxy.paros.view.BeanShellPanel; import bsh.EvalError; import bsh.Interpreter; /** * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class BeanShellConsoleDialog extends AbstractDialog { private BeanShellPanel beanShellPanel = null; private JPanel panelCommand = null; private JButton btnEvaluate = null; private JButton btnLoad = null; private JButton btnSave = null; private JButton btnSaveAs = null; private Extension extension = null; private Interpreter interpreter = null; private String scriptsDir = System.getProperty("user.dir") + "/scripts/"; private File currentScriptFile = null; private ViewDelegate view = null; private JPanel jPanel = null; /** * @throws HeadlessException */ public BeanShellConsoleDialog() throws HeadlessException { super(); initialize(); } /** * @param arg0 * @param arg1 * @throws HeadlessException */ public BeanShellConsoleDialog(Frame parent, boolean modal, Extension extension) throws HeadlessException { super(parent, modal); this.extension = extension; initialize(); } /** * This method initializes this * * @return void */ private void initialize() { getBeanShellPanel().getPanelOption().add(getPanelCommand(), ""); this.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { //Don't think we need todo anything here } }); this.setContentPane(getJPanel()); } /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getPanelCommand() { if (panelCommand == null) { panelCommand = new JPanel(); panelCommand.setLayout(new FlowLayout()); panelCommand.add(getBtnLoad()); panelCommand.add(getBtnSave()); panelCommand.add(getBtnSaveAs()); panelCommand.add(getBtnEvaluate()); } return panelCommand; } /** * This method initializes jButton * * @return javax.swing.JButton */ private JButton getBtnEvaluate() { if (btnEvaluate == null) { btnEvaluate = new JButton(); btnEvaluate.setText("Evaluate"); btnEvaluate.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { beanShellEval(getBeanShellPanel().getTxtEditor().getText()); } }); } return btnEvaluate; } private void beanShellEval(String cmd) { try { getInterpreter().eval(cmd); } catch (EvalError ex) { getInterpreter().error(ex.getMessage()); } } private String loadScript(File file) throws IOException { BufferedReader input = null; input = new BufferedReader(new FileReader(file)); String str; StringBuffer temp = new StringBuffer(); while ((str = input.readLine()) != null) { temp.append(str); temp.append(System.getProperty("line.separator")); } input.close(); return (temp.toString()); } private void saveScript(String contents, File file) throws IOException { BufferedWriter output = null; output = new BufferedWriter(new FileWriter(file)); output.write(contents); output.close(); } private JButton getBtnLoad() { if (btnLoad == null) { btnLoad = new JButton(); btnLoad.setText("Load..."); btnLoad.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (getBeanShellPanel().isSaved() == false) { int confirm = view.showConfirmDialog("Script is not saved, discard?"); if (confirm == JOptionPane.CANCEL_OPTION) return; } JFileChooser fc = new JFileChooser(scriptsDir); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); int result = fc.showOpenDialog(getBeanShellPanel()); if (result == JFileChooser.APPROVE_OPTION) { try { String temp = loadScript(fc.getSelectedFile()); getBeanShellPanel().getTxtEditor().setText(temp); getBeanShellPanel().setSaved(true); currentScriptFile = fc.getSelectedFile(); } catch (IOException ee) { ee.printStackTrace(); } } } }); } return btnLoad; } private JButton getBtnSave() { if (btnSave == null) { btnSave = new JButton(); btnSave.setText("Save..."); btnSave.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { if (currentScriptFile != null) { try { saveScript(getBeanShellPanel().getTxtEditor().getText(), currentScriptFile); getBeanShellPanel().setSaved(true); } catch (IOException ee) { ee.printStackTrace(); } } else { JFileChooser fc = new JFileChooser(scriptsDir); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); int result = fc.showSaveDialog(getBeanShellPanel()); if (result == JFileChooser.APPROVE_OPTION) { try { saveScript(getBeanShellPanel().getTxtEditor().getText(), fc.getSelectedFile()); getBeanShellPanel().setSaved(true); currentScriptFile = fc.getSelectedFile(); } catch (IOException ee) { ee.printStackTrace(); } } } } }); } return btnSave; } private JButton getBtnSaveAs() { if (btnSaveAs == null) { btnSaveAs = new JButton(); btnSaveAs.setText("Save as..."); btnSaveAs.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { JFileChooser fc = new JFileChooser(scriptsDir); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); int result = fc.showSaveDialog(getBeanShellPanel()); if (result == JFileChooser.APPROVE_OPTION) { try { saveScript(getBeanShellPanel().getTxtEditor().getText(), fc.getSelectedFile()); getBeanShellPanel().setSaved(true); currentScriptFile = fc.getSelectedFile(); } catch (IOException ee) { ee.printStackTrace(); } } } }); } return btnSaveAs; } public void setExtension(Extension extension) { this.extension = extension; } private Extension getExtension() { return extension; } public void setVisible(boolean show) { super.setVisible(show); } private BeanShellPanel getBeanShellPanel() { if (beanShellPanel == null) { beanShellPanel = new BeanShellPanel(); } return beanShellPanel; } public Interpreter getInterpreter() { if (interpreter == null) { interpreter = new Interpreter(getBeanShellPanel().getConsole()); } return interpreter; } /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getJPanel() { if (jPanel == null) { GridBagConstraints gridBagConstraints31 = new GridBagConstraints(); jPanel = new JPanel(); jPanel.setLayout(new GridBagLayout()); gridBagConstraints31.gridx = 0; gridBagConstraints31.gridy = 0; gridBagConstraints31.weightx = 1.0; gridBagConstraints31.weighty = 1.0; gridBagConstraints31.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints31.anchor = java.awt.GridBagConstraints.NORTHWEST; HttpSender sender = new HttpSender(Model.getSingleton().getOptionsParam().getConnectionParam(), true); try { getInterpreter().set("model", Model.getSingleton()); getInterpreter().set("sites", Model.getSingleton().getSession().getSiteTree()); getInterpreter().set("sender", sender); getInterpreter().eval("setAccessibility(true)"); //This allows BeanShell users to access private members getInterpreter().eval("import org.apache.commons.httpclient.URI"); getInterpreter().eval("import org.parosproxy.paros.network.*"); getInterpreter().eval("import org.parosproxy.paros.model.*"); getInterpreter().eval("import org.parosproxy.paros.db.*"); getInterpreter().eval("import org.parosproxy.paros.model.*;"); } catch (EvalError e) { e.printStackTrace(); } new Thread(getInterpreter()).start(); jPanel.add(getBeanShellPanel(), gridBagConstraints31); } return jPanel; } public void setView(ViewDelegate view) { this.view = view; } }