You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by js...@apache.org on 2003/10/29 10:01:53 UTC

cvs commit: incubator-geronimo/modules/explorer LICENSE.txt .cvsignore TODO.txt project.xml project.properties maven.xml

jstrachan    2003/10/29 01:01:53

  Added:       modules/explorer/src/java/org/apache/geronimo/explorer
                        MBeanNode.java Explorer.groovy MBeanServerNode.java
                        MBeanTreeModel.java ExplorerMain.java
                        ViewManager.java
               modules/explorer LICENSE.txt .cvsignore TODO.txt project.xml
                        project.properties maven.xml
  Log:
  Initial checkin of a simple swing JMX console using GroovySwing for the painting of the views. 

It should be pretty easy to add some custom Geronimo views or add some simple JSR 77 /  88 screens etc.
  
  Revision  Changes    Path
  1.1                  incubator-geronimo/modules/explorer/src/java/org/apache/geronimo/explorer/MBeanNode.java
  
  Index: MBeanNode.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 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 Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", 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.geronimo.explorer;
  
  import javax.management.ObjectName;
  import javax.swing.tree.DefaultMutableTreeNode;
  
  /**
   * Tree model for MBeans
   *
   * @version <code>$Revision: 1.1 $ $Date: 2003/10/29 09:01:53 $</code>
   */
  public class MBeanNode extends DefaultMutableTreeNode {
  
      public MBeanNode(ObjectName name) {
          super(name);
      }
  
      public ObjectName getObjectName() {
          return (ObjectName) getUserObject();
      }    
  
      public String toString() {
          return getObjectName().getKeyPropertyListString();
      }
  
  }
  
  
  
  1.1                  incubator-geronimo/modules/explorer/src/java/org/apache/geronimo/explorer/Explorer.groovy
  
  Index: Explorer.groovy
  ===================================================================
  package org.apache.geronimo.explorer
  
  import groovy.swing.SwingBuilder
  
  import java.awt.BorderLayout
  import javax.management.MBeanServer;
  import javax.management.MBeanServerFactory;
  import javax.management.ObjectName;
  import javax.swing.BorderFactory
  
  class Explorer {
  
      property frame
      property swing
      property treeModel
      property viewManager
      property objectName
      
      static void main(args) { 
  	    explorer = new Explorer()
  	    explorer.run()   
  	}
  	
      void run() {
          swing = new SwingBuilder()
          viewManager = new ViewManager(this)
          
          frame = swing.frame(title:'Geronimo Explorer', location:[200,200], size:[800,400]) {
              menuBar {
  		        menu(text:'Help') {
  		            menuItem() {
  		                action(name:'About', closure:{ showAbout() })
  		            }
  		        }
  		    }
  			split = splitPane() {
                  scrollPane() {
  					tree(model:owner.getTreeModel(), valueChanged:{event| onTreeSelection(event)})
                  }
                  p = panel()
                  owner.viewManager.setPanel(p)
  		    }
  		    split.dividerLocation = 0.5
  		}        
  		frame.show()
      }
      
      createMBeanView(name) {
  		objectName = name
          return swing.scrollPane(constraints:BorderLayout.CENTER) {
              vbox() {
                  panel(border:BorderFactory.createTitledBorder(BorderFactory.createLoweredBevelBorder(), 'MBean Properties')) {
                      name = owner.getObjectName()
                      label(text:'domain')
                      textField(text:name.domain, editable:false)
                      
                      for (e in name.keyPropertyList) {
                          valueText = ""
                          if (e.value != null) {
                              valueText = e.value.toString()
                          }
  
                          label(text:e.key)
                          textField(text:valueText, editable:false)                    
                      }
                  }
                  panel(border:BorderFactory.createTitledBorder(BorderFactory.createLoweredBevelBorder(), 'MBean Attributes')) {
                      name = owner.getObjectName()
                      server = owner.getMBeanServer()
                      beanInfo = owner.getMBeanInfo()
                      attributes = beanInfo.attributes
                      list = []
                      for (attrInfo in attributes) {
                          attrName = attrInfo.getName()
                          description = attrInfo.getDescription()
                          value = server.getAttribute(name, attrName)
      
                          valueText = ""
                          if (value != null) {
                              valueText = value.toString()
                          }
                          label(text:attrName)
                          textField(text:valueText)                    
                      }
                  }
                  panel(border:BorderFactory.createTitledBorder(BorderFactory.createLoweredBevelBorder(), 'MBean Operations')) {
                      beanInfo = owner.getMBeanInfo()
                      operations = beanInfo.operations
                      list = []
                      for (opInfo in operations) {
                          opName = opInfo.getName()
                          description = opInfo.getDescription()
  
                          label(text:opName)
                          
                          /** @todo this will only work when local variables are passed into closures */
                          //button(text:'Call', actionListener:{ owner.callMBeanOperation(opName) })                    
                          button(text:'Call')                    
                      }
                  }
              }
          }
      }
      
  	onTreeSelection(event) {
  	    path = event.path
  	    System.out.println("Selected: " + path)
  	    
  	    node = path.lastPathComponent
  	    
          System.out.println("node: " + node)
  
  		viewManager.setSelectedTreeNode(node)
  	}
  	
  	getMBeanServer() {
  	    return getTreeModel().getMBeanServer()
  	}
  	
  	getMBeanInfo() {
          server = getMBeanServer()
          return server.getMBeanInfo(objectName)
  	}
  
      showAbout() {
   		pane = swing.optionPane(message:'This program is a Swing user interface for introspecting Geronimo servers')
   		dialog = pane.createDialog(frame, 'About Geronimo Explorer')
   		dialog.show()
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/explorer/src/java/org/apache/geronimo/explorer/MBeanServerNode.java
  
  Index: MBeanServerNode.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 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 Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", 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.geronimo.explorer;
  
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  import java.util.Set;
  
  import javax.management.MBeanServer;
  import javax.management.MBeanServerFactory;
  import javax.management.ObjectName;
  import javax.swing.tree.DefaultMutableTreeNode;
  
  /**
   * Tree model for MBeans
   *
   * @version <code>$Revision: 1.1 $ $Date: 2003/10/29 09:01:53 $</code>
   */
  public class MBeanServerNode extends DefaultMutableTreeNode {
  
      private MBeanServer server;
      private Map domains = new HashMap();
  
      public MBeanServerNode() {
          this(MBeanServerFactory.createMBeanServer());
      }
  
      public MBeanServerNode(MBeanServer server) {
          super("Server");
          this.server = server;
          createDomains();
      }
      
      public MBeanServer getMBeanServer() {
          return server;
      }
      
      protected void createDomains() {
          Set names = server.queryNames(null, null);
          for (Iterator iter = names.iterator(); iter.hasNext();) {
              ObjectName name = (ObjectName) iter.next();
              String domain = name.getDomain();
              DefaultMutableTreeNode domainNode = (DefaultMutableTreeNode) domains.get(domain);
              if (domainNode == null) {
                  domainNode = new DefaultMutableTreeNode(domain);
                  domains.put(domain, domainNode);
                  add(domainNode);
              }
              domainNode.add(new MBeanNode(name));
          }
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/explorer/src/java/org/apache/geronimo/explorer/MBeanTreeModel.java
  
  Index: MBeanTreeModel.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 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 Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", 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.geronimo.explorer;
  
  import javax.management.MBeanServer;
  import javax.management.MBeanServerFactory;
  import javax.swing.tree.DefaultTreeModel;
  
  /**
   * Tree model for MBeans
   *
   * @version <code>$Revision: 1.1 $ $Date: 2003/10/29 09:01:53 $</code>
   */
  public class MBeanTreeModel extends DefaultTreeModel {
  
      public MBeanTreeModel() {
          this(MBeanServerFactory.createMBeanServer());
      }
  
      public MBeanTreeModel(MBeanServer server) {
          super(new MBeanServerNode(server));
      }
  
      public MBeanServer getMBeanServer() {
          return getRootNode().getMBeanServer();
      }
      
      public MBeanServerNode getRootNode() {
          return (MBeanServerNode) getRoot();
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/explorer/src/java/org/apache/geronimo/explorer/ExplorerMain.java
  
  Index: ExplorerMain.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 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 Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", 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.geronimo.explorer;
  
  import groovy.lang.GroovyObject;
  
  import javax.management.InstanceAlreadyExistsException;
  import javax.management.MBeanRegistrationException;
  import javax.management.MBeanServer;
  import javax.management.MBeanServerFactory;
  import javax.management.MalformedObjectNameException;
  import javax.management.NotCompliantMBeanException;
  import javax.management.ObjectName;
  
  import org.codehaus.groovy.runtime.InvokerHelper;
  
  /**
   * A temporary bootstap mechanism for the Groovy script until
   * Groovy reaches beta-1 and can support static main(String[]) methods
   * 
   * @version <code>$Revision: 1.1 $ $Date: 2003/10/29 09:01:53 $</code>
   */
  public class ExplorerMain {
      public static void main(String[] args) {
          try {
              GroovyObject explorer = (GroovyObject) ExplorerMain.class.getClassLoader().loadClass("org.apache.geronimo.explorer.Explorer").newInstance();
              InvokerHelper.setProperty(explorer, "treeModel", getMBeanTreeModel());
              explorer.invokeMethod("run", null);
          }
          catch (Exception e) {
              System.out.println("Caught: " + e);
              e.printStackTrace();
          }
      }
  
      public static MBeanTreeModel getMBeanTreeModel()
          throws Exception {
          return new MBeanTreeModel(getMBeanServer());
      }
      
      public static MBeanServer getMBeanServer() {
          return MBeanServerFactory.createMBeanServer();
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/explorer/src/java/org/apache/geronimo/explorer/ViewManager.java
  
  Index: ViewManager.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 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 Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", 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.geronimo.explorer;
  
  import java.awt.BorderLayout;
  import java.awt.Component;
  
  import javax.management.MBeanServer;
  import javax.management.ObjectName;
  import javax.swing.JPanel;
  
  import org.codehaus.groovy.runtime.InvokerHelper;
  
  /**
   * Manages views of selected tree nodes
   *
   * @version <code>$Revision: 1.1 $ $Date: 2003/10/29 09:01:53 $</code>
   */
  public class ViewManager {
  
      private JPanel panel;
      private Object explorer;
      private MBeanServer server;
  
      public ViewManager(Object explorer) {
          this.explorer = explorer;
          this.server = (MBeanServer) InvokerHelper.getProperty(explorer, "MBeanServer");
      }
  
      public void setSelectedTreeNode(Object node) {
          if (node instanceof MBeanNode) {
              MBeanNode mbeanNode = (MBeanNode) node;
  
              // lets make the mbean view
              ObjectName name = mbeanNode.getObjectName();
              System.out.println("About to call method: createMBeanView");
              
              Component component = (Component) InvokerHelper.invokeMethod(explorer, "createMBeanView", name);
              setViewComponent(component);
          }
          else {
              setViewComponent(null);
          }
      }
  
      public JPanel getPanel() {
          return panel;
      }
  
      public void setPanel(JPanel panel) {
          this.panel = panel;
          panel.setLayout(new BorderLayout());
      }
  
      protected void setViewComponent(Component component) {
          panel.removeAll();
          if (component != null) {
              panel.add(component, BorderLayout.CENTER);
          }
          panel.invalidate();
          panel.revalidate();
          panel.repaint();
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/explorer/LICENSE.txt
  
  Index: LICENSE.txt
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 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 Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", 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/>.
   *
   * ====================================================================
   */
  
  
  
  1.1                  incubator-geronimo/modules/explorer/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  target
  
  
  
  1.1                  incubator-geronimo/modules/explorer/TODO.txt
  
  Index: TODO.txt
  ===================================================================
  * use JavaBean customizers for attributes?
  	otherwise use a factory for editors per property type & name & ObjectName
  
  * allow attributes to be changed
  
  * nicer layout of forms
  
  * use JSR 160 to connect
  	
  * deployment UI stuff
  
  * combine twiddle commands with explorer
  	
  
  
  1.1                  incubator-geronimo/modules/explorer/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <!-- $Revision: 1.1 $ $Date: 2003/10/29 09:01:53 $ -->
  
  <project>
    <pomVersion>3</pomVersion>
    <extend>${basedir}/../../etc/project.xml</extend>
    
    <!-- ===================== -->
    <!-- Module Identification -->
    <!-- ===================== -->
    
    <name>Geronimo :: Explorer</name>
    <id>geronimo-explorer</id>
    <shortDescription></shortDescription>
    <description></description>
    <siteDirectory></siteDirectory>
    <distributionDirectory></distributionDirectory>
    
    <package>org.apache.geronimo.explorer</package>
    <currentVersion>DEV</currentVersion>
    
    
    <!-- ============ -->
    <!-- Dependencies -->
    <!-- ============ -->
    
    <dependencies>
    
      <!-- Module Dependencies -->
      
      <dependency>
        <groupId>geronimo</groupId>
        <artifactId>geronimo-common</artifactId>
        <version>DEV</version>
        <properties>
          <module>true</module>
          <runtime>true</runtime>
        </properties>
      </dependency>
      
      <!-- Thirdparty Dependencies -->
      
      <dependency>
        <id>mx4j</id>
        <version>SNAPSHOT</version>
        <properties>
            <bootstrap>true</bootstrap>
        </properties>
      </dependency>
  
      <dependency>
        <id>groovy</id>
        <version>1.0-alpha-1</version>
        <url>http://groovy.codehaus.org</url>
        <properties>
          <runtime>true</runtime>
        </properties>
      </dependency>
  
      <dependency>
        <id>commons-logging</id>
        <version>1.0.3</version>
        <url>http://jakarta.apache.org/commons/logging</url>
        <properties>
          <runtime>true</runtime>
        </properties>
      </dependency>
  
      <dependency>
        <id>asm</id>
        <version>1.3.4</version>
      </dependency>   
      
  	<!-- temp hack - won't need this soon -->
      <dependency>
        <id>asm+util</id>
        <version>1.3.4</version>
        <url>http://asm.objectweb.org/</url>
      </dependency>
  
    </dependencies>
    
    
    <!-- =================== -->
    <!-- Build Specification -->
    <!-- =================== -->
    
    <build>
      <unitTest>
        <!-- For some reason this is not pulled from the global project -->
        <includes>
          <include>**/*Test.java</include>
        </includes>
        <excludes>
          <exclude>**/Abstract*.java</exclude>
        </excludes>
        
        <resources>
          <resource>
            <directory>${basedir}/src/test</directory>
            <includes>
              <include>**/*.xml</include>
            </includes>
          </resource>
        </resources>
      </unitTest>
    </build>
  
  </project>
  
  
  
  1.1                  incubator-geronimo/modules/explorer/project.properties
  
  Index: project.properties
  ===================================================================
  ##
  ## $Revision: 1.1 $ $Date: 2003/10/29 09:01:53 $
  ##
  
  # required for Groovy unit test cases
  maven.test.search.classdir = true
  
  
  
  
  1.1                  incubator-geronimo/modules/explorer/maven.xml
  
  Index: maven.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <!-- $Revision: 1.1 $ $Date: 2003/10/29 09:01:53 $ -->
  
  <project default="default"
    xmlns:j="jelly:core"
    xmlns:ant="jelly:ant">
    
    <goal name="setclasspath">
  	<path id="test.classpath">
  	    <pathelement path="${maven.build.dest}"/>
  	    <pathelement path="target/classes"/>
  	    <pathelement path="target/test-classes"/>
  	    <path refid="maven.dependency.classpath"/>
  	</path>
    </goal>
  
    <postGoal name="java:compile">
      <attainGoal name="groovy:compile"/>
    </postGoal>
    
    <!-- this will move into the groovy plugin soon -->
    <goal name="groovy:compile" prereqs="setclasspath"
    		description="Compiles the Groovy source files">
      <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc" classpathref="test.classpath"/> 
      <groovyc destdir="${basedir}/target/classes" srcdir="${basedir}/src/java" listfiles="false">
        <classpath refid="test.classpath"/>
      </groovyc>
    </goal>
    
    <goal name="run" prereqs="test:compile"
  		description="Runs the JMX explorer">
      <java classname="org.apache.geronimo.explorer.ExplorerMain" fork="yes">
        <classpath refid="test.classpath"/>
      </java>
    </goal>
    
  </project>