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]>

Reply via email to