oros 2003/01/27 14:20:19
Modified: src/core/org/apache/jmeter Tag: refactorings_branch
JMeter.java
src/core/org/apache/jmeter/gui/action Tag:
refactorings_branch Save.java
src/core/org/apache/jmeter/gui/document Tag:
refactorings_branch JMeterDocument.java
JMeterDocumentManager.java
src/core/org/apache/jmeter/gui/panel Tag:
refactorings_branch TabbedMainPanel.java
src/core/org/apache/jmeter/save Tag: refactorings_branch
JTPFileFormat.java
Added: src/core/org/apache/jmeter/gui/document Tag:
refactorings_branch JMeterDocumentListener.java
src/core/org/apache/jmeter/images Tag: refactorings_branch
dirty_tab.png
Log:
JMeterDocumentListener
dirty_tab icon
update tab when document changes
Revision Changes Path
No revision
No revision
1.8.2.12 +1 -0 jakarta-jmeter/src/core/org/apache/jmeter/JMeter.java
Index: JMeter.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/JMeter.java,v
retrieving revision 1.8.2.11
retrieving revision 1.8.2.12
diff -u -r1.8.2.11 -r1.8.2.12
--- JMeter.java 26 Jan 2003 22:21:59 -0000 1.8.2.11
+++ JMeter.java 27 Jan 2003 22:20:18 -0000 1.8.2.12
@@ -543,6 +543,7 @@
public String[][] getIconMappings()
{
return new String[][]{
+ {"DIRTY_TAB", "org/apache/jmeter/images/dirty_tab.png"},
{TestPlan.class.getName() + "_TAB",
"org/apache/jmeter/images/beaker_tab.png"},
{TestPlan.class.getName(), "org/apache/jmeter/images/beaker.gif"},
{org.apache.jmeter.threads.ThreadGroup.class.getName(),
"org/apache/jmeter/images/thread.gif"},
No revision
No revision
1.7.2.2 +87 -139 jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Save.java
Index: Save.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/action/Save.java,v
retrieving revision 1.7.2.1
retrieving revision 1.7.2.2
diff -u -r1.7.2.1 -r1.7.2.2
--- Save.java 26 Jan 2003 22:22:00 -0000 1.7.2.1
+++ Save.java 27 Jan 2003 22:20:18 -0000 1.7.2.2
@@ -2,7 +2,7 @@
* ====================================================================
* The Apache Software License, Version 1.1
*
- * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * Copyright (c) 2001 - 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -53,6 +53,8 @@
* <http://www.apache.org/>.
*/
package org.apache.jmeter.gui.action;
+
+
import java.awt.event.ActionEvent;
import java.io.*;
import java.util.HashSet;
@@ -77,6 +79,7 @@
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.collections.ListedHashTree;
+
/****************************************
* Title: JMeter Description: Copyright: Copyright (c) 2000 Company: Apache
*
@@ -87,14 +90,10 @@
public class Save extends JMeterAction
{
- transient private static Logger log =
Hierarchy.getDefaultHierarchy().getLoggerFor(
- "jmeter.gui");
- private final static String SAVE_ALL = "save_all";
- private final static String SAVE = "save_as";
- private final static String SAVE_TO_PREVIOUS = "save";
- private String chosenFile;
- private String testPlanFile;
+ transient private static Logger log =
Hierarchy.getDefaultHierarchy().getLoggerFor(
+ "jmeter.gui");
+
public Save(String resourceKey)
{
@@ -112,82 +111,30 @@
}
- public void setTestPlanFile(String f)
- {
- testPlanFile = f;
- }
-
-
- /****************************************
- * Description of the Method
- *
- *@param e Description of Parameter
- ***************************************/
- public void actionPerformed(ActionEvent e)
- {
+ public void actionPerformed(ActionEvent event)
+ {
JMeterDocument document =
JMeterDocumentManager.getInstance().getCurrentDocument();
- NamedTestElement element = document.getRootElement();
+ String fileName = "";
+
+ if (!document.isNew())
+ {
+ fileName = document.getFileName();
+ }
+ JFileChooser chooser = FileDialoger.promptToSaveFile(fileName);
+ if (chooser == null)
+ {
+ return;
+ }
try
{
- new JTPFileFormat().store(element, null);
- } catch (IOException e1)
+
JMeterDocumentManager.getInstance().saveCurrentDocument(chooser.getSelectedFile());
+ } catch (IOException e)
{
- e1.printStackTrace(); //To change body of catch statement use Options
| File Templates.
+ // todo: display dialog
+ log.error("Save failed", e);
}
-// HashTree subTree = null;
-// if(e.getActionCommand().equals(SAVE))
-// {
-// subTree = GuiPackage.getInstance().getCurrentSubTree();
-// }
-// else if(e.getActionCommand().equals(SAVE_ALL) ||
e.getActionCommand().equals(SAVE_TO_PREVIOUS))
-// {
-// subTree =
GuiPackage.getInstance().getTreeModel().getTestPlan();
-// }
-// try
-// {
-// convertSubTree(subTree);
-// }catch(Exception err)
-// {}
-// if(!SAVE_TO_PREVIOUS.equals(e.getActionCommand()) || testPlanFile ==
null)
-// {
-// JFileChooser chooser = FileDialoger.promptToSaveFile(
-//
GuiPackage.getInstance().getTreeListener().getCurrentNode().getTagName() + ".jmx");
-// if(chooser == null)
-// {
-// return;
-// }
-// if(e.getActionCommand().equals(SAVE_ALL) ||
e.getActionCommand().equals(SAVE_TO_PREVIOUS))
-// {
-// testPlanFile =
chooser.getSelectedFile().getAbsolutePath();
-// chosenFile = testPlanFile;
-// }
-// else
-// {
-// chosenFile =
chooser.getSelectedFile().getAbsolutePath();
-// }
-// }
-// else
-// {
-// chosenFile = testPlanFile;
-// }
-//
-// OutputStream writer = null;
-// try
-// {
-// writer = new FileOutputStream(chosenFile);
-// SaveService.saveSubTree(subTree,writer);
-// }
-// catch(Throwable ex)
-// {
-// log.error("",ex);
-// }
-// finally
-// {
-// closeWriter(writer);
-// GuiPackage.getInstance().getMainFrame().repaint();
-// }
- }
+ }
protected ImageIcon createIcon()
@@ -201,65 +148,66 @@
}
- private void convertSubTree(HashTree tree)
- {
- Iterator iter = new LinkedList(tree.list()).iterator();
- while (iter.hasNext())
- {
- JMeterGUIComponent item = (JMeterGUIComponent)iter.next();
- convertSubTree(tree.getTree(item));
- NamedTestElement testElement = item.createTestElement();
- 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();
- JMeterGUIComponent root = new
org.apache.jmeter.config.gui.ArgumentsPanel();
- tree.add(root,root);
- tree.getTree(root).add(root,root);
- save.convertSubTree(tree);
-
assertEquals(tree.getArray()[0].getClass().getName(),root.createTestElement().getClass().getName());
- tree = tree.getTree(tree.getArray()[0]);
- assertEquals(tree.getArray()[0].getClass().getName(),
- root.createTestElement().getClass().getName());
-
assertEquals(tree.getTree(tree.getArray()[0]).getArray()[0].getClass().getName(),
- root.createTestElement().getClass().getName());
- }
- }
-
-
- /****************************************
- * Description of the Method
- *
- *@param writer Description of Parameter
- ***************************************/
- private void closeWriter(OutputStream writer)
- {
- if(writer != null)
- {
- try
- {
- writer.close();
- }
- catch(Exception ex)
- {
- log.error("",ex);
- }
- }
- }
+ private void convertSubTree(HashTree tree)
+ {
+ Iterator iter = new LinkedList(tree.list()).iterator();
+ while (iter.hasNext())
+ {
+ JMeterGUIComponent item = (JMeterGUIComponent)iter.next();
+ convertSubTree(tree.getTree(item));
+ NamedTestElement testElement = item.createTestElement();
+ 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();
+ JMeterGUIComponent root = new
org.apache.jmeter.config.gui.ArgumentsPanel();
+ tree.add(root, root);
+ tree.getTree(root).add(root, root);
+ save.convertSubTree(tree);
+ assertEquals(tree.getArray()[0].getClass().getName(),
root.createTestElement().getClass().getName());
+ tree = tree.getTree(tree.getArray()[0]);
+ assertEquals(tree.getArray()[0].getClass().getName(),
+ root.createTestElement().getClass().getName());
+
assertEquals(tree.getTree(tree.getArray()[0]).getArray()[0].getClass().getName(),
+ root.createTestElement().getClass().getName());
+ }
+ }
+
+
+ /****************************************
+ * Description of the Method
+ *
+ *@param writer Description of Parameter
+ ***************************************/
+ private void closeWriter(OutputStream writer)
+ {
+ if (writer != null)
+ {
+ try
+ {
+ writer.close();
+ } catch (Exception ex)
+ {
+ log.error("", ex);
+ }
+ }
+ }
}
No revision
No revision
1.1.2.4 +70 -11
jakarta-jmeter/src/core/org/apache/jmeter/gui/document/Attic/JMeterDocument.java
Index: JMeterDocument.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/document/Attic/JMeterDocument.java,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -r1.1.2.3 -r1.1.2.4
--- JMeterDocument.java 27 Jan 2003 20:02:30 -0000 1.1.2.3
+++ JMeterDocument.java 27 Jan 2003 22:20:18 -0000 1.1.2.4
@@ -56,6 +56,8 @@
import java.io.*;
+import java.util.*;
+import java.lang.ref.WeakReference;
import javax.swing.*;
@@ -69,12 +71,14 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Oliver Rossmueller</a>
* @version $Revision$
*/
-public class JMeterDocument {
+public class JMeterDocument
+{
private File file;
private NamedTestElement rootElement;
private String name;
private NamedTestElement currentTestElement;
+ private Collection listeners = new HashSet();
public JMeterDocument(String name, NamedTestElement rootElement)
@@ -90,13 +94,15 @@
}
- public boolean isNew() {
+ public boolean isNew()
+ {
return getFile() == null;
}
- public boolean hasChanged() {
- // todo: implement
- return false;
+ public boolean hasChanged()
+ {
+ // todo: implement
+ return isNew();
}
public File getFile()
@@ -107,6 +113,7 @@
public void setFile(File file)
{
this.file = file;
+ notifyListeners();
}
public NamedTestElement getRootElement()
@@ -121,15 +128,17 @@
public String getFileName()
{
- if (getFile() != null) {
+ if (getFile() != null)
+ {
return getFile().getName();
- } else {
+ } else
+ {
// todo: i18n
return "New";
}
}
- public Icon getIcon()
+ public ImageIcon getIcon()
{
return GUIFactory.getIcon(getRootElement().getClass().getName() + "_TAB");
}
@@ -147,10 +156,12 @@
public String getAbsolutePath()
{
- if (getFile() == null) {
+ if (getFile() == null)
+ {
// todo: i18n
return "new file";
- } else {
+ } else
+ {
return getFile().getAbsolutePath();
}
}
@@ -159,4 +170,52 @@
{
return name;
}
+
+
+ public synchronized void addListener(JMeterDocumentListener listener)
+ {
+ listeners.add(new WeakReference(listener));
+ }
+
+ /**
+ * Unregister a listener.
+ */
+ public synchronized void removeListener(JMeterDocumentListener listener)
+ {
+ Iterator iterator = listeners.iterator();
+
+ while (iterator.hasNext())
+ {
+ WeakReference reference = (WeakReference)iterator.next();
+ if (reference.get() == listener)
+ {
+ iterator.remove();
+ return;
+ }
+ }
+ }
+
+ /**
+ * Notify all listeners
+ *
+ */
+ private synchronized void notifyListeners()
+ {
+ Iterator iterator = listeners.iterator();
+
+ while (iterator.hasNext())
+ {
+ WeakReference reference = (WeakReference)iterator.next();
+ JMeterDocumentListener listener =
(JMeterDocumentListener)reference.get();
+
+ if (listener != null)
+ {
+ listener.documentChanged(this);
+ } else
+ {
+ iterator.remove();
+ }
+ }
+ }
+
}
1.1.2.4 +31 -2
jakarta-jmeter/src/core/org/apache/jmeter/gui/document/Attic/JMeterDocumentManager.java
Index: JMeterDocumentManager.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/document/Attic/JMeterDocumentManager.java,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -r1.1.2.3 -r1.1.2.4
--- JMeterDocumentManager.java 27 Jan 2003 20:02:30 -0000 1.1.2.3
+++ JMeterDocumentManager.java 27 Jan 2003 22:20:18 -0000 1.1.2.4
@@ -28,6 +28,7 @@
import org.apache.jmeter.testelement.NamedTestElement;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.save.SaveService;
+import org.apache.jmeter.save.JTPFileFormat;
import org.apache.jmeter.util.*;
@@ -55,6 +56,24 @@
{
}
+ public void saveCurrentDocument(File file) throws IOException {
+ JMeterDocument document = getCurrentDocument();
+
+ if (document != null) {
+ FileOutputStream out = new FileOutputStream(file);
+
+ try
+ {
+ new JTPFileFormat().store(document.getRootElement(), out);
+ document.setFile(file);
+ } finally
+ {
+ if (out != null) {
+ out.close();
+ }
+ }
+ }
+ }
public JMeterDocument loadDocument(File file) throws IOException
{
@@ -65,7 +84,16 @@
singleDocument = (JMeterDocument)documents.values().iterator().next();
}
// todo: should never happen but what if the element is not a
NamedTestElement?
- NamedTestElement element = (NamedTestElement)SaveService.loadSubTree(in);
+ NamedTestElement element;
+ try
+ {
+ element = (NamedTestElement)SaveService.loadSubTree(in);
+ } finally
+ {
+ if (in != null) {
+ in.close();
+ }
+ }
JMeterDocument document = createDocument(file, element);
if (singleDocument != null && singleDocument.isNew() &&
!singleDocument.hasChanged())
@@ -75,6 +103,7 @@
return document;
}
+
private JMeterDocument createDocument(File file, NamedTestElement element)
{
No revision
No revision
1.1.2.1 +65 -0
jakarta-jmeter/src/core/org/apache/jmeter/gui/document/Attic/JMeterDocumentListener.java
No revision
No revision
1.1.2.3 +50 -7
jakarta-jmeter/src/core/org/apache/jmeter/gui/panel/Attic/TabbedMainPanel.java
Index: TabbedMainPanel.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/panel/Attic/TabbedMainPanel.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- TabbedMainPanel.java 27 Jan 2003 20:02:30 -0000 1.1.2.2
+++ TabbedMainPanel.java 27 Jan 2003 22:20:19 -0000 1.1.2.3
@@ -57,12 +57,14 @@
import java.util.*;
import java.awt.*;
+import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
import org.apache.jmeter.gui.document.*;
import org.apache.jmeter.gui.tree.TestPlanTreeModel;
+import org.apache.jmeter.gui.GUIFactory;
import org.apache.jmeter.testelement.TestPlan;
@@ -72,20 +74,20 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Oliver Rossmueller</a>
* @version $Revision$
*/
-public class TabbedMainPanel extends JTabbedPane implements
JMeterDocumentManagerListener, ChangeListener
+public class TabbedMainPanel extends JTabbedPane implements
JMeterDocumentManagerListener, JMeterDocumentListener, ChangeListener
{
private Map documentPanels = new HashMap();
+ private ImageIcon dirtyIcon = GUIFactory.getIcon("DIRTY_TAB");
public TabbedMainPanel()
{
- JMeterDocumentManager.getInstance().addListener(this);
+ JMeterDocumentManager.getInstance().addListener(this);
getModel().addChangeListener(this);
}
-
public void documentAdded(JMeterDocument document)
{
addDocument(document);
@@ -93,11 +95,13 @@
public void documentRemoved(JMeterDocument document)
{
- Component documentComponent =
(Component)documentPanels.get(document.getName());
+ Component documentComponent = getPanelForDocument(document);
- if (documentComponent != null) {
+ if (documentComponent != null)
+ {
remove(documentComponent);
documentPanels.remove(document.getName());
+ document.removeListener(this);
}
}
@@ -113,11 +117,17 @@
private void addTestPlanTab(org.apache.jmeter.gui.document.JMeterDocument
document)
{
TestPlanPanel panel = new TestPlanPanel(document);
- Icon icon = document.getIcon();
+ ImageIcon icon = document.getIcon();
+
+ if (document.hasChanged())
+ {
+ icon = mergeIcons(icon, dirtyIcon);
+ }
addTab(document.getFileName(), icon, panel, document.getAbsolutePath());
setSelectedComponent(panel);
documentPanels.put(document.getName(), panel);
+ document.addListener(this);
}
@@ -126,5 +136,38 @@
DocumentPanel panel = (DocumentPanel)getSelectedComponent();
JMeterDocumentManager.getInstance().setCurrentDocument(panel.getDocument());
+ }
+
+
+ public void documentChanged(JMeterDocument document)
+ {
+ Component panel = getPanelForDocument(document);
+ int index = indexOfComponent(panel);
+ ImageIcon icon = document.getIcon();
+
+ if (document.hasChanged())
+ {
+ icon = mergeIcons(icon, dirtyIcon);
+ }
+ setTitleAt(index, document.getFileName());
+ setToolTipTextAt(index, document.getAbsolutePath());
+ setIconAt(index, icon);
+ }
+
+ private ImageIcon mergeIcons(ImageIcon icon, ImageIcon top)
+ {
+ Image img = icon.getImage();
+ BufferedImage buffered = new BufferedImage(img.getWidth(this),
img.getHeight(this), BufferedImage.TYPE_INT_ARGB_PRE);
+
+ Graphics2D g = buffered.createGraphics();
+
+ g.drawImage(img, 0, 0, this);
+ g.drawImage(top.getImage(), 0, 0, this);
+ return new ImageIcon(buffered);
+ }
+
+ private Component getPanelForDocument(JMeterDocument document)
+ {
+ return (Component)documentPanels.get(document.getName());
}
}
No revision
No revision
1.1.2.1 +4 -0
jakarta-jmeter/src/core/org/apache/jmeter/images/Attic/dirty_tab.png
<<Binary file>>
No revision
No revision
1.1.2.2 +2 -5
jakarta-jmeter/src/core/org/apache/jmeter/save/Attic/JTPFileFormat.java
Index: JTPFileFormat.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/save/Attic/JTPFileFormat.java,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- JTPFileFormat.java 26 Jan 2003 22:22:02 -0000 1.1.2.1
+++ JTPFileFormat.java 27 Jan 2003 22:20:19 -0000 1.1.2.2
@@ -82,10 +82,7 @@
public void store(NamedTestElement element, OutputStream out) throws IOException
{
- SaveService.saveSubTree(element, System.out);
-
-
- write(element, System.out);
+ write(element, out);
}
public NamedTestElement load(InputStream in) throws IOException
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>