sebb        2003/10/13 17:02:56

  Added:       src/protocol/java/org/apache/jmeter/protocol/java/control/gui
                        BeanShellSamplerGui.java
               src/protocol/java/org/apache/jmeter/protocol/java/sampler
                        BeanShellSampler.java
  Log:
  New BeanShell Sampler (Beta code)
  
  Revision  Changes    Path
  1.1                  
jakarta-jmeter/src/protocol/java/org/apache/jmeter/protocol/java/control/gui/BeanShellSamplerGui.java
  
  Index: BeanShellSamplerGui.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002,2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.jmeter.protocol.java.control.gui;
  
  import java.awt.BorderLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  
  import javax.swing.Box;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JScrollPane; 
  import javax.swing.JTextArea;
  import javax.swing.JTextField;
  
  import org.apache.jmeter.protocol.java.sampler.BeanShellSampler;
  import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
  import org.apache.jmeter.testelement.TestElement;
  import org.apache.jmeter.util.JMeterUtils;
  
  /**
   * @author sebb AT apache DOT org
   * @version   $Revision: 1.1 $ $Date: 2003/10/14 00:02:56 $
   */
  public class BeanShellSamplerGui extends AbstractSamplerGui implements ActionListener
  {
        private static final String staticLabel
            = JMeterUtils.getResString("bsh_sampler_title","BeanShell Sampler (BETA 
CODE)");
        
        private static final String fileLabel =
            JMeterUtils.getResString("bsh_script_file","BeanShell Script File");
  
        private static final String scriptLabel =
            JMeterUtils.getResString("bsh_script","BeanShell Script");
        
      public BeanShellSamplerGui()
      {
          init();
      }
  
      public void configure(TestElement element)
      {
        scriptField.setText(element.getProperty(BeanShellSampler.SCRIPT).toString());
                
filename.setText(element.getProperty(BeanShellSampler.FILENAME).toString());
          super.configure(element);
      }
  
      public TestElement createTestElement()
      {
          BeanShellSampler sampler = new BeanShellSampler();
          modifyTestElement(sampler);
          return sampler;
      }
  
      /**
       * Modifies a given TestElement to mirror the data in the gui components.
       * @see JMeterGUIComponent#modifyTestElement(TestElement)
       */
      public void modifyTestElement(TestElement te)
      {
          te.clear();
          this.configureTestElement(te);
                te.setProperty(BeanShellSampler.SCRIPT, scriptField.getText());
                te.setProperty(BeanShellSampler.FILENAME, filename.getText());
      }
  
      public String getStaticLabel()
      {
          return staticLabel;
      }
      private JTextField filename;
      
  
        private JPanel createFilenamePanel()//TODO ought to be a FileChooser ...
        {
                JLabel label = new JLabel(fileLabel);
                
                filename = new JTextField(10);
                filename.setName(BeanShellSampler.FILENAME);
                label.setLabelFor(filename);
  
                JPanel filenamePanel = new JPanel(new BorderLayout(5, 0));
                filenamePanel.add(label, BorderLayout.WEST);
                filenamePanel.add(filename, BorderLayout.CENTER);
                return filenamePanel;
        }
  
  
      private void init()
      {
          setLayout(new BorderLayout(0, 5));
          setBorder(makeBorder());
  
                Box box = Box.createVerticalBox();
                box.add(makeTitlePanel());
                box.add(createFilenamePanel());
                add(box,BorderLayout.NORTH);
  
                JPanel panel = createSqlPanel();
                add(panel, BorderLayout.CENTER);
                // Don't let the input field shrink too much
                add(
                        Box.createVerticalStrut(panel.getPreferredSize().height),
                        BorderLayout.WEST);
      }
  
        private JTextArea scriptField;
  
        private JPanel createSqlPanel()
        {
                scriptField = new JTextArea();
                scriptField.setRows(4);
                scriptField.setLineWrap(true);
                scriptField.setWrapStyleWord(true);
  
                JLabel label = new JLabel(scriptLabel);
                label.setLabelFor(scriptField);
  
                JPanel panel = new JPanel(new BorderLayout());
                panel.add(label, BorderLayout.NORTH);
                panel.add(new JScrollPane(scriptField), BorderLayout.CENTER);
                return panel;
        }
  
      /* (non-Javadoc)
       * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
       */
      public void actionPerformed(ActionEvent e)
      {
          // TODO Auto-generated method stub
          
      }
  }
  
  
  
  1.1                  
