Author: channa
Date: Sun Jan 20 00:36:33 2008
New Revision: 12536

Log:

Making a single monitored instance a top level menu (MASHUP-514) and changing 
left click behaviour match right click (MASHUP-513).

Modified:
   
trunk/commons/monitor/modules/client/src/main/java/org/wso2/monitor/InstanceMonitor.java
   
trunk/commons/monitor/modules/client/src/main/java/org/wso2/monitor/ServiceMonitor.java

Modified: 
trunk/commons/monitor/modules/client/src/main/java/org/wso2/monitor/InstanceMonitor.java
==============================================================================
--- 
trunk/commons/monitor/modules/client/src/main/java/org/wso2/monitor/InstanceMonitor.java
    (original)
+++ 
trunk/commons/monitor/modules/client/src/main/java/org/wso2/monitor/InstanceMonitor.java
    Sun Jan 20 00:36:33 2008
@@ -18,13 +18,13 @@
 import org.jdesktop.jdic.desktop.Desktop;
 import org.jdesktop.jdic.desktop.DesktopException;
 
-import java.awt.event.ActionListener;
+import javax.swing.*;
 import java.awt.event.ActionEvent;
-import java.io.IOException;
+import java.awt.event.ActionListener;
 import java.io.File;
-import java.net.URL;
+import java.io.IOException;
 import java.net.MalformedURLException;
-import javax.swing.*;
+import java.net.URL;
 
 /**
  * Instance monitor controls a single server instance.
@@ -32,6 +32,7 @@
 public class InstanceMonitor extends MonitorBase implements ActionListener {
     private JMXClient jmxClient;
     private JMenu instanceMenu;
+    private JPopupMenu parentMenu;
     private JMenuItem startMenuItem;
     private JMenuItem restartMenuItem;
     private JMenuItem stopMenuItem;
@@ -39,6 +40,7 @@
     private JMenuItem configMonMenuItem;
     private JMenuItem adminMenuItem;
     private JMenuItem messagesMenuItem;
+    private JMenuItem titleMenuItem;
     private String serviceName;
     private ServerState displayedState;
     private Timer pollingTimer;
@@ -47,33 +49,74 @@
     private int connectionRetries;
     private int retryCount;
     private String serverHome;
+    int pollInterval;
 
     /**
-     * Constructor, instantiates JMX Client and menu and initializes the 
polling process
-     * which updates server instance status.
+     * Constructor to be used when creating an instance menu as a subordimate 
menu item.
+     * Instantiates menu and initializes the polling process which updates 
server instance status.
      *
      * @param display        Instance of the message display implementation 
object.
      * @param instanceNumber Instance number of the server being monitored.
-     * @param serverHome Home directory of monitored server.
+     * @param serverHome     Home directory of monitored server.
      */
     public InstanceMonitor(MessageDisplay display, int instanceNumber, String 
serverHome) {
+        initInstance(display, instanceNumber, serverHome);
+        this.instanceMenu = new JMenu(serviceName);
+        buildInstanceMenu();
+        buildChildUI();
+        setStatus(ServerState.UNCONNECTED);
+        setupStatusChecker();
+    }
+
+    /**
+     * Constructor to be used when creating an instance menu as a top level 
menu item.
+     * Instantiates menu and initializes the polling process which updates 
server instance status.
+     *
+     * @param display        Instance of the message display implementation 
object.
+     * @param instanceNumber Instance number of the server being monitored.
+     * @param serverHome     Home directory of monitored server.
+     * @param mainMenu instance of the main menu to which sumenu is to be 
appended.
+     */
+    public InstanceMonitor(MessageDisplay display, int instanceNumber, String 
serverHome,
+                           JPopupMenu mainMenu) {
+        initInstance(display, instanceNumber, serverHome);
+        this.parentMenu = mainMenu;
+        titleMenuItem = new JMenuItem(serviceName);
+        titleMenuItem.addActionListener(this);
+        parentMenu.add(titleMenuItem);
+        parentMenu.addSeparator();
+        buildInstanceMenu();
+        buildTopLevelUI();
+        setStatus(ServerState.UNCONNECTED);
+        setupStatusChecker();
+    }
+
+    /**
+     * Instantiates JMX Client and retrieved instance setting from property 
files.
+     * 
+     * @param display        Instance of the message display implementation 
object.
+     * @param instanceNumber Instance number of the server being monitored.
+     * @param serverHome     Home directory of monitored server.
+     */
+    private void initInstance(MessageDisplay display, int instanceNumber, 
String serverHome) {
         this.serverHome = serverHome;
         this.display = display;
         this.instanceNumber = instanceNumber;
         serviceName = getProperty(".name");
-        instanceMenu = new JMenu(serviceName);
         String connectorAddress = getProperty(".url");
         String wrapperBeanName = getProperty(".mbeanname");
         jmxClient = new JMXClient(display, connectorAddress, wrapperBeanName);
-        buildInstanceMenu();
-        setStatus(ServerState.UNCONNECTED);
 
         // Property determines the maximum number of retries to connect.
         connectionRetries = Integer.parseInt(monitorProperties.getProperty(
                 "monitor.connectionretries"));
+        pollInterval = 
Integer.parseInt(monitorProperties.getProperty("monitor.pollinterval"));
+    }
 
