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/05/07 17:10:49 UTC
svn commit: r535891 - in /jakarta/jmeter/branches/rel-2-2:
src/core/org/apache/jmeter/gui/action/ src/core/org/apache/jmeter/gui/tree/
xdocs/
Author: sebb
Date: Mon May 7 08:10:46 2007
New Revision: 535891
URL: http://svn.apache.org/viewvc?view=rev&rev=535891
Log:
Bug 25441 - TestPlan changes sometimes detected incorrectly (isDirty)
Modified:
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/ActionNames.java
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/CheckDirty.java
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/Load.java
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java
jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/ActionNames.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/ActionNames.java?view=diff&rev=535891&r1=535890&r2=535891
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/ActionNames.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/ActionNames.java Mon May 7 08:10:46 2007
@@ -71,6 +71,7 @@
public static final String SAVE_GRAPHICS_ALL= "save_graphics_all"; // $NON-NLS-1$
public static final String SSL_MANAGER = "sslManager"; // $NON-NLS-1$
public static final String SUB_TREE_LOADED = "sub_tree_loaded"; // $NON-NLS-1$
+ public static final String SUB_TREE_MERGED = "sub_tree_merged"; // $NON-NLS-1$
public static final String SUB_TREE_SAVED = "sub_tree_saved"; // $NON-NLS-1$
public static final String WHAT_CLASS = "what_class"; // $NON-NLS-1$
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/CheckDirty.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/CheckDirty.java?view=diff&rev=535891&r1=535890&r2=535891
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/CheckDirty.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/CheckDirty.java Mon May 7 08:10:46 2007
@@ -34,8 +34,8 @@
import org.apache.log.Logger;
/**
- * @author mstover
- * @version $Revision$
+ * Check if the TestPlan has been changed since it was last saved
+ *
*/
public class CheckDirty extends AbstractAction implements HashTreeTraverser, ActionListener {
private static final Logger log = LoggingManager.getLoggerForClass();
@@ -52,6 +52,7 @@
static {
commands.add(ActionNames.CHECK_DIRTY);
commands.add(ActionNames.SUB_TREE_SAVED);
+ commands.add(ActionNames.SUB_TREE_MERGED);
commands.add(ActionNames.SUB_TREE_LOADED);
commands.add(ActionNames.ADD_ALL);
commands.add(ActionNames.CHECK_REMOVE);
@@ -91,12 +92,18 @@
}
removeMode = false;
}
- checkMode = true;
- dirty = false;
- HashTree wholeTree = GuiPackage.getInstance().getTreeModel().getTestPlan();
- wholeTree.traverse(this);
+ // If we are merging in another test plan, we know the test plan is dirty now
+ if(action.equals(ActionNames.SUB_TREE_MERGED)) {
+ dirty = true;
+ }
+ else {
+ dirty = false;
+ checkMode = true;
+ HashTree wholeTree = GuiPackage.getInstance().getTreeModel().getTestPlan();
+ wholeTree.traverse(this);
+ checkMode = false;
+ }
GuiPackage.getInstance().setDirty(dirty);
- checkMode = false;
}
/**
@@ -107,12 +114,15 @@
log.debug("Node is class:" + node.getClass());
JMeterTreeNode treeNode = (JMeterTreeNode) node;
if (checkMode) {
- if (previousGuiItems.containsKey(treeNode)) {
- if (!previousGuiItems.get(treeNode).equals(treeNode.getTestElement())) {
+ // Only check if we have not found any differences so far
+ if(!dirty) {
+ if (previousGuiItems.containsKey(treeNode)) {
+ if (!previousGuiItems.get(treeNode).equals(treeNode.getTestElement())) {
+ dirty = true;
+ }
+ } else {
dirty = true;
}
- } else {
- dirty = true;
}
} else if (removeMode) {
previousGuiItems.remove(treeNode);
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/Load.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/Load.java?view=diff&rev=535891&r1=535890&r2=535891
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/Load.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/action/Load.java Mon May 7 08:10:46 2007
@@ -35,6 +35,7 @@
import org.apache.jmeter.gui.util.FileDialoger;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.services.FileServer;
+import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
@@ -45,13 +46,13 @@
import com.thoughtworks.xstream.converters.ConversionException;
/**
- * @author Michael Stover
- * @version $Revision$
+ * Load a new file, replacing whatever was present.
+ *
*/
public class Load implements Command {
private static final Logger log = LoggingManager.getLoggerForClass();
- private static final boolean expandTree = JMeterUtils.getPropDefault("onload.expandtree", true);
+ private static final boolean expandTree = JMeterUtils.getPropDefault("onload.expandtree", true); //$NON-NLS-1$
private static Set commands = new HashSet();
static {
@@ -68,31 +69,34 @@
}
public void doAction(ActionEvent e) {
- boolean merging = e.getActionCommand().equals(ActionNames.MERGE);
-
- if (!merging) {
- ActionRouter.getInstance().doActionNow(new ActionEvent(e.getSource(), e.getID(), "close"));
- }
-
- JFileChooser chooser = FileDialoger.promptToOpenFile(new String[] { ".jmx" });
+ JFileChooser chooser = FileDialoger.promptToOpenFile(new String[] { ".jmx" }); //$NON-NLS-1$
if (chooser == null) {
return;
}
- boolean isTestPlan = false;
InputStream reader = null;
- File f = null;
try {
- f = chooser.getSelectedFile();
+ File f = chooser.getSelectedFile();
if (f != null) {
+ boolean isTestPlan = false;
+ boolean merging = e.getActionCommand().equals(ActionNames.MERGE);
+
if (merging) {
log.info("Merging file: " + f);
} else {
log.info("Loading file: " + f);
+ // Close the test plan currently open
+ ActionRouter.getInstance().doActionNow(new ActionEvent(e.getSource(), e.getID(), ActionNames.CLOSE));
+
FileServer.getFileServer().setBasedir(f.getAbsolutePath());
}
reader = new FileInputStream(f);
HashTree tree = SaveService.loadTree(reader);
- isTestPlan = insertLoadedTree(e.getID(), tree);
+ isTestPlan = insertLoadedTree(e.getID(), tree, merging);
+
+ // don't change name if merging
+ if (!merging && isTestPlan) {
+ GuiPackage.getInstance().setTestPlanFile(f.getAbsolutePath());
+ }
}
} catch (NoClassDefFoundError ex) // Allow for missing optional jars
{
@@ -117,28 +121,39 @@
GuiPackage.getInstance().updateCurrentGui();
GuiPackage.getInstance().getMainFrame().repaint();
}
- // don't change name if merging
- if (!merging && isTestPlan && f != null) {
- GuiPackage.getInstance().setTestPlanFile(f.getAbsolutePath());
- }
}
/**
* Returns a boolean indicating whether the loaded tree was a full test plan
*/
- public boolean insertLoadedTree(int id, HashTree tree) throws Exception, IllegalUserActionException {
+ public boolean insertLoadedTree(int id, HashTree tree, boolean merging) throws Exception, IllegalUserActionException {
// convertTree(tree);
if (tree == null) {
throw new Exception("Error in TestPlan - see log file");
}
boolean isTestPlan = tree.getArray()[0] instanceof TestPlan;
+
+ // If we are loading a new test plan, initialize the tree with the testplan node we are loading
+ if(isTestPlan && !merging) {
+ GuiPackage.getInstance().getTreeModel().clearTestPlan((TestElement)tree.getArray()[0]);
+ }
+
HashTree newTree = GuiPackage.getInstance().addSubTree(tree);
GuiPackage.getInstance().updateCurrentGui();
GuiPackage.getInstance().getMainFrame().getTree().setSelectionPath(
new TreePath(((JMeterTreeNode) newTree.getArray()[0]).getPath()));
tree = GuiPackage.getInstance().getCurrentSubTree();
- ActionRouter.getInstance().actionPerformed(
- new ActionEvent(tree.get(tree.getArray()[tree.size() - 1]), id, ActionNames.SUB_TREE_LOADED));
+ // Send different event wether we are merging a test plan into another test plan,
+ // or loading a testplan from scratch
+ ActionEvent actionEvent = null;
+ if(!merging) {
+ actionEvent = new ActionEvent(tree.get(tree.getArray()[tree.size() - 1]), id, ActionNames.SUB_TREE_LOADED);
+ }
+ else {
+ actionEvent = new ActionEvent(tree.get(tree.getArray()[tree.size() - 1]), id, ActionNames.SUB_TREE_MERGED);
+ }
+
+ ActionRouter.getInstance().actionPerformed(actionEvent);
if (expandTree) {
JTree jTree = GuiPackage.getInstance().getMainFrame().getTree();
for(int i = 0; i < jTree.getRowCount(); i++) {
@@ -147,5 +162,9 @@
}
return isTestPlan;
+ }
+
+ public boolean insertLoadedTree(int id, HashTree tree) throws Exception, IllegalUserActionException {
+ return insertLoadedTree(id, tree, false);
}
}
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java?view=diff&rev=535891&r1=535890&r2=535891
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/gui/tree/JMeterTreeModel.java Mon May 7 08:10:46 2007
@@ -49,7 +49,8 @@
public JMeterTreeModel() {
super(new JMeterTreeNode(new WorkBenchGui().createTestElement(), null));
- initTree();
+ TestElement tp = new TestPlanGui().createTestElement();
+ initTree(tp);
}
/**
@@ -174,19 +175,46 @@
return getCurrentSubTree((JMeterTreeNode) ((JMeterTreeNode) this.getRoot()).getChildAt(0));
}
+ /**
+ * Clear the test plan, and use default node for test plan and workbench
+ */
public void clearTestPlan() {
- super.removeNodeFromParent((JMeterTreeNode) getChild(getRoot(), 0));
- initTree();
- }
-
- private void initTree() {
TestElement tp = new TestPlanGui().createTestElement();
- TestElement wb = new WorkBenchGui().createTestElement();
- this.insertNodeInto(new JMeterTreeNode(tp, this), (JMeterTreeNode) getRoot(), 0);
- try {
- super.removeNodeFromParent((JMeterTreeNode) getChild(getRoot(), 1));
- } catch (RuntimeException e) {
- }
- this.insertNodeInto(new JMeterTreeNode(wb, this), (JMeterTreeNode) getRoot(), 1);
+ clearTestPlan(tp);
+ }
+
+ /**
+ * Clear the test plan, and use specified node for test plan and default node for workbench
+ *
+ * @param testPlan the node to use as the testplan top node
+ */
+ public void clearTestPlan(TestElement testPlan) {
+ // Remove the workbench and testplan nodes
+ int children = getChildCount(getRoot());
+ while (children > 0) {
+ JMeterTreeNode child = (JMeterTreeNode)getChild(getRoot(), 0);
+ super.removeNodeFromParent(child);
+ children = getChildCount(getRoot());
+ }
+ // Init the tree
+ initTree(testPlan);
+ }
+
+ /**
+ * Initialize the model with nodes for testplan and workbench. Use the specified
+ * node for testplan, and default node for workbench.
+ *
+ * @param tp the element to use as testplan
+ */
+ private void initTree(TestElement tp) {
+ // Insert the test plan node
+ insertNodeInto(new JMeterTreeNode(tp, this), (JMeterTreeNode) getRoot(), 0);
+ // Insert the workbench node
+ TestElement wb = new WorkBenchGui().createTestElement();
+ insertNodeInto(new JMeterTreeNode(wb, this), (JMeterTreeNode) getRoot(), 1);
+ // Let others know that the tree content has changed.
+ // This should not be necessary, but without it, nodes are not shown when the user
+ // uses the Close menu item
+ nodeStructureChanged((JMeterTreeNode)getRoot());
}
}
Modified: jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml?view=diff&rev=535891&r1=535890&r2=535891
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml Mon May 7 08:10:46 2007
@@ -225,6 +225,7 @@
<li>Bug 41078 - merge results in name change of test plan</li>
<li>Bug 40077 - Creating new Elements copies values from Existing elements</li>
<li>Bug 42325 - Implement the "clear" method for the LogicControllers</li>
+<li>Bug 25441 - TestPlan changes sometimes detected incorrectly (isDirty)</li>
</ul>
<h3>Version 2.2</h3>
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org