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 se...@apache.org on 2007/09/29 01:09:02 UTC

svn commit: r580511 - in /jakarta/jmeter/trunk: src/core/org/apache/jmeter/gui/action/ src/core/org/apache/jmeter/gui/tree/ src/core/org/apache/jmeter/gui/util/ xdocs/

Author: sebb
Date: Fri Sep 28 16:09:01 2007
New Revision: 580511

URL: http://svn.apache.org/viewvc?rev=580511&view=rev
Log:
Only permit items to be dropped/pasted where they are allowed.

Modified:
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/DragNDrop.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Paste.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeListener.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/MenuFactory.java
    jakarta/jmeter/trunk/xdocs/changes.xml

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/DragNDrop.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/DragNDrop.java?rev=580511&r1=580510&r2=580511&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/DragNDrop.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/DragNDrop.java Fri Sep 28 16:09:01 2007
@@ -18,23 +18,19 @@
 
 package org.apache.jmeter.gui.action;
 
+import java.awt.Toolkit;
 import java.awt.event.ActionEvent;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.jmeter.control.Controller;
 import org.apache.jmeter.gui.GuiPackage;
 import org.apache.jmeter.gui.tree.JMeterTreeListener;
 import org.apache.jmeter.gui.tree.JMeterTreeNode;
-import org.apache.jmeter.samplers.Sampler;
+import org.apache.jmeter.gui.util.MenuFactory;
 import org.apache.jmeter.testelement.TestElement;
 import org.apache.jmeter.testelement.TestPlan;
 import org.apache.jmeter.testelement.WorkBench;
 
-/**
- * @author mstover
- * @version $Revision$
- */
 public class DragNDrop extends AbstractAction {
 	private static Set commands = new HashSet();
 	static {
@@ -59,19 +55,19 @@
 		}
 		// System.out.println(action+" "+te.getClass().getName());
 
-		if (ActionNames.DRAG_ADD.equals(action) && canAddTo(currentNode)) {
+		if (ActionNames.DRAG_ADD.equals(action) && canAddTo(currentNode,draggedNodes)) {
 			removeNodesFromParents(draggedNodes);
 			for (int i = 0; i < draggedNodes.length; i++) {
 				GuiPackage.getInstance().getTreeModel().insertNodeInto(draggedNodes[i], currentNode,
 						currentNode.getChildCount());
 			}
-		} else if (ActionNames.INSERT_BEFORE.equals(action) && canAddTo(parentNode)) {
+		} else if (ActionNames.INSERT_BEFORE.equals(action) && canAddTo(parentNode,draggedNodes)) {
 			removeNodesFromParents(draggedNodes);
 			for (int i = 0; i < draggedNodes.length; i++) {
 				int index = parentNode.getIndex(currentNode);
 				GuiPackage.getInstance().getTreeModel().insertNodeInto(draggedNodes[i], parentNode, index);
 			}
-		} else if (ActionNames.INSERT_AFTER.equals(action) && canAddTo(parentNode)) {
+		} else if (ActionNames.INSERT_AFTER.equals(action) && canAddTo(parentNode,draggedNodes)) {
 			removeNodesFromParents(draggedNodes);
 			for (int i = 0; i < draggedNodes.length; i++) {
 				int index = parentNode.getIndex(currentNode) + 1;
@@ -81,27 +77,12 @@
 		GuiPackage.getInstance().getMainFrame().repaint();
 	}
 
-	/**
-	 * Determine whether or not dragged nodes can be added to this parent. Also
-	 * used by Paste TODO tighten rules TODO move to MenuFactory?
-	 * 
-	 * @param parentNode
-	 * @return whether it is OK to add the dragged nodes to this parent
-	 */
-	static boolean canAddTo(JMeterTreeNode parentNode) {
-		if (null == parentNode)
-			return false;
-		TestElement te = parentNode.getTestElement();
-		// System.out.println("Add to: "+te.getClass().getName());
-		if (te instanceof Controller)
-			return true;
-		if (te instanceof Sampler)
-			return true;
-		if (te instanceof WorkBench)
-			return true;
-		if (te instanceof TestPlan)
-			return true;
-		return false;
+	private static boolean canAddTo(JMeterTreeNode parentNode, JMeterTreeNode[] draggedNodes) {
+		boolean ok = MenuFactory.canAddTo(parentNode, draggedNodes);
+		if (!ok){
+			Toolkit.getDefaultToolkit().beep();
+		}
+		return ok;
 	}
 
 	protected void removeNodesFromParents(JMeterTreeNode[] nodes) {

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Paste.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Paste.java?rev=580511&r1=580510&r2=580511&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Paste.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Paste.java Fri Sep 28 16:09:01 2007
@@ -18,6 +18,7 @@
 
 package org.apache.jmeter.gui.action;
 
+import java.awt.Toolkit;
 import java.awt.event.ActionEvent;
 import java.util.HashSet;
 import java.util.Set;
@@ -26,6 +27,7 @@
 import org.apache.jmeter.gui.GuiPackage;
 import org.apache.jmeter.gui.tree.JMeterTreeListener;
 import org.apache.jmeter.gui.tree.JMeterTreeNode;
+import org.apache.jmeter.gui.util.MenuFactory;
 import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.logging.LoggingManager;
 import org.apache.log.Logger;
@@ -57,12 +59,14 @@
 		JMeterTreeNode draggedNodes[] = Copy.getCopiedNodes();
 		JMeterTreeListener treeListener = GuiPackage.getInstance().getTreeListener();
 		JMeterTreeNode currentNode = treeListener.getCurrentNode();
-		if (DragNDrop.canAddTo(currentNode)) {
+		if (MenuFactory.canAddTo(currentNode, draggedNodes)) {
 			for (int i = 0; i < draggedNodes.length; i++) {
 				if (draggedNodes[i] != null) {
                     addNode(currentNode, draggedNodes[i]);
 				}
 			}
+		} else {
+			Toolkit.getDefaultToolkit().beep();
 		}
 		GuiPackage.getInstance().getMainFrame().repaint();
 	}

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeListener.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeListener.java?rev=580511&r1=580510&r2=580511&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeListener.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/tree/JMeterTreeListener.java Fri Sep 28 16:09:01 2007
@@ -43,6 +43,7 @@
 import org.apache.jmeter.gui.action.ActionNames;
 import org.apache.jmeter.gui.action.ActionRouter;
 import org.apache.jmeter.gui.action.KeyStrokes;
+import org.apache.jmeter.gui.util.MenuFactory;
 import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.logging.LoggingManager;
 import org.apache.log.Logger;
@@ -177,10 +178,12 @@
 			item.addActionListener(actionHandler);
 			item.setActionCommand(ActionNames.INSERT_AFTER);
 			dragNdrop.add(item);
-			item = new JMenuItem(JMeterUtils.getResString("add_as_child")); // $NON-NLS-1$
-			item.addActionListener(actionHandler);
-			item.setActionCommand(ActionNames.DRAG_ADD);
-			dragNdrop.add(item);
+			if (MenuFactory.canAddTo(getCurrentNode(), draggedNodes)){
+				item = new JMenuItem(JMeterUtils.getResString("add_as_child")); // $NON-NLS-1$
+				item.addActionListener(actionHandler);
+				item.setActionCommand(ActionNames.DRAG_ADD);
+				dragNdrop.add(item);
+			}
 			dragNdrop.addSeparator();
 			item = new JMenuItem(JMeterUtils.getResString("cancel")); // $NON-NLS-1$
 			dragNdrop.add(item);

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/MenuFactory.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/MenuFactory.java?rev=580511&r1=580510&r2=580511&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/MenuFactory.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/gui/util/MenuFactory.java Fri Sep 28 16:09:01 2007
@@ -35,13 +35,19 @@
 import javax.swing.KeyStroke;
 import javax.swing.MenuElement;
 
+import org.apache.jmeter.control.Controller;
 import org.apache.jmeter.gui.GuiPackage;
 import org.apache.jmeter.gui.JMeterGUIComponent;
 import org.apache.jmeter.gui.action.ActionNames;
 import org.apache.jmeter.gui.action.ActionRouter;
 import org.apache.jmeter.gui.action.KeyStrokes;
+import org.apache.jmeter.gui.tree.JMeterTreeNode;
+import org.apache.jmeter.samplers.Sampler;
 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.testelement.WorkBench;
 import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jmeter.visualizers.Printable;
 import org.apache.jorphan.logging.LoggingManager;
@@ -445,6 +451,66 @@
 		if ((elements.length > 0) && !(elements[elements.length - 1] instanceof JPopupMenu.Separator)) {
 			menu.addSeparator();
 		}
+	}
+
+	/**
+	 * Determine whether or not nodes can be added to this parent.
+	 * 
+	 * Used by DragNDrop and Paste.
+	 * 
+	 * @param parentNode
+	 * @param nodes - array of nodes that are to be added
+	 * 
+	 * @return whether it is OK to add the dragged nodes to this parent
+	 */
+	public static boolean canAddTo(JMeterTreeNode parentNode, JMeterTreeNode nodes[]) {
+		if (null == parentNode) {
+			return false;
+		}
+		if (foundClass(nodes, new Class[]{WorkBench.class})){// Can't add a Workbench anywhere
+			return false;
+		}
+		if (foundClass(nodes, new Class[]{TestPlan.class})){// Can't add a TestPlan anywhere
+			return false;
+		}
+		TestElement parent = parentNode.getTestElement();
+		if (parent instanceof TestPlan) {// Samplers and Controllers need not apply ...
+			if (foundClass(nodes, new Class[]{Sampler.class, Controller.class})){
+				return false;
+			}
+			return true;
+		}
+		// ThreadGroup is only allowed under a TestPlan
+		if (foundClass(nodes, new Class[]{org.apache.jmeter.threads.ThreadGroup.class})){
+			return false;
+		}
+		if (parent instanceof Controller) {// Includes thread group; anything goes
+			return true;
+		}
+		if (parent instanceof Sampler) {// Samplers and Controllers need not apply ...
+			if (foundClass(nodes, new Class[]{Sampler.class, Controller.class})){
+				return false;
+			}
+			return true;
+		}
+		if (parent instanceof WorkBench) {// TODO are there any items that don't make sense here?
+			return true;
+		}
+		// All other 
+		return false;
+	}
+
+	// Is any top-level node an instance of the class?
+	private static boolean foundClass(JMeterTreeNode nodes[],Class classes[]){
+		for (int i = 0; i < nodes.length; i++) {
+			JMeterTreeNode node = nodes[i];
+			for (int j=0; j < classes.length; j++) {
+				if (classes[j].isInstance(node.getUserObject())){
+					return true;
+				}				
+			}
+		}
+		return false;
 	}
 
 	// Methods used for Test cases

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=580511&r1=580510&r2=580511&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Fri Sep 28 16:09:01 2007
@@ -31,7 +31,6 @@
 
 <h4>Bug fixes</h4>
 <ul>
-<li>SaveService no longer needs to instantiate classes</li>
 <li>Bug 43430 - Count of active threads is incorrect for remote samples</li>
 </ul>
 
@@ -41,7 +40,10 @@
 <li>Add File->Revert to easily drop the current changes and reload the project file currently loaded</li>
 <li>Bug 31366 - Remember recently opened file(s)</li>
 <li>Bug 43351 - Add support for Parameters and script file to all BeanShell test elements</li>
+<li>SaveService no longer needs to instantiate classes</li>
 <li>New functions: __eval() and __evalVar()</li>
+<li>Menu items now appear in execution order</li>
+<li>Test Plan items can now only be dropped/pasted into parts of the tree where they are allowed</li>
 </ul>
 
 <!--  ===================  -->



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