Thank you. I will do that
On Friday, July 5, 2013, Philippe Mouawad wrote:
> Hello,
> It is really a good idea, why not open a bugzilla and attach a patch for
> this ?
>
> Thanks
> Regards
>
>
> On Fri, Jul 5, 2013 at 5:40 PM, Marko Vlahovic <vlahovic74@gmail.com<javascript:;>>
> wrote:
>
> > Hi
> >
> > *Problem Statement:*
> > In my daily work i used BeanShell elements extensively and i find them to
> > be very powerful giving the edge to jmeter over the other test
> frameworks.
> > However, writing Java or Python code in JTextArea is really painful and
> > error prone (and it can hurt the eyes too).
> >
> > *Proposal:*
> > I would like to propose to Jmeter Dev Community to include
> > rsyntaxtextarea-2.0.7.jar library that can do syntax highlighting, code
> > folding, undo typing, and redo typing. The library is published under BSD
> > license and more details can be found here:
> > http://fifesoft.com/rsyntaxtextarea/
> > The jar file needs to be compiled from source (It is very easy to do.
> Took
> > me only 5 minutes to compile and add it to jmeter project in eclipse)
> >
> > *Implementation change Proposal:*
> > The following is the list of files that i changed to make Syntax
> > Highlighting work:
> > M
> >
> >
> src/protocol/java/org/apache/jmeter/protocol/java/control/gui/BeanShellSamplerGui.java
> > M
> >
> src/components/org/apache/jmeter/assertions/gui/BeanShellAssertionGui.java
> > ? src/core/org/apache/jmeter/testbeans/gui/textarea.properties
> > M src/core/org/apache/jmeter/testbeans/gui/TextAreaEditor.java
> > M src/core/org/apache/jmeter/testbeans/gui/WrapperEditor.java
> > M
> > src/core/org/apache/jmeter/testbeans/gui/GenericTestBeanCustomizer.java
> >
> > I also had to add the following in build.properties
> > rsyntaxtextarea.version = 2.0.7
> > rsyntaxtextarea.jar =
> > rsyntaxtextarea-${rsyntaxtextarea.version}.jar
> > rsyntaxtextarea.md5 = a4bdaabc88ff5464002a43c654bbf856
> >
> > the following in .classpath
> > <classpathentry kind="lib" path="lib/rsyntaxtextarea-2.0.7.jar"/>
> >
> > And the following in build.xml
> > <include name="${lib.dir}/${rsyntaxtextarea.jar}"/>
> > </patternset>
> > ...
> > <pathelement location="${lib.dir}/${xstream.jar}"/>
> > <pathelement location="${lib.dir}/${rsyntaxtextarea.jar}"/>
> > ...
> >
> > *Implementation Details** TextAreaEditor.java and textarea.properties*:
> > Instead of JTextArea, textUI uses RSyntaxTextArea. In order to have
> numbers
> > for lines i also changes the scroller to RTextScrollPane.
> > To support different languages from BSF and JSR elements new private
> field
> > languageProperties is added. This field keeps mapping between different
> > languages and syntaxes available in SyntaxConstants interface. Mappings
> are
> > defined in textarea.properties file Also the TextAreaEditor implements
> > PropertyChangeListener so that propertyChange events can be captured. In
> > summary:
> >
> > public class TextAreaEditor extends PropertyEditorSupport implements
> > FocusListener, PropertyChangeListener {
> >
> > private RSyntaxTextArea textUI;
> >
> > private RTextScrollPane scroller;
> >
> > private Properties languageProperties;
> > ...
> > private final void init() {// called from ctor, so must not be
> > overridable
> > textUI = new RSyntaxTextArea(20,20);
> > textUI.discardAllEdits();
> > textUI.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
> > textUI.setCodeFoldingEnabled(true);
> > textUI.setAntiAliasingEnabled(true);
> > textUI.addFocusListener(this);
> > textUI.setWrapStyleWord(true);
> > textUI.setLineWrap(true);
> > scroller = new RTextScrollPane(textUI);
> > scroller.setFoldIndicatorEnabled(true);
> > languageProperties =
> >
> >
> JMeterUtils.loadProperties("org/apache/jmeter/testbeans/gui/textarea.properties");
> > }
> > ...
> > @Override
> > public void propertyChange(PropertyChangeEvent evt){
> > Object source = evt.getSource();
> > if (source instanceof ComboStringEditor && source !=null){
> > ComboStringEditor cse = (ComboStringEditor)source;
> > String lang = cse.getAsText().toLowerCase();
> > if (languageProperties.containsKey(lang)){
> >
> > textUI.setSyntaxEditingStyle(languageProperties.getProperty(lang));
> > }
> > else{
> >
> > textUI.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_NONE);
> > }
> >
> > }
> > }
> >
> > *Implementation Details BeanShellAssertionGui.java and **
> > BeanShellSamplerGui.java*
> > This is not a java bean element so direct change was applied:
> >
> > private RSyntaxTextArea scriptField;// script area
> > ...
> > private JPanel createScriptPanel() {
> > scriptField = new RSyntaxTextArea(20,20);
> >
> > scriptField.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
> > scriptField.setCodeFoldingEnabled(true);
> > scriptField.setAntiAliasingEnabled(true);
> > scriptField.setLineWrap(true);
> > scriptField.setWrapStyleWord(true);
> > ...
> > JPanel panel = new JPanel(new BorderLayout());
> > panel.add(label, BorderLayout.NORTH);
> > panel.add(new RTextScrollPane(scriptField), BorderLayout.CENTER);
> >
> >
> > *Implementation Details **GenericTestBeanCustomizer.java*
> > Changes made here were necessary to enable Syntax Highlighting changes
> when
> > different language is selected in ComboBox in BSF and JSR elements.
> >
> > GenericTestBeanCustomizer(BeanInfo beanInfo) {
> > super();
> > ...
> > // Added in the "for" loop for descriptors
> > //Find the index of textAreaEditor
> > if (propertyEditor instanceof TextAreaEditor)
> > {
> > textAreaEditorIndex = i;
> > }
> >
> > //Figure out the index of scriptLanguage ComboBOx
> > if (name.equals("scriptLanguage")){
> > scriptLanguageIndex=i;
> > }
> > ...
> >
> > // This is after the for loop. In case of BSF and JSR elements i
> > want to add textAreaEditor as
> > // a listener to scriptLanguage ComboBox.
> > String beanName = this.beanInfo.getBeanDescriptor().getName();
> > if (beanName.startsWith("BSF") || beanName.startsWith("JSR223")){
> > WrapperEditor we = (WrapperEditor)
> > editors[scriptLanguageIndex];
> > TextAreaEditor tae = (TextAreaEditor)
> > editors[textAreaEditorIndex];
> > we.addChangeListener(tae);
> > }
> > ...
> >
> > *Implementation Details **WrapperEditor.java*
> > In the GenericTestBeanCustomizer constructor i used
> > e.addChangeListener(tae)
> > to add listener to comboBox. Consequently, WrapperEditor class had to be
> > modified, thus addChangeListener method is added that will do actual
> > listener adding on the guiEditor
> >
> > public void addChangeListener(PropertyChangeListener listener){
> > guiEditor.addPropertyChangeListener(listener);
> > }
> >
> > *Conclusion*
> > I found Syntax Highlighting to significantly improve look and feel of
> > Scripting elements in Jmeter. Especially revording was to find that
> > RSyntaxTextArea has integrated undo/redo. It is available by simply right
> > clicking in the TextArea.
> > Nevertheless, all the changes proposed are cosmetic and up to you to
> decide
> > if it would be worth changing in Jmeter.
> >
> > Best Regards
> > Marko
> >
>
>
>
> --
> Cordialement.
> Philippe Mouawad.
>
|