sebb 2003/12/19 18:42:27 Added: src/core/org/apache/jmeter/gui/action Merge.java Log: Derived from Load Revision Changes Path 1.1 jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Merge.java Index: Merge.java =================================================================== /* * ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001,2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache JMeter" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache JMeter", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.jmeter.gui.action; import java.awt.event.ActionEvent; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.Set; import javax.swing.JFileChooser; import javax.swing.tree.TreePath; import junit.framework.TestCase; import org.apache.jmeter.control.gui.WorkBenchGui; import org.apache.jmeter.exceptions.IllegalUserActionException; import org.apache.jmeter.gui.GuiPackage; import org.apache.jmeter.gui.JMeterGUIComponent; import org.apache.jmeter.gui.tree.JMeterTreeNode; import org.apache.jmeter.gui.util.FileDialoger; import org.apache.jmeter.save.SaveService; import org.apache.jmeter.testelement.TestElement; import org.apache.jmeter.testelement.TestPlan; import org.apache.jmeter.util.JMeterUtils; import org.apache.jorphan.collections.HashTree; import org.apache.jorphan.logging.LoggingManager; import org.apache.log.Logger; /** * @author Michael Stover * @version $Revision: 1.1 $ */ public class Merge implements Command { transient private static Logger log = LoggingManager.getLoggerForClass(); private static Set commands = new HashSet(); static { commands.add("merge"); } public Merge() { } public Set getActionNames() { return commands; } public void doAction(ActionEvent e) { JFileChooser chooser = FileDialoger.promptToOpenFile(new String[] { ".jmx" }); if (chooser == null) { return; } boolean isTestPlan = false; InputStream reader = null; File f = null; try { f = chooser.getSelectedFile(); if (f != null) { log.info("Merging file: " + f); reader = new FileInputStream(f); HashTree tree = SaveService.loadSubTree(reader); isTestPlan = insertLoadedTree(e.getID(), tree); } } catch (Exception ex) { String msg = ex.getMessage(); if (msg == null) { msg = "Unexpected error - see log for details"; log.warn("Unexpected error", ex); } JMeterUtils.reportErrorToUser(msg); } finally { GuiPackage.getInstance().updateCurrentGui(); GuiPackage.getInstance().getMainFrame().repaint(); } if (isTestPlan && f != null) { ( (Save) ActionRouter.getInstance().getAction( "save", "org.apache.jmeter.gui.action.Save")).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 { //convertTree(tree); if (tree == null) { throw new Exception("Error in TestPlan - see log file"); } boolean isTestPlan = tree.getArray()[0] instanceof TestPlan; 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, CheckDirty.SUB_TREE_LOADED)); return isTestPlan; } private void convertTree(HashTree tree) throws Exception { Iterator iter = new LinkedList(tree.list()).iterator(); while (iter.hasNext()) { TestElement item = (TestElement) iter.next(); convertTree(tree.getTree(item)); JMeterGUIComponent comp = generateGUIComponent(item); tree.replace(item, comp); } } private JMeterGUIComponent generateGUIComponent(TestElement item) throws Exception { JMeterGUIComponent gui = null; try { gui = (JMeterGUIComponent) Class .forName(item.getPropertyAsString(TestElement.GUI_CLASS)) .newInstance(); } catch (Exception e) { log.warn("Couldn't get gui for " + item, e); gui = new WorkBenchGui(); } gui.configure(item); return gui; } /** * * @version $Revision: 1.1 $ Last updated: $Date: 2003/12/20 02:42:27 $ */ public static class Test extends TestCase { File testFile1, testFile2, testFile3, testFile4, testFile5, testFile6, testFile7, testFile8, testFile9, testFile10, testFile11, testFile12, testFile13; static Merge loader = new Merge(); public Test(String name) { super(name); } public void setUp() { testFile1 = //TODO: not used - why? new File( System.getProperty("user.dir") + "/testfiles", "Test Plan.jmx"); testFile2 = //TODO: not used - why? new File( System.getProperty("user.dir") + "/testfiles", "Modification Manager.jmx"); testFile3 = new File( System.getProperty("user.dir") + "/testfiles", "proxy.jmx"); testFile4 = new File( System.getProperty("user.dir") + "/testfiles", "AssertionTestPlan.jmx"); testFile5 = new File( System.getProperty("user.dir") + "/testfiles", "AuthManagerTestPlan.jmx"); testFile6 = new File( System.getProperty("user.dir") + "/testfiles", "HeaderManagerTestPlan.jmx"); testFile7 = new File( System.getProperty("user.dir") + "/testfiles", "InterleaveTestPlan.jmx"); testFile8 = new File( System.getProperty("user.dir") + "/testfiles", "InterleaveTestPlan2.jmx"); testFile9 = new File( System.getProperty("user.dir") + "/testfiles", "LoopTestPlan.jmx"); testFile10 = new File( System.getProperty("user.dir") + "/testfiles", "OnceOnlyTestPlan.jmx"); testFile11 = new File( System.getProperty("user.dir") + "/testfiles", "ProxyServerTestPlan.jmx"); testFile12 = new File( System.getProperty("user.dir") + "/testfiles", "SimpleTestPlan.jmx"); testFile13 = //TODO: not used - why? new File( System.getProperty("user.dir") + "/testfiles", "URLRewritingExample.jmx"); } public void testFile3() throws Exception { loadAndAssertTree(getTree(testFile3)); } private void loadAndAssertTree(HashTree tree) throws Exception { assertTrue( tree.getArray()[0] instanceof org.apache.jmeter.testelement.TestPlan); loader.convertTree(tree); assertTrue( tree.getArray()[0] instanceof org.apache.jmeter.control.gui.TestPlanGui); } public void testFile4() throws Exception { loadAndAssertTree(getTree(testFile4)); } public void testFile5() throws Exception { loadAndAssertTree(getTree(testFile5)); } public void testFile6() throws Exception { loadAndAssertTree(getTree(testFile6)); } public void testFile7() throws Exception { loadAndAssertTree(getTree(testFile7)); } public void testFile8() throws Exception { loadAndAssertTree(getTree(testFile8)); } public void testFile9() throws Exception { loadAndAssertTree(getTree(testFile9)); } public void testFile10() throws Exception { loadAndAssertTree(getTree(testFile10)); } public void testFile11() throws Exception { loadAndAssertTree(getTree(testFile11)); } public void testFile12() throws Exception { loadAndAssertTree(getTree(testFile12)); } private HashTree getTree(File f) throws Exception { FileInputStream reader = new FileInputStream(f); HashTree tree = SaveService.loadSubTree(reader); return tree; } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