jakarta-jmeter/src/protocol/java/org/apache/jmeter/protocol/java/sampler/BeanShellSampler.java
  
  Index: BeanShellSampler.java
  ===================================================================
  /*
   * ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002,2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   * notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   * notice, this list of conditions and the following disclaimer in
   * the documentation and/or other materials provided with the
   * distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   * if any, must include the following acknowledgment:
   * "This product includes software developed by the
   * Apache Software Foundation (http://www.apache.org/)."
   * Alternately, this acknowledgment may appear in the software itself,
   * if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   * "Apache JMeter" must not be used to endorse or promote products
   * derived from this software without prior written permission. For
   * written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   * "Apache JMeter", nor may "Apache" appear in their name, without
   * prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.jmeter.protocol.java.sampler;
  
  import java.io.IOException;
  
  import bsh.EvalError;
  import bsh.Interpreter;
     
  import org.apache.jmeter.samplers.AbstractSampler;
  import org.apache.jmeter.samplers.Entry;
  import org.apache.jmeter.samplers.SampleResult;
  import org.apache.jorphan.logging.LoggingManager;
  import org.apache.log.Logger;
  
  /**
   * A sampler which understands BeanShell
   *
   * @author sebb AT apache DOT org
   * @version    $Revision: 1.1 $ Updated on: $Date: 2003/10/14 00:02:56 $
   */
  public class BeanShellSampler extends AbstractSampler 
  {
        protected static Logger log = LoggingManager.getLoggerForClass();
  
      public static final String FILENAME   = "BeanShellSampler.filename"; 
//$NON-NLS-1$
        public static final String SCRIPT     = "BeanShellSampler.query"; //$NON-NLS-1$
  
      private Interpreter bshInterpreter;
        
        public BeanShellSampler()
        {
                try{
                        bshInterpreter = new Interpreter();
                } catch (NoClassDefFoundError e){
                        bshInterpreter=null;
                }
        }
      
        public void setFilename(String newFilename)
        {
                this.setProperty(FILENAME, newFilename);
        }
        public String getFilename()
        {
                return getPropertyAsString(FILENAME);
        }
  
  
      /**
       * Returns a formatted string label describing this sampler
       *
       * @return a formatted string label describing this sampler
       */
  
      public String getLabel()
      {
          return getName();
      }
  
        public String getScript()
        {
                return this.getPropertyAsString(SCRIPT);
        }
  
      public SampleResult sample(Entry e)// Entry tends to be ignored ...
      {
        //log.info(getLabel()+" "+getFilename());
          SampleResult res = new SampleResult();
          boolean isSuccessful = false;
          res.setSampleLabel(getLabel());
          long start = System.currentTimeMillis();
          try
          {
                String request=getScript();
                String fileName=getFilename();
                if (fileName.length() == 0) {
                                res.setSamplerData(request);    
                } else {
                                res.setSamplerData(fileName);
                }
                        
  
  
                        //TODO - set some more variables?
                        bshInterpreter.set("Label",getLabel());
                        bshInterpreter.set("FileName",getFilename());
  
              // Set default values
                        bshInterpreter.set("ResponseCode","200"); //$NON-NLS-1$
                        bshInterpreter.set("ResponseMessage","OK");//$NON-NLS-1$
                        bshInterpreter.set("IsSuccess",true);//$NON-NLS-1$
                        
                        Object bshOut;
                        
                        if (fileName.length() == 0){
                                bshOut = bshInterpreter.eval(request);
                        } else {
                                bshOut = bshInterpreter.source(fileName);
                        }
  
  
                        
  
                res.setResponseData(bshOut.toString().getBytes());
                res.setDataType(SampleResult.TEXT);
                
res.setResponseCode(bshInterpreter.get("ResponseCode").toString());//$NON-NLS-1$
                
res.setResponseMessage(bshInterpreter.get("ResponseMessage").toString());//$NON-NLS-1$
                isSuccessful = Boolean.valueOf(bshInterpreter.get("IsSuccess") 
//$NON-NLS-1$
                    .toString()).booleanValue();
          }
                catch (EvalError ex)
                {
                        log.debug("",ex);
                        res.setResponseCode("500");//$NON-NLS-1$
                        res.setResponseMessage(ex.toString());
                }
                catch (IOException ex)
                {
                        log.debug("",ex);
                        res.setResponseCode("500");//$NON-NLS-1$
                        res.setResponseMessage(ex.toString());
                }
  
          // Calculate response time
          long end = System.currentTimeMillis();
          res.setTime(end - start);
  
          // Set if we were successful or not
          res.setSuccessful(isSuccessful);
  
          return res;
      }
  }
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to