-        // Setup timer to check status.
-        int pollInterval = 
Integer.parseInt(monitorProperties.getProperty("monitor.pollinterval"));
+    /**
+     * Setup timer to check status.
+     */
+    private void setupStatusChecker() {
         pollingTimer = new Timer(pollInterval, new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                 refreshStatus();
@@ -114,6 +157,8 @@
             getMessages();
         } else if 
(menuText.equals(monitorProperties.getProperty("monitor.options.admin"))) {
             showAdminConsole();
+        } else if (menuText.equals(serviceName)) {
+            showAdminConsole();
         }
     }
 
@@ -126,45 +171,92 @@
         connectMenuItem = new 
JMenuItem(monitorProperties.getProperty("monitor.options.connect"),
                                         connectIcon);
         connectMenuItem.addActionListener(this);
-        instanceMenu.add(connectMenuItem);
-        instanceMenu.addSeparator();
 
         // Start menu icon.
         ImageIcon startIcon = getIcon(MonitorConstants.START_IMAGE);
         startMenuItem = new 
JMenuItem(monitorProperties.getProperty("monitor.options.start"),
                                       startIcon);
         startMenuItem.addActionListener(this);
-        instanceMenu.add(startMenuItem);
 
         // Restart menu item.
         ImageIcon restartIcon = getIcon(MonitorConstants.RESTART_IMAGE);
         restartMenuItem = new 
JMenuItem(monitorProperties.getProperty("monitor.options.restart"),
                                         restartIcon);
         restartMenuItem.addActionListener(this);
-        instanceMenu.add(restartMenuItem);
 
         // Stop menu item.
         ImageIcon stopIcon = getIcon(MonitorConstants.STOP_IMAGE);
         stopMenuItem = new 
JMenuItem(monitorProperties.getProperty("monitor.options.stop"),
                                      stopIcon);
         stopMenuItem.addActionListener(this);
-        instanceMenu.add(stopMenuItem);
 
         // Get messages menu item.
-        instanceMenu.addSeparator();
         messagesMenuItem = new 
JMenuItem(monitorProperties.getProperty("monitor.options.messages"));
         messagesMenuItem.addActionListener(this);
-        instanceMenu.add(messagesMenuItem);
 
         // Admin console menu item.
         adminMenuItem = new 
JMenuItem(monitorProperties.getProperty("monitor.options.admin"));
         adminMenuItem.addActionListener(this);
-        instanceMenu.add(adminMenuItem);
 
         // Configure monitor menu item.
         configMonMenuItem =
                 new 
JMenuItem(monitorProperties.getProperty("monitor.options.configmon"));
         configMonMenuItem.addActionListener(this);
