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