You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by js...@apache.org on 2003/12/30 18:00:12 UTC

cvs commit: jakarta-jmeter/src/core/org/apache/jmeter/gui/util MenuFactory.java

jsalvata    2003/12/30 09:00:12

  Modified:    src/core/org/apache/jmeter/gui Tag:
                        testbeans_experimental_branch GuiPackage.java
                        GUIFactory.java
               src/core/org/apache/jmeter/junit Tag:
                        testbeans_experimental_branch JMeterTest.java
               src/core/org/apache/jmeter/gui/util Tag:
                        testbeans_experimental_branch MenuFactory.java
  Added:       src/core/org/apache/jmeter/testbeans/gui Tag:
                        testbeans_experimental_branch TestBeanGUI.java
               src/core/org/apache/jmeter/testbeans Tag:
                        testbeans_experimental_branch TestBean.java
  Log:
  Basic changes to support TestBeans: created the
  TestBean and TestBeanGUI classes and modified the core
  GUI classes to support creating GUI elements from them.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.1.2.1   +549 -0    jakarta-jmeter/src/core/org/apache/jmeter/testbeans/gui/Attic/TestBeanGUI.java
  
  
  
  
  No                   revision
  No                   revision
  1.17.2.1  +82 -11    jakarta-jmeter/src/core/org/apache/jmeter/gui/GuiPackage.java
  
  Index: GuiPackage.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/GuiPackage.java,v
  retrieving revision 1.17
  retrieving revision 1.17.2.1
  diff -u -r1.17 -r1.17.2.1
  --- GuiPackage.java	18 Aug 2003 19:40:42 -0000	1.17
  +++ GuiPackage.java	30 Dec 2003 17:00:11 -0000	1.17.2.1
  @@ -66,6 +66,8 @@
   import org.apache.jmeter.gui.tree.JMeterTreeListener;
   import org.apache.jmeter.gui.tree.JMeterTreeModel;
   import org.apache.jmeter.gui.tree.JMeterTreeNode;
  +import org.apache.jmeter.testbeans.TestBean;
  +import org.apache.jmeter.testbeans.gui.TestBeanGUI;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.testelement.TestPlan;
   import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
  @@ -180,7 +182,18 @@
        */
       public JMeterGUIComponent getGui(TestElement node)
       {
  -        return getGui(node, node.getPropertyAsString(TestElement.GUI_CLASS));
  +        try
  +        {
  +            return getGui(
  +                node, 
  +                Class.forName(node.getPropertyAsString(TestElement.GUI_CLASS)),
  +                Class.forName(node.getPropertyAsString(TestElement.TEST_CLASS)));
  +        }
  +        catch (ClassNotFoundException e)
  +        {
  +            log.error("Could not get GUI for node "+node, e);
  +            return null;
  +        }
       }
   
       /**
  @@ -193,11 +206,14 @@
        * @param node     the test element which this GUI is being created for
        * @param guiClass the fully qualifed class name of the GUI component which
        *                 will be created if it doesn't already exist
  +     * @param testClass the fully qualifed class name of the test elements which
  +     *                 have to be edited by the returned GUI component
        * 
        * @return         the GUI component corresponding to the specified test
        *                 element
        */
  -    public JMeterGUIComponent getGui(TestElement node, String guiClass)
  +    public JMeterGUIComponent getGui(
  +        TestElement node, Class guiClass, Class testClass)
       {
           log.debug("Getting gui for " + node);
           try
  @@ -206,7 +222,7 @@
               log.debug("Gui retrieved = " + comp);
               if (comp == null)
               {
  -                comp = getGuiFromCache(guiClass);
  +                comp = getGuiFromCache(guiClass, testClass);
                   nodesToGui.put(node, comp);
               }
               return comp;
  @@ -241,7 +257,7 @@
               TestElement currentNode =
                   treeListener.getCurrentNode().createTestElement();
               JMeterGUIComponent comp = getGui(currentNode);
  -            if(!(comp instanceof AbstractVisualizer))  // a hack that needs to be fixed for 2.0
  +            if(!(comp instanceof AbstractVisualizer))  // TODO: a hack that needs to be fixed for 2.0
               {
                   comp.clear();
               }
  @@ -269,14 +285,16 @@
        * Create a TestElement corresponding to the specified GUI class. 
        * 
        * @param guiClass the fully qualified class name of the GUI component
  -     * 
  +     *                  or a TestBean class for TestBeanGUIs.  
  +     * @param testClass the fully qualified class name of the test elements
  +     *                 edited by this GUI component.
        * @return the test element corresponding to the specified GUI class.
        */
  -    public TestElement createTestElement(String guiClass)
  +    public TestElement createTestElement(Class guiClass, Class testClass)
       {
           try
           {
  -            JMeterGUIComponent comp = getGuiFromCache(guiClass);
  +            JMeterGUIComponent comp = getGuiFromCache(guiClass, testClass);
               comp.clear();
               TestElement node = comp.createTestElement();
               nodesToGui.put(node, comp);
  @@ -290,6 +308,50 @@
       }
   
       /**
  +     * Create a TestElement for a GUI or TestBean class.
  +     * <p>
  +     * This is a utility method to help actions do with one single String
  +     * parameter. 
  +     * 
  +     * @param objClass the fully qualified class name of the GUI component or of
  +     *                  the TestBean subclass for which a TestBeanGUI is wanted.  
  +     * @return the test element corresponding to the specified GUI class.
  +     */
  +    public TestElement createTestElement(String objClass)
  +    {
  +        JMeterGUIComponent comp;
  +        Class c;
  +        try
  +        {
  +            c= Class.forName(objClass);
  +            if (TestBean.class.isAssignableFrom(c))
  +            {
  +                comp= getGuiFromCache(TestBeanGUI.class, c);
  +            }
  +            else
  +            {
  +                comp= getGuiFromCache(c, null);
  +            }
  +            comp.clear();
  +            TestElement node = comp.createTestElement();
  +            nodesToGui.put(node, comp);
  +            return node;
  +        }
  +        catch (ClassNotFoundException e)
  +        {
  +            log.error("Problem retrieving gui for "+objClass, e);
  +            throw new Error(e); // Programming error: bail out.
  +        } catch (InstantiationException e)
  +        {
  +            log.error("Problem retrieving gui for "+objClass, e);
  +            throw new Error(e); // Programming error: bail out.
  +        } catch (IllegalAccessException e)
  +        {
  +            log.error("Problem retrieving gui for "+objClass, e);
  +            throw new Error(e); // Programming error: bail out.
  +        }
  +    }
  +    /**
        * Get an instance of the specified JMeterGUIComponent class.  If an
        * instance of the GUI class has previously been created and it is not
        * marked as an {@link UnsharedComponent}, that shared instance will be
  @@ -298,7 +360,9 @@
        * 
        * @param guiClass the fully qualified class name of the GUI component.
        *                 This class must implement JMeterGUIComponent.
  -     * 
  +     * @param testClass the fully qualified class name of the test elements
  +     *                 edited by this GUI component. This class must 
  +     *                 implement TestElement.
        * @return         an instance of the specified class
        * 
        * @throws InstantiationException if an instance of the object cannot be
  @@ -308,7 +372,7 @@
        * @throws ClassNotFoundException if the specified GUI class cannot be
        *                                found
        */
  -    private JMeterGUIComponent getGuiFromCache(String guiClass)
  +    private JMeterGUIComponent getGuiFromCache(Class guiClass, Class testClass)
           throws InstantiationException,
                  IllegalAccessException,
                  ClassNotFoundException
  @@ -316,7 +380,14 @@
           JMeterGUIComponent comp = (JMeterGUIComponent) guis.get(guiClass);
           if (comp == null)
           {
  -            comp = (JMeterGUIComponent) Class.forName(guiClass).newInstance();
  +            if (guiClass == TestBeanGUI.class)
  +            {
  +                comp= new TestBeanGUI(testClass);
  +            }
  +            else
  +            {
  +                comp = (JMeterGUIComponent) guiClass.newInstance();
  +            }
               if (!(comp instanceof UnsharedComponent))
               {
                   guis.put(guiClass, comp);
  
  
  
  1.5.2.1   +15 -3     jakarta-jmeter/src/core/org/apache/jmeter/gui/GUIFactory.java
  
  Index: GUIFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/GUIFactory.java,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- GUIFactory.java	5 Oct 2003 01:05:31 -0000	1.5
  +++ GUIFactory.java	30 Dec 2003 17:00:11 -0000	1.5.2.1
  @@ -61,6 +61,8 @@
   import javax.swing.ImageIcon;
   import javax.swing.JComponent;
   
  +import org.apache.jmeter.testbeans.gui.TestBeanGUI;
  +
   
   /**
    * Provides a way to register and retrieve GUI classes and icons.
  @@ -162,17 +164,27 @@
        * 
        * @param key       the name which can be used to retrieve this GUI later
        * @param guiClass  the class object for the GUI component
  +     * @param testClass the class of the objects edited by this GUI
        * 
        * @throws InstantiationException if an instance of the GUI class can not
        *    be instantiated
        * @throws IllegalAccessException if access rights do not permit an instance
        *    of the GUI class to be created
        */
  -    public static void registerGUI(String key, Class guiClass)
  +    public static void registerGUI(String key, Class guiClass, Class testClass)
               throws InstantiationException, IllegalAccessException
       {
           // TODO: This method doesn't appear to be used.
  -        JMeterGUIComponent gui = (JMeterGUIComponent) guiClass.newInstance();
  +        JMeterGUIComponent gui;
  +        
  +        if (guiClass == TestBeanGUI.class)
  +        {
  +            gui= new TestBeanGUI(testClass);
  +        }
  +        else
  +        {
  +            gui = (JMeterGUIComponent) guiClass.newInstance();
  +        }
           GUI_MAP.put(key, gui);
       }
   }
  
  
  
  No                   revision
  No                   revision
  1.1.2.1   +511 -0    jakarta-jmeter/src/core/org/apache/jmeter/testbeans/Attic/TestBean.java
  
  
  
  
  No                   revision
  No                   revision
  1.22.2.1  +11 -1     jakarta-jmeter/src/core/org/apache/jmeter/junit/JMeterTest.java
  
  Index: JMeterTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/junit/JMeterTest.java,v
  retrieving revision 1.22
  retrieving revision 1.22.2.1
  diff -u -r1.22 -r1.22.2.1
  --- JMeterTest.java	16 Dec 2003 17:07:25 -0000	1.22
  +++ JMeterTest.java	30 Dec 2003 17:00:12 -0000	1.22.2.1
  @@ -17,6 +17,8 @@
   import org.apache.jmeter.gui.UnsharedComponent;
   import org.apache.jmeter.gui.tree.JMeterTreeNode;
   import org.apache.jmeter.save.SaveService;
  +import org.apache.jmeter.testbeans.TestBean;
  +import org.apache.jmeter.testbeans.gui.TestBeanGUI;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.testelement.property.JMeterProperty;
   import org.apache.jmeter.testelement.property.PropertyIterator;
  @@ -104,6 +106,14 @@
   			ts.addTest(new JMeterTest("runGUIComponents",item));
   			suite.addTest(ts);
   		}
  +        iter = getObjects(TestBean.class).iterator();
  +        while (iter.hasNext())
  +        {
  +            JMeterGUIComponent item = new TestBeanGUI(iter.next().getClass());
  +            TestSuite ts = new TestSuite(item.getClass().getName());
  +            ts.addTest(new JMeterTest("runGUIComponents",item));
  +            suite.addTest(ts);
  +        }
   		return suite;
   	}
   	
  
  
  
  No                   revision
  No                   revision
  1.23.2.1  +26 -17    jakarta-jmeter/src/core/org/apache/jmeter/gui/util/MenuFactory.java
  
  Index: MenuFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/util/MenuFactory.java,v
  retrieving revision 1.23
  retrieving revision 1.23.2.1
  diff -u -r1.23 -r1.23.2.1
  --- MenuFactory.java	15 Dec 2003 23:38:44 -0000	1.23
  +++ MenuFactory.java	30 Dec 2003 17:00:12 -0000	1.23.2.1
  @@ -78,6 +78,8 @@
   import org.apache.jmeter.gui.GuiPackage;
   import org.apache.jmeter.gui.JMeterGUIComponent;
   import org.apache.jmeter.gui.action.ActionRouter;
  +import org.apache.jmeter.testbeans.TestBean;
  +import org.apache.jmeter.testbeans.gui.TestBeanGUI;
   import org.apache.jmeter.util.JMeterUtils;
   import org.apache.jorphan.reflect.ClassFinder;
   import org.apache.jorphan.util.JOrphanUtils;
  @@ -396,7 +398,7 @@
               List guiClasses =
                   ClassFinder.findClassesThatExtend(
                       JMeterUtils.getSearchPaths(),
  -                    new Class[] { JMeterGUIComponent.class });
  +                    new Class[] { JMeterGUIComponent.class, TestBean.class });
               timers = new LinkedList();
               controllers = new LinkedList();
               samplers = new LinkedList();
  @@ -419,26 +421,33 @@
               Iterator iter = guiClasses.iterator();
               while (iter.hasNext())
               {
  +                String name= (String)iter.next();
  +                
                   JMeterGUIComponent item;
                   try
                   {
  -                    item =
  -                        (JMeterGUIComponent) Class
  -                            .forName((String) iter.next())
  -                            .newInstance();
  +                    Class c = Class.forName(name);
  +                    if (TestBean.class.isAssignableFrom(c))
  +                    {
  +                        item = new TestBeanGUI(c);
  +                    }
  +                    else
  +                    {
  +                        item = (JMeterGUIComponent) c.newInstance();
  +                    }
                   }
                   catch (Throwable e)
                   {
                       continue;
                   }
  -                if (elementsToSkip.contains(item.getClass().getName())
  +                if (elementsToSkip.contains(name)
                       || elementsToSkip.contains(item.getStaticLabel()))
                   {
                       continue;
                   }
                   else
                   {
  -                    elementsToSkip.add(item.getClass().getName());
  +                    elementsToSkip.add(name);
                   }
                   Collection categories = item.getMenuCategories();
                   if (categories == null)
  @@ -450,7 +459,7 @@
                       timers.add(
                           new MenuInfo(
                               item.getStaticLabel(),
  -                            item.getClass().getName()));
  +                            name));
                   }
   
                   if (categories.contains(POST_PROCESSORS))
  @@ -458,7 +467,7 @@
                       postProcessors.add(
                           new MenuInfo(
                               item.getStaticLabel(),
  -                            item.getClass().getName()));
  +                            name));
                   }
   
                   if (categories.contains(PRE_PROCESSORS))
  @@ -466,7 +475,7 @@
                       preProcessors.add(
                           new MenuInfo(
                               item.getStaticLabel(),
  -                            item.getClass().getName()));
  +                            name));
                   }
   
                   if (categories.contains(CONTROLLERS))
  @@ -474,7 +483,7 @@
                       controllers.add(
                           new MenuInfo(
                               item.getStaticLabel(),
  -                            item.getClass().getName()));
  +                            name));
                   }
   
                   if (categories.contains(SAMPLERS))
  @@ -482,7 +491,7 @@
                       samplers.add(
                           new MenuInfo(
                               item.getStaticLabel(),
  -                            item.getClass().getName()));
  +                            name));
                   }
   
                   if (categories.contains(NON_TEST_ELEMENTS))
  @@ -490,7 +499,7 @@
                       nonTestElements.add(
                           new MenuInfo(
                               item.getStaticLabel(),
  -                            item.getClass().getName()));
  +                            name));
                   }
   
                   if (categories.contains(LISTENERS))
  @@ -498,7 +507,7 @@
                       listeners.add(
                           new MenuInfo(
                               item.getStaticLabel(),
  -                            item.getClass().getName()));
  +                            name));
                   }
   
                   if (categories.contains(CONFIG_ELEMENTS))
  @@ -506,14 +515,14 @@
                       configElements.add(
                           new MenuInfo(
                               item.getStaticLabel(),
  -                            item.getClass().getName()));
  +                            name));
                   }
                   if (categories.contains(ASSERTIONS))
                   {
                       assertions.add(
                           new MenuInfo(
                               item.getStaticLabel(),
  -                            item.getClass().getName()));
  +                            name));
                   }
   
               }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org