+    }
+
+    /**
+     * Builds the menu UI at the top level.
+     */
+    private void buildTopLevelUI() {
+        // Connect menu item.
+        parentMenu.add(connectMenuItem);
+        parentMenu.addSeparator();
+
+        // Start menu icon.
+        parentMenu.add(startMenuItem);
+
+        // Restart menu item.
+        parentMenu.add(restartMenuItem);
+
+        // Stop menu item.
+        parentMenu.add(stopMenuItem);
+
+        // Get messages menu item.
+        parentMenu.addSeparator();
+        parentMenu.add(messagesMenuItem);
+
+        // Admin console menu item.
+        parentMenu.add(adminMenuItem);
+
+        // Configure monitor menu item.
+        parentMenu.add(configMonMenuItem);
+    }
+
+    /**
+     * Builds the menu UI at a child level.
+     */
+    private void buildChildUI() {
+        // Connect menu item.
+        instanceMenu.add(connectMenuItem);
+        instanceMenu.addSeparator();
+
+        // Start menu icon.
+        instanceMenu.add(startMenuItem);
+
+        // Restart menu item.
+        instanceMenu.add(restartMenuItem);
+
+        // Stop menu item.
+        instanceMenu.add(stopMenuItem);
+
+        // Get messages menu item.
+        instanceMenu.addSeparator();
+        instanceMenu.add(messagesMenuItem);
+
+        // Admin console menu item.
+        instanceMenu.add(adminMenuItem);
+
+        // Configure monitor menu item.
         instanceMenu.add(configMonMenuItem);
     }
 
@@ -281,7 +373,7 @@
     /**
      * Provides the path to the monitored service, relative or absolute based 
on whether the server
      * home directory has been provided.
-     * 
+     *
      * @return String path.
      */
     private String getWrapperPath() {

Modified: 
trunk/commons/monitor/modules/client/src/main/java/org/wso2/monitor/ServiceMonitor.java
==============================================================================
--- 
trunk/commons/monitor/modules/client/src/main/java/org/wso2/monitor/ServiceMonitor.java
     (original)
+++ 
trunk/commons/monitor/modules/client/src/main/java/org/wso2/monitor/ServiceMonitor.java
     Sun Jan 20 00:36:33 2008
@@ -134,6 +134,7 @@
      */
     private void buildMenu() {
         int instanceNumber = 0;
+        InstanceMonitor instanceMonitor = null;
         String instanceHome = null;
 
         // Add a menu for each configured server instance.
@@ -147,10 +148,18 @@
                 instanceHome = serverHomes[instanceNumber];
             }
 
-            InstanceMonitor instanceMonitor = new InstanceMonitor(this, 
instanceNumber,
-                                                                  
instanceHome);
+            // If only a single instance is being monitored, it should be on 
the main menu.
+            if (instanceNumber == 0 && 
monitorProperties.getProperty("monitor.service.1.name") ==
+                    null) {
+                instanceMonitor = new InstanceMonitor(this, instanceNumber, 
instanceHome, monitorMenu);
+            } else {
+                instanceMonitor = new InstanceMonitor(this, instanceNumber, 
instanceHome);
+                monitorMenu.add(instanceMonitor.getInstanceMenu());
+            }
+
+
             monitoredInstances.put(instanceName, instanceMonitor);
-            monitorMenu.add(instanceMonitor.getInstanceMenu());
+
             instanceNumber++;
             instanceName = monitorProperties.getProperty("monitor.service." + 
instanceNumber +
                     ".name");
@@ -203,12 +212,11 @@
         trayIcon = new TrayIcon(i, iconText, monitorMenu);
         trayIcon.setIconAutoSize(true);
 
-        // Add a listener to respond to clicks - show the instances being 
monitored.
+        // Add a listener to respond to clicks - show the menu.
         trayIcon.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
-                String title = 
monitorProperties.getProperty("monitor.configmon.instances");
-                String instances = 
java.util.Arrays.toString(monitoredInstances.keySet().toArray());
-                trayIcon.displayMessage(title, instances, 
TrayIcon.NONE_MESSAGE_TYPE);
+                monitorMenu.setLocation(trayIcon.getLocationOnScreen());
+                monitorMenu.setVisible(true);
             }
         });
         defaultTray.addTrayIcon(trayIcon);

_______________________________________________
Commons-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/commons-dev

Reply via email to