Package org.apache.jmeter.gui.action

Source Code of org.apache.jmeter.gui.action.Save

// $Header: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Save.java,v 1.22 2004/02/20 01:03:07 jsalvata Exp $
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.apache.jmeter.gui.action;

import java.awt.event.ActionEvent;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;

import javax.swing.JFileChooser;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.exceptions.IllegalUserActionException;
import org.apache.jmeter.gui.GuiPackage;
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.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.collections.ListedHashTree;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

/**
* @author  Michael Stover
* @author  <a href="mailto:klancast@swbell.net">Keith Lancaster</a>
* @version $Revision: 1.22 $ updated on $Date: 2004/02/20 01:03:07 $
*/
public class Save implements Command
{
    transient private static Logger log = LoggingManager.getLoggerForClass();
    public final static String SAVE_ALL_AS = "save_all_as";
    public final static String SAVE_AS = "save_as";
    public final static String SAVE = "save";
    //NOTUSED private String chosenFile;
    private String testPlanFile;

    private static Set commands = new HashSet();
    static {
        commands.add(SAVE_AS);
        commands.add(SAVE_ALL_AS);
        commands.add(SAVE);
    }

    /**
     * Constructor for the Save object.
     */
    public Save()
    {
    }

    /**
     * Gets the ActionNames attribute of the Save object.
     *
     * @return   the ActionNames value
     */
    public Set getActionNames()
    {
        return commands;
    }

    public void setTestPlanFile(String f)
    {
        testPlanFile = f;
        GuiPackage.getInstance().getMainFrame().setTitle(JMeterUtils.getExtendedFrameTitle(testPlanFile));
    }

    public void doAction(ActionEvent e) throws IllegalUserActionException
    {
        HashTree subTree = null;
        if (!commands.contains(e.getActionCommand()))
        {
            throw new IllegalUserActionException("Invalid user command:" + e.getActionCommand());
        }
        if (e.getActionCommand().equals(SAVE_AS))
        {
            subTree = GuiPackage.getInstance().getCurrentSubTree();
        }
        else
        {
            subTree = GuiPackage.getInstance().getTreeModel().getTestPlan();
        }

        String updateFile = testPlanFile;
        if (!SAVE.equals(e.getActionCommand())
            || testPlanFile == null)
        {
            JFileChooser chooser =
                FileDialoger.promptToSaveFile(
                    GuiPackage
                        .getInstance()
                        .getTreeListener()
                        .getCurrentNode()
                        .getName()
                        + ".jmx");
            if (chooser == null)
            {
                return;
            }
            updateFile = chooser.getSelectedFile().getAbsolutePath();
            if (!e.getActionCommand().equals(SAVE_AS))
            {
                testPlanFile = updateFile;
            }
        }
        // TODO: doesn't putting this here mark the tree as
        // saved even though a failure may occur later?
       
        ActionRouter.getInstance().doActionNow(
            new ActionEvent(subTree, e.getID(), CheckDirty.SUB_TREE_SAVED));
        try
        {
            convertSubTree(subTree);
        }
        catch (Exception err)
        {
        }
        OutputStream writer = null;
        try
        {
            writer = new FileOutputStream(updateFile);
            SaveService.saveSubTree(subTree, writer);
        }
        catch (Throwable ex)
        {
            testPlanFile = null;
            log.error("", ex);
            throw new IllegalUserActionException(
                "Couldn't save test plan to file: " + updateFile);
        }
        finally
        {
            closeWriter(writer);
            if(testPlanFile != null)
            {
                GuiPackage.getInstance().getMainFrame().setTitle(JMeterUtils.getExtendedFrameTitle(testPlanFile));
            }
            GuiPackage.getInstance().getMainFrame().repaint();
        }
    }

    private void convertSubTree(HashTree tree)
    {
        Iterator iter = new LinkedList(tree.list()).iterator();
        while (iter.hasNext())
        {
            JMeterTreeNode item = (JMeterTreeNode) iter.next();
            convertSubTree(tree.getTree(item));
            TestElement testElement = item.getTestElement();
            tree.replace(item, testElement);
        }
    }

    public static class Test extends junit.framework.TestCase
    {
        Save save;
        public Test(String name)
        {
            super(name);
        }

        public void setUp()
        {
            save = new Save();
        }

        public void testTreeConversion() throws Exception
        {
            HashTree tree = new ListedHashTree();
            JMeterTreeNode root = new JMeterTreeNode(new Arguments(), null);
            tree.add(root, root);
            tree.getTree(root).add(root, root);
            save.convertSubTree(tree);
            assertEquals(
                tree.getArray()[0].getClass().getName(),
                root.getTestElement().getClass().getName());
            tree = tree.getTree(tree.getArray()[0]);
            assertEquals(
                tree.getArray()[0].getClass().getName(),
                root.getTestElement().getClass().getName());
            assertEquals(
                tree
                    .getTree(tree.getArray()[0])
                    .getArray()[0]
                    .getClass()
                    .getName(),
                root.getTestElement().getClass().getName());
        }
    }

    private void closeWriter(OutputStream writer)
    {
        if (writer != null)
        {
            try
            {
                writer.close();
            }
            catch (Exception ex)
            {
                log.error("", ex);
            }
        }
    }
}
TOP

Related Classes of org.apache.jmeter.gui.action.Save

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.