You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jl...@apache.org on 2006/04/13 13:36:26 UTC

svn commit: r393787 [11/22] - in /geronimo/trunk/applications: ./ console/ console/console-core/ console/console-core/src/ console/console-core/src/java/ console/console-core/src/java/org/ console/console-core/src/java/org/apache/ console/console-core/...

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSProviderData.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSProviderData.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSProviderData.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSProviderData.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,376 @@
+/**
+ *
+ * Copyright 2003-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.geronimo.console.jmsmanager.wizard;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.console.util.PortletManager;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+
+import java.io.Serializable;
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.*;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipEntry;
+import java.net.URL;
+import javax.portlet.PortletRequest;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.ParserConfigurationException;
+
+/**
+ * Loads data on JMS providers known to the console.  Reads from a properties
+ * file on the class path.
+ *
+ * @version $Rev$ $Date$
+ */
+public class JMSProviderData implements Serializable {
+    private final static Log log = LogFactory.getLog(JMSProviderData.class);
+    private String name;
+    private final String raURI;
+    private final String dependency;
+    private String defaultTransaction;
+    private ConfigPropertyData[] instanceConfigProperties;
+    private ConnectionDefinition[] connectionDefinitions;
+    private AdminObjectDefinition[] adminObjectDefinitions;
+
+    public JMSProviderData(String name, String raURI, String dependency) {
+        this.name = name;
+        this.raURI = raURI;
+        this.dependency = dependency;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getRaURI() {
+        return raURI;
+    }
+
+    public String getDependency() {
+        return dependency;
+    }
+
+    public String getDefaultTransaction() {
+        return defaultTransaction;
+    }
+
+    public ConfigPropertyData[] getInstanceConfigProperties() {
+        return instanceConfigProperties;
+    }
+
+    public ConnectionDefinition[] getConnectionDefinitions() {
+        return connectionDefinitions;
+    }
+
+    public AdminObjectDefinition[] getAdminObjectDefinitions() {
+        return adminObjectDefinitions;
+    }
+
+    public static class ConfigPropertyData implements Serializable {
+        private final String name;
+        private final String type;
+        private final String defaultValue;
+        private final String description;
+
+        public ConfigPropertyData(String name, String type, String defaultValue, String description) {
+            this.name = name;
+            this.type = type;
+            this.defaultValue = defaultValue;
+            this.description = description;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+        public String getDefaultValue() {
+            return defaultValue;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+    }
+
+    public static class ConnectionDefinition implements Serializable {
+        private final String connectionFactoryInterface;
+        private final ConfigPropertyData[] configProperties;
+
+        public ConnectionDefinition(String connectionFactoryInterface, ConfigPropertyData[] configProperties) {
+            this.connectionFactoryInterface = connectionFactoryInterface;
+            this.configProperties = configProperties;
+        }
+
+        public String getConnectionFactoryInterface() {
+            return connectionFactoryInterface;
+        }
+
+        public ConfigPropertyData[] getConfigProperties() {
+            return configProperties;
+        }
+    }
+
+    public static class AdminObjectDefinition implements Serializable {
+        private final String adminObjectInterface;
+        private final String adminObjectClass;
+        private final ConfigPropertyData[] configProperties;
+
+        public AdminObjectDefinition(String adminObjectInterface, String adminObjectClass, ConfigPropertyData[] configProperties) {
+            this.adminObjectInterface = adminObjectInterface;
+            this.adminObjectClass = adminObjectClass;
+            this.configProperties = configProperties;
+        }
+
+        public String getAdminObjectInterface() {
+            return adminObjectInterface;
+        }
+
+        public String getAdminObjectClass() {
+            return adminObjectClass;
+        }
+
+        public ConfigPropertyData[] getConfigProperties() {
+            return configProperties;
+        }
+    }
+
+
+    // *************** Static methods to access the data ****************
+
+    private static List all = null;
+    public static JMSProviderData[] getAllProviders() {
+        if(all == null) {
+            loadProviders();
+        }
+        return (JMSProviderData[]) all.toArray(new JMSProviderData[all.size()]);
+    }
+
+    public static JMSProviderData getProviderByName(String name) {
+        if(all == null) {
+            loadProviders();
+        }
+        for (int i = 0; i < all.size(); i++) {
+            JMSProviderData data = (JMSProviderData) all.get(i);
+            if(data.getName().equals(name)) {
+                return data;
+            }
+        }
+        return null;
+    }
+
+    public static JMSProviderData getProviderData(String rar, PortletRequest request) throws IOException {
+        if(all == null) {
+            loadProviders();
+        }
+        for (int i = 0; i < all.size(); i++) {
+            JMSProviderData data = (JMSProviderData) all.get(i);
+            if(data.getRaURI().equals(rar)) {
+                if(data.instanceConfigProperties == null) {
+                    loadRARData(data, request);
+                }
+                return data;
+            }
+        }
+        JMSProviderData data = new JMSProviderData(null, rar, null);
+        loadRARData(data, request);
+        all.add(data);
+        return data;
+    }
+
+    private static void loadRARData(JMSProviderData data, PortletRequest request) throws IOException {
+        URL url = PortletManager.getRepositoryEntry(request, data.getRaURI());
+        ZipInputStream in = new ZipInputStream(url.openStream());
+        ZipEntry entry;
+        Document doc = null;
+        try {
+            while((entry = in.getNextEntry()) != null) {
+                if(entry.getName().equals("META-INF/ra.xml")) {
+                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+                    factory.setValidating(false);
+                    DocumentBuilder builder = factory.newDocumentBuilder();
+                    doc = builder.parse(in);
+                    in.close();
+                    break;
+                } else in.closeEntry();
+            }
+        } catch (ParserConfigurationException e) {
+            log.error("Unable to read META-INF/ra.xml in RAR file '"+data.getRaURI()+"'", e);
+        } catch (SAXException e) {
+            log.error("Unable to read META-INF/ra.xml in RAR file '"+data.getRaURI()+"'", e);
+        }
+        if(doc == null) {
+            throw new IOException("Unable to locate META-INF/ra.xml in RAR file '"+data.getRaURI()+"'");
+        }
+        Element root = doc.getDocumentElement();
+        if(data.getName() == null) {
+            NodeList displays = getChildren(root, "display-name");
+            if(displays != null && displays.getLength() > 0) {
+                data.name = getText(displays.item(0));
+            }
+        }
+        Element ra = (Element) getChildren(root, "resourceadapter").item(0);
+        data.instanceConfigProperties = loadConfigs(ra);
+        Element outbound = (Element) getChildren(ra, "outbound-resourceadapter").item(0);
+        data.defaultTransaction = getTransactionSetting(getChildText(outbound, "transaction-support"));
+        data.connectionDefinitions = loadConnections(outbound);
+        data.adminObjectDefinitions = loadAdmins(ra);
+    }
+
+    private static String getTransactionSetting(String text) {
+        if(text == null) {
+            return null;
+        }
+        if(text.equals("XATransaction")) return "xa";
+        if(text.equals("LocalTransaction")) return "local";
+        if(text.equals("NoTransaction")) return "none";
+        return null;
+    }
+
+    private static ConfigPropertyData[] loadConfigs(Element parent) {
+        NodeList configs = getChildren(parent, "config-property");
+        if(configs == null || configs.getLength() == 0) {
+            return new ConfigPropertyData[0];
+        }
+        ConfigPropertyData[] results = new ConfigPropertyData[configs.getLength()];
+        for (int i = 0; i < results.length; i++) {
+            Element root = (Element) configs.item(i);
+            results[i] = new ConfigPropertyData(getChildText(root, "config-property-name"),
+                    getChildText(root, "config-property-type"), getChildText(root, "config-property-value"),
+                    getChildText(root, "description"));
+        }
+        return results;
+    }
+
+    private static NodeList getChildren(Element parent, String child) {
+        final List list = new ArrayList();
+        NodeList nodes = parent.getChildNodes();
+        for(int i=0; i<nodes.getLength(); i++) {
+            Node node = nodes.item(i);
+            if(node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equals(child)) {
+                list.add(node);
+            }
+        }
+        return new NodeList() {
+            public Node item(int index) {
+                return (Node) list.get(index);
+            }
+
+            public int getLength() {
+                return list.size();
+            }
+        };
+    }
+
+    private static ConnectionDefinition[] loadConnections(Element outbound) {
+        NodeList defs = getChildren(outbound, "connection-definition");
+        if(defs == null || defs.getLength() == 0) {
+            return new ConnectionDefinition[0];
+        }
+        ConnectionDefinition[] results = new ConnectionDefinition[defs.getLength()];
+        for (int i = 0; i < results.length; i++) {
+            Element def = (Element) defs.item(i);
+            results[i] = new ConnectionDefinition(getChildText(def, "connectionfactory-interface"), loadConfigs(def));
+        }
+        return results;
+    }
+
+    private static AdminObjectDefinition[] loadAdmins(Element ra) {
+        NodeList defs = getChildren(ra, "adminobject");
+        if(defs == null || defs.getLength() == 0) {
+            return new AdminObjectDefinition[0];
+        }
+        AdminObjectDefinition[] results = new AdminObjectDefinition[defs.getLength()];
+        for (int i = 0; i < results.length; i++) {
+            Element def = (Element) defs.item(i);
+            results[i] = new AdminObjectDefinition(getChildText(def, "adminobject-interface"),
+                    getChildText(def, "adminobject-class"), loadConfigs(def));
+        }
+        return results;
+    }
+
+    private static String getChildText(Element root, String name) {
+        NodeList list = getChildren(root, name);
+        if(list == null || list.getLength() == 0) {
+            return null;
+        }
+        return getText(list.item(0));
+    }
+
+    private static String getText(Node node) {
+        StringBuffer buf = null;
+        NodeList list = node.getChildNodes();
+        if(list != null) {
+            for(int i=0; i<list.getLength(); i++) {
+                Node current = list.item(i);
+                if(current.getNodeType() == Node.TEXT_NODE) {
+                    if(buf == null) {
+                        buf = new StringBuffer();
+                    }
+                    buf.append(current.getNodeValue());
+                }
+            }
+        }
+        return buf == null ? null : buf.toString();
+    }
+
+
+    private static void loadProviders() {
+        InputStream in = JMSProviderData.class.getResourceAsStream("/jms-resource-providers.properties");
+        if(in == null) {
+            log.error("Unable to locate JMS provider properties file");
+            return;
+        }
+        Properties props = new Properties();
+        try {
+            props.load(in);
+            in.close();
+        } catch (IOException e) {
+            log.error("Unable to read JMS provider properties file", e);
+        }
+        Set set = new HashSet();
+        // Find the names of the provider entries
+        for (Iterator it = props.keySet().iterator(); it.hasNext();) {
+            String key = (String) it.next();
+            int start = key.indexOf('.');
+            int end = key.indexOf('.', start+1);
+            if(start < 0 || end < 0) {
+                continue;
+            }
+            set.add(key.substring(start+1, end));
+        }
+        List list = new ArrayList(set.size());
+        for (Iterator it = set.iterator(); it.hasNext();) {
+            String key = (String) it.next();
+            String name = props.getProperty("provider."+key+".name");
+            String rar = props.getProperty("provider."+key+".rar");
+            String dep = props.getProperty("provider."+key+".dependency");
+            list.add(new JMSProviderData(name, rar, dep));
+        }
+        all = list;
+    }
+}

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSProviderData.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSProviderData.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSProviderData.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSResourcePortlet.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSResourcePortlet.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSResourcePortlet.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSResourcePortlet.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,61 @@
+/**
+ *
+ * Copyright 2005 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.geronimo.console.jmsmanager.wizard;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+import javax.portlet.PortletException;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.RenderResponse;
+import javax.portlet.RenderRequest;
+import javax.portlet.ActionRequest;
+import javax.portlet.WindowState;
+import javax.portlet.PortletRequest;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.console.BasePortlet;
+import org.apache.geronimo.console.MultiPagePortlet;
+import org.apache.geronimo.console.MultiPageModel;
+
+/**
+ * A portlet that lets you configure and deploy JDBC connection pools.
+ *
+ * @version $Rev$ $Date$
+ */
+public class JMSResourcePortlet extends MultiPagePortlet {
+    public void init(PortletConfig config) throws PortletException {
+        super.init(config);
+        addHelper(new ListScreenHandler(), config);
+        addHelper(new SelectProviderHandler(), config);
+        addHelper(new ConfigureRAInstanceHandler(), config);
+        addHelper(new SelectConnectionFactoryTypeHandler(), config);
+        addHelper(new CreateConnectionFactoryHandler(), config);
+        addHelper(new SelectDestinationTypeHandler(), config);
+        addHelper(new CreateDestinationHandler(), config);
+        addHelper(new ShowPlanHandler(), config);
+        addHelper(new DeployHandler(), config);
+        addHelper(new ReviewHandler(), config);
+    }
+
+    protected MultiPageModel getModel(PortletRequest request) {
+        return new AbstractHandler.JMSResourceData(request);
+    }
+}

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSResourcePortlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSResourcePortlet.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/JMSResourcePortlet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ListScreenHandler.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ListScreenHandler.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ListScreenHandler.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ListScreenHandler.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,321 @@
+/**
+ *
+ * Copyright 2005 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.geronimo.console.jmsmanager.wizard;
+
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.kernel.management.State;
+import org.apache.geronimo.kernel.proxy.GeronimoManagedBean;
+import org.apache.geronimo.management.geronimo.ResourceAdapterModule;
+import org.apache.geronimo.management.geronimo.JCAManagedConnectionFactory;
+import org.apache.geronimo.management.geronimo.JCAAdminObject;
+import org.apache.geronimo.management.geronimo.JCAResource;
+import org.apache.geronimo.management.ResourceAdapter;
+import org.apache.geronimo.console.util.PortletManager;
+import org.apache.geronimo.console.MultiPageModel;
+
+import javax.portlet.*;
+import javax.management.ObjectName;
+import javax.management.MalformedObjectNameException;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * A handles for the front page that lists available resources.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ListScreenHandler extends AbstractHandler {
+    public ListScreenHandler() {
+        super(LIST_MODE, "/WEB-INF/view/jmswizard/list.jsp");
+    }
+
+    public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        return getMode();
+    }
+
+    public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
+        populateExistingList(request);
+    }
+
+    public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        String provider = request.getParameter(PROVIDER_PARAMETER);
+        if(isEmpty(provider)) {
+            return SELECT_PROVIDER_MODE+BEFORE_ACTION;
+        }
+        JMSProviderData providerData = JMSProviderData.getProviderByName(provider);
+        data.setRarURI(providerData.getRaURI());
+        data.setDependency(providerData.getDependency());
+        return CONFIGURE_RA_MODE+BEFORE_ACTION;
+    }
+
+
+
+    private void populateExistingList(PortletRequest renderRequest) {
+        // Prepare a list of JMS configurations
+        List resources = new ArrayList();
+
+        // Get the list of connection factories
+        ResourceAdapterModule[] modules = PortletManager.getOutboundRAModules(renderRequest, new String[]{
+                "javax.jms.ConnectionFactory","javax.jms.QueueConnectionFactory","javax.jms.TopicConnectionFactory",});
+        try {
+            for (int i = 0; i < modules.length; i++) {
+                ResourceAdapterModule module = modules[i];
+
+                JMSResourceSummary target = null;
+                for (int j = 0; j < resources.size(); j++) {
+                    JMSResourceSummary data = (JMSResourceSummary) resources.get(j);
+                    if(data.adapterObjectName.equals(module.getObjectName())) {
+                        target = data;
+                        break;
+                    }
+                }
+                if(target == null) {
+                    ResourceAdapter[] adapters = PortletManager.getResourceAdapters(renderRequest, module);
+                    String name = null;
+                    if(adapters.length == 1 && adapters[0].getJCAResources().length == 1) {
+                        JCAResource[] resource = PortletManager.getJCAResources(renderRequest, adapters[0]);
+                        if(resource.length == 1 && resource[0].getResourceAdapterInstances().length == 1) {
+                            name = ObjectName.getInstance(resource[0].getResourceAdapterInstances()[0]).getKeyProperty(NameFactory.J2EE_NAME);
+                        }
+                    }
+                    if(name == null) {
+                        name = ObjectName.getInstance(module.getObjectName()).getKeyProperty(NameFactory.J2EE_NAME);
+                    }
+                    target = new JMSResourceSummary(PortletManager.getConfigurationFor(renderRequest, module.getObjectName()).toString(),
+                                                    module.getObjectName(), name, ((GeronimoManagedBean)module).getState());
+                    resources.add(target);
+                }
+
+                JCAManagedConnectionFactory[] factories = PortletManager.getOutboundFactoriesForRA(renderRequest, module, new String[]{
+                        "javax.jms.ConnectionFactory", "javax.jms.QueueConnectionFactory", "javax.jms.TopicConnectionFactory", });
+                for (int j = 0; j < factories.length; j++) {
+                    JCAManagedConnectionFactory factory = factories[j];
+                    ObjectName name = ObjectName.getInstance(factory.getObjectName());
+                    target.getConnectionFactories().add(new ConnectionFactorySummary(factory.getObjectName(), name.getKeyProperty(NameFactory.J2EE_NAME),
+                                                      ((GeronimoManagedBean)factory).getState()));
+                }
+            }
+
+            // Get the list of admin objects
+            modules = PortletManager.getAdminObjectModules(renderRequest, new String[]{"javax.jms.Queue","javax.jms.Topic"});
+            for (int i = 0; i < modules.length; i++) {
+                ResourceAdapterModule module = modules[i];
+
+                JMSResourceSummary target = null;
+                for (int j = 0; j < resources.size(); j++) {
+                    JMSResourceSummary data = (JMSResourceSummary) resources.get(j);
+                    if(data.adapterObjectName.equals(module.getObjectName())) {
+                        target = data;
+                        break;
+                    }
+                }
+                if(target == null) {
+                    ResourceAdapter[] adapters = PortletManager.getResourceAdapters(renderRequest, module);
+                    String name = null;
+                    if(adapters.length == 1 && adapters[0].getJCAResources().length == 1) {
+                        JCAResource[] resource = PortletManager.getJCAResources(renderRequest, adapters[0]);
+                        if(resource.length == 1 && resource[0].getResourceAdapterInstances().length == 1) {
+                            name = ObjectName.getInstance(resource[0].getResourceAdapterInstances()[0]).getKeyProperty(NameFactory.J2EE_NAME);
+                        }
+                    }
+                    if(name == null) {
+                        name = ObjectName.getInstance(module.getObjectName()).getKeyProperty(NameFactory.J2EE_NAME);
+                    }
+                    target = new JMSResourceSummary(PortletManager.getConfigurationFor(renderRequest, module.getObjectName()).toString(),
+                                                    module.getObjectName(), name, ((GeronimoManagedBean)module).getState());
+                    resources.add(target);
+                }
+
+                JCAAdminObject[] admins = PortletManager.getAdminObjectsForRA(renderRequest, module, new String[]{"javax.jms.Queue","javax.jms.Topic"});
+                for (int j = 0; j < admins.length; j++) {
+                    GeronimoManagedBean bean = (GeronimoManagedBean) admins[j];
+                    ObjectName name = ObjectName.getInstance(bean.getObjectName());
+                    target.getAdminObjects().add(new AdminObjectSummary(bean.getObjectName(), name.getKeyProperty(NameFactory.J2EE_NAME),
+                                                      admins[j].getAdminObjectInterface().indexOf("Queue") > -1 ? "Queue" : "Topic",
+                                                      bean.getState()));
+                }
+            }
+        } catch (MalformedObjectNameException e) {
+            e.printStackTrace();
+        }
+
+        renderRequest.setAttribute("resources", resources);
+        // Get the list of JMS providers
+        renderRequest.setAttribute("providers", JMSProviderData.getAllProviders());
+    }
+
+
+
+    public static class JMSResourceSummary implements Serializable, Comparable {
+        private final String configurationName;
+        private final String adapterObjectName;
+        private final String name;
+        private final String parentName;
+        private final int state;
+        private final List connectionFactories = new ArrayList();
+        private final List adminObjects = new ArrayList();
+
+        public JMSResourceSummary(String configurationName, String adapterObjectName, String name, int state) {
+            this.configurationName = configurationName;
+            this.adapterObjectName = adapterObjectName;
+            this.state = state;
+            try {
+                ObjectName objectName = ObjectName.getInstance(adapterObjectName);
+                String parent = objectName.getKeyProperty(NameFactory.J2EE_APPLICATION);
+                if(parent != null && parent.equals("null")) {
+                    parent = null;
+                }
+                parentName = parent;
+                this.name = name;
+            } catch (MalformedObjectNameException e) {
+                throw new RuntimeException("Can't parse ObjectName", e);
+            }
+        }
+
+        public String getConfigurationName() {
+            return configurationName;
+        }
+
+        public String getAdapterObjectName() {
+            return adapterObjectName;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getParentName() {
+            return parentName;
+        }
+
+        public int getState() {
+            return state;
+        }
+
+        public List getConnectionFactories() {
+            return connectionFactories;
+        }
+
+        public List getAdminObjects() {
+            return adminObjects;
+        }
+
+        public String getStateName() {
+            return State.toString(state);
+        }
+
+        public int compareTo(Object o) {
+            final JMSResourceSummary pool = (JMSResourceSummary)o;
+            int names = configurationName.compareTo(pool.configurationName);
+            if(parentName == null) {
+                if(pool.parentName == null) {
+                    return names;
+                } else {
+                    return -1;
+                }
+            } else {
+                if(pool.parentName == null) {
+                    return 1;
+                } else {
+                    int test = parentName.compareTo(pool.parentName);
+                    if(test != 0) {
+                        return test;
+                    } else {
+                        return names;
+                    }
+                }
+            }
+        }
+    }
+
+    public static class ConnectionFactorySummary implements Serializable, Comparable {
+        private final String factoryObjectName;
+        private final String name;
+        private final int state;
+
+        public ConnectionFactorySummary(String factoryObjectName, String name, int state) {
+            this.factoryObjectName = factoryObjectName;
+            this.name = name;
+            this.state = state;
+        }
+
+        public String getFactoryObjectName() {
+            return factoryObjectName;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public int getState() {
+            return state;
+        }
+
+        public String getStateName() {
+            return State.toString(state);
+        }
+
+        public int compareTo(Object o) {
+            final ConnectionFactorySummary pool = (ConnectionFactorySummary)o;
+            return name.compareTo(pool.name);
+        }
+    }
+
+
+    public static class AdminObjectSummary implements Serializable, Comparable {
+        private final String adminObjectName;
+        private final String name;
+        private final String type;
+        private final int state;
+
+        public AdminObjectSummary(String adminObjectName, String name, String type, int state) {
+            this.adminObjectName = adminObjectName;
+            this.name = name;
+            this.type = type;
+            this.state = state;
+        }
+
+        public String getAdminObjectName() {
+            return adminObjectName;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+        public int getState() {
+            return state;
+        }
+
+        public String getStateName() {
+            return State.toString(state);
+        }
+
+        public int compareTo(Object o) {
+            final AdminObjectSummary pool = (AdminObjectSummary)o;
+            int result = name.compareTo(pool.name);
+            return result == 0 ? type.compareTo(pool.type) : result;
+        }
+    }
+}

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ListScreenHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ListScreenHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ListScreenHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ReviewHandler.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ReviewHandler.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ReviewHandler.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ReviewHandler.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,58 @@
+/**
+ *
+ * Copyright 2005 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.geronimo.console.jmsmanager.wizard;
+
+import org.apache.geronimo.console.MultiPageModel;
+
+import java.io.IOException;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+/**
+ * HAndles the screen where you review your progress so far
+ *
+ * @version $Rev$ $Date$
+ */
+public class ReviewHandler extends AbstractHandler {
+    public ReviewHandler() {
+        super(REVIEW_MODE, "/WEB-INF/view/jmswizard/status.jsp");
+    }
+
+    public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        return getMode();
+    }
+
+    public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        JMSProviderData provider = JMSProviderData.getProviderData(data.getRarURI(), request);
+        request.setAttribute("provider", provider);
+    }
+
+    public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        String next = request.getParameter("nextAction");
+        if(next.equals(SELECT_DESTINATION_TYPE_MODE)) {
+            data.setCurrentDestinationID(data.getAdminObjects().size());
+        } else if(next.equals(SELECT_FACTORY_TYPE_MODE)) {
+            data.setCurrentFactoryID(data.getConnectionFactories().size());
+        }
+        return next+BEFORE_ACTION;
+    }
+}

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ReviewHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ReviewHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ReviewHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectConnectionFactoryTypeHandler.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectConnectionFactoryTypeHandler.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectConnectionFactoryTypeHandler.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectConnectionFactoryTypeHandler.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,62 @@
+/**
+ *
+ * Copyright 2005 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.geronimo.console.jmsmanager.wizard;
+
+import org.apache.geronimo.console.MultiPageModel;
+
+import java.io.IOException;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+/**
+ * Handler for the screen that creates a new connection factory
+ *
+ * @version $Rev$ $Date$
+ */
+public class SelectConnectionFactoryTypeHandler extends AbstractHandler {
+    public SelectConnectionFactoryTypeHandler() {
+        super(SELECT_FACTORY_TYPE_MODE, "/WEB-INF/view/jmswizard/factoryType.jsp");
+    }
+
+    public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        data.createIfNecessary();
+        JMSProviderData provider = JMSProviderData.getProviderData(data.getRarURI(), request);
+        if(data.getCurrentFactory().getTransaction() == null || data.getCurrentFactory().getTransaction().equals("")) {
+            data.getCurrentFactory().setTransaction(provider.getDefaultTransaction());
+        }
+        // If there's only one factory type, skip this step
+        if(provider.getConnectionDefinitions().length == 1) {
+            data.setFactoryType(0);
+            return ADD_FACTORY_MODE+BEFORE_ACTION;
+        }
+        return getMode();
+    }
+
+    public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        JMSProviderData provider = JMSProviderData.getProviderData(data.getRarURI(), request);
+        request.setAttribute("provider", provider);
+    }
+
+    public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        return ADD_FACTORY_MODE+BEFORE_ACTION;
+    }
+}

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectConnectionFactoryTypeHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectConnectionFactoryTypeHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectConnectionFactoryTypeHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectDestinationTypeHandler.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectDestinationTypeHandler.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectDestinationTypeHandler.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectDestinationTypeHandler.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,59 @@
+/**
+ *
+ * Copyright 2005 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.geronimo.console.jmsmanager.wizard;
+
+import org.apache.geronimo.console.MultiPageModel;
+
+import java.io.IOException;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+/**
+ * Handler for the screen that creates a new connection factory
+ *
+ * @version $Rev$ $Date$
+ */
+public class SelectDestinationTypeHandler extends AbstractHandler {
+    public SelectDestinationTypeHandler() {
+        super(SELECT_DESTINATION_TYPE_MODE, "/WEB-INF/view/jmswizard/destinationType.jsp");
+    }
+
+    public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        data.createIfNecessary();
+        JMSProviderData provider = JMSProviderData.getProviderData(data.getRarURI(), request);
+        // If there's only one factory type, skip this step
+        if(provider.getAdminObjectDefinitions().length == 1) {
+            data.setDestinationType(0);
+            return ADD_DESTINATION_MODE+BEFORE_ACTION;
+        }
+        return getMode();
+    }
+
+    public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        JMSProviderData provider = JMSProviderData.getProviderData(data.getRarURI(), request);
+        request.setAttribute("provider", provider);
+    }
+
+    public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        return ADD_DESTINATION_MODE+BEFORE_ACTION;
+    }
+}

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectDestinationTypeHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectDestinationTypeHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectDestinationTypeHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectProviderHandler.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectProviderHandler.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectProviderHandler.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectProviderHandler.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,97 @@
+/**
+ *
+ * Copyright 2005 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.geronimo.console.jmsmanager.wizard;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.net.URI;
+import java.net.URISyntaxException;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import org.apache.geronimo.kernel.repository.ListableRepository;
+import org.apache.geronimo.console.util.PortletManager;
+import org.apache.geronimo.console.MultiPageModel;
+
+/**
+ * Handler for the screen where you select a JMS provider (because
+ * you didn't want one of the ones we know about).
+ *
+ * @version $Rev$ $Date$
+ */
+public class SelectProviderHandler extends AbstractHandler {
+    private final static String[] SKIP_RARS_CONTAINING = new String[]{"tranql"};
+
+    public SelectProviderHandler() {
+        super(SELECT_PROVIDER_MODE, "/WEB-INF/view/jmswizard/provider.jsp");
+    }
+
+    public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        return getMode();
+    }
+
+    public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
+        loadRARList(request);
+    }
+
+    public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        String rar = request.getParameter(RAR_FILE_PARAMETER);
+        if(isEmpty(rar)) {
+            return SELECT_PROVIDER_MODE+BEFORE_ACTION;
+        }
+        data.setRarURI(rar);
+        return CONFIGURE_RA_MODE+BEFORE_ACTION;
+    }
+
+    private void loadRARList(RenderRequest renderRequest) {
+        // List the available RARs
+        List list = new ArrayList();
+        ListableRepository[] repos = PortletManager.getListableRepositories(renderRequest);
+        for (int i = 0; i < repos.length; i++) {
+            ListableRepository repo = repos[i];
+            try {
+                final URI[] uris = repo.listURIs();
+                outer:
+                for (int j = 0; j < uris.length; j++) {
+                    if(uris[j] == null) {
+                        continue; // probably a JAR lacks a version number in the name, etc.
+                    }
+                    String test = uris[j].toString();
+                    if(!test.endsWith("/rar")) { //todo: may need to change this logic if configId format changes
+                        continue;
+                    }
+                    for (int k = 0; k < SKIP_RARS_CONTAINING.length; k++) {
+                        String skip = SKIP_RARS_CONTAINING[k];
+                        if(test.indexOf(skip) > -1) {
+                            continue outer;
+                        }
+                    }
+                    list.add(test);
+                }
+            } catch (URISyntaxException e) {
+                e.printStackTrace();
+            }
+        }
+        Collections.sort(list);
+        renderRequest.setAttribute("rars", list);
+    }
+}

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectProviderHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectProviderHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/SelectProviderHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ShowPlanHandler.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ShowPlanHandler.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ShowPlanHandler.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ShowPlanHandler.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,73 @@
+/**
+ *
+ * Copyright 2005 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.geronimo.console.jmsmanager.wizard;
+
+import java.io.IOException;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import org.apache.geronimo.console.util.PortletManager;
+import org.apache.geronimo.console.MultiPageModel;
+
+/**
+ * Handles the page that shows a deployment plan
+ *
+ * @version $Rev$ $Date$
+ */
+public class ShowPlanHandler extends AbstractHandler {
+    public ShowPlanHandler() {
+        super(SHOW_PLAN_MODE, "/WEB-INF/view/jmswizard/plan.jsp");
+    }
+
+    public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        String plan = save(request, response, data, true);
+        request.getPortletSession(true).setAttribute("deploymentPlan", plan);
+        return getMode();
+    }
+
+    public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        request.setAttribute("deploymentPlan", request.getPortletSession().getAttribute("deploymentPlan"));
+        String path = PortletManager.getRepositoryEntry(request, data.getRarURI()).getPath();
+        String base = PortletManager.getServerInfo(request).getCurrentBaseDirectory();
+        if(base != null && path.startsWith(base)) {
+            path = path.substring(base.length());
+            if(path.startsWith("/")) {
+                path = path.substring(1);
+            }
+        } else {
+            int pos = path.lastIndexOf('/');
+            path = path.substring(pos+1);
+        }
+        request.setAttribute("rarURL", path);
+    }
+
+    public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        JMSResourceData data = (JMSResourceData) model;
+        request.getPortletSession(true).removeAttribute("deploymentPlan");
+        String next = request.getParameter("nextAction");
+        if(next.equals(SELECT_DESTINATION_TYPE_MODE)) {
+            data.setCurrentDestinationID(data.getAdminObjects().size());
+        } else if(next.equals(SELECT_FACTORY_TYPE_MODE)) {
+            data.setCurrentFactoryID(data.getConnectionFactories().size());
+        }
+        return next+BEFORE_ACTION;
+    }
+}

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ShowPlanHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ShowPlanHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jmsmanager/wizard/ShowPlanHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/DynamicServerInfo.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/DynamicServerInfo.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/DynamicServerInfo.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/DynamicServerInfo.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,119 @@
+/**
+ *
+ * Copyright 2003-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.geronimo.console.jsr77;
+
+import java.io.Serializable;
+import java.text.NumberFormat;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class DynamicServerInfo implements Serializable {
+    private final static long BYTES_MAX = 2048;
+    private final static long KB_MAX = BYTES_MAX * 1024l;
+    private final static long MB_MAX = KB_MAX * 1024l;
+    private final static long GB_MAX = MB_MAX * 1024l;
+    private final static long TB_MAX = GB_MAX * 1024l;
+    private final static double KB_DIV = 1024;
+    private final static double MB_DIV = KB_DIV*1024d;
+    private final static double GB_DIV = MB_DIV*1024d;
+    private final static double TB_DIV = GB_DIV*1024d;
+    private NumberFormat dec2Format;
+    private String memoryCurrent;
+    private String memoryMost;
+    private String memoryAllocated;
+    private String upTime;
+
+    public DynamicServerInfo(long upTime) {
+        this.upTime = calculateTime(upTime);
+        memoryAllocated = memoryCurrent = memoryMost = "Unknown";
+    }
+
+    public DynamicServerInfo(long memoryCurrent, long memoryMost, long memoryAllocated, long upTime) {
+        dec2Format = NumberFormat.getNumberInstance();
+        dec2Format.setMaximumFractionDigits(2);
+        this.memoryCurrent = calculateMemory(memoryCurrent);
+        this.memoryMost = calculateMemory(memoryMost);
+        this.memoryAllocated = calculateMemory(memoryAllocated);
+        this.upTime = calculateTime(upTime);
+    }
+
+    private String calculateMemory(long bytes) {
+        if(bytes < BYTES_MAX) {
+            return bytes+" B";
+        } else if(bytes < KB_MAX) {
+            return dec2Format.format((double)bytes/KB_DIV)+" kB";
+        } else if(bytes < MB_MAX) {
+            return dec2Format.format((double)bytes/MB_DIV)+" MB";
+        } else if(bytes < GB_MAX) {
+            return dec2Format.format((double)bytes/GB_DIV)+" GB";
+        } else if(bytes < TB_MAX) {
+            return dec2Format.format((double)bytes/TB_DIV)+" TB";
+        } else {
+            return "Out of range";
+        }
+    }
+
+    private String calculateTime(long millis) {
+        int secs = (int)(millis/1000L);
+        int days = secs/86400;
+        secs = secs % 86400;
+        int hours = secs/3600;
+        secs = secs % 3600;
+        int minutes = secs / 60;
+        secs = secs % 60;
+        StringBuffer buf = new StringBuffer();
+        if(days > 1) {
+            buf.append(' ').append(days).append(" days");
+        } else if(days > 0) {
+            buf.append(' ').append(days).append(" day");
+        }
+        if(hours > 1) {
+            buf.append(' ').append(hours).append(" hours");
+        } else if(hours > 0) {
+            buf.append(' ').append(hours).append(" hour");
+        }
+        if(minutes > 1) {
+            buf.append(' ').append(minutes).append(" minutes");
+        } else if(minutes > 0) {
+            buf.append(' ').append(minutes).append(" minute");
+        }
+        if(secs > 1) {
+            buf.append(' ').append(secs).append(" seconds");
+        } else if(secs > 0) {
+            buf.append(' ').append(secs).append(" second");
+        }
+        buf.delete(0,1);
+        return buf.toString();
+    }
+
+    public String getMemoryCurrent() {
+        return memoryCurrent;
+    }
+
+    public String getMemoryMost() {
+        return memoryMost;
+    }
+
+    public String getMemoryAllocated() {
+        return memoryAllocated;
+    }
+
+    public String getUpTime() {
+        return upTime;
+    }
+}

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/DynamicServerInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/DynamicServerInfo.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/DynamicServerInfo.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/Jsr77Lookup.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/Jsr77Lookup.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/Jsr77Lookup.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/Jsr77Lookup.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,51 @@
+/**
+ *
+ * Copyright 2003-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.geronimo.console.jsr77;
+
+import javax.servlet.http.HttpSession;
+import javax.management.j2ee.statistics.JVMStats;
+import javax.management.j2ee.statistics.BoundedRangeStatistic;
+import uk.ltd.getahead.dwr.ExecutionContext;
+import org.apache.geronimo.console.util.PortletManager;
+import org.apache.geronimo.console.util.ManagementHelper;
+import org.apache.geronimo.management.J2EEDomain;
+import org.apache.geronimo.management.StatisticsProvider;
+import org.apache.geronimo.management.geronimo.J2EEServer;
+import org.apache.geronimo.management.geronimo.JVM;
+
+/**
+ * Looks up JSR-77 statistics in response to AJAX calls from portlets.
+ *
+ * @version $Rev$ $Date$
+ */
+public class Jsr77Lookup {
+    public DynamicServerInfo getJavaVMStatistics() {
+        HttpSession session = ExecutionContext.get().getSession();
+        ManagementHelper helper = PortletManager.getManagementHelper(session);
+        J2EEDomain[] domains = helper.getDomains();
+        J2EEServer[] servers = helper.getServers(domains[0]);
+        JVM[] jvms = helper.getJavaVMs(servers[0]);
+        long elapsed = System.currentTimeMillis() - jvms[0].getKernelBootTime().getTime();
+        if(jvms[0].isStatisticsProvider()) {
+            JVMStats stats = (JVMStats) ((StatisticsProvider)jvms[0]).getStats();
+            BoundedRangeStatistic heap = stats.getHeapSize();
+            return new DynamicServerInfo(heap.getCurrent(), heap.getHighWaterMark(), heap.getUpperBound(), elapsed);
+        } else {
+            return new DynamicServerInfo(elapsed);
+        }
+    }
+}

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/Jsr77Lookup.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/Jsr77Lookup.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/jsr77/Jsr77Lookup.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogManagerPortlet.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogManagerPortlet.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogManagerPortlet.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogManagerPortlet.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,94 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  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.geronimo.console.logmanager;
+
+import java.io.IOException;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.WindowState;
+
+import org.apache.geronimo.console.BasePortlet;
+import org.apache.geronimo.console.util.PortletManager;
+import org.apache.geronimo.system.logging.SystemLog;
+
+public class LogManagerPortlet extends BasePortlet {
+
+    protected PortletRequestDispatcher normalView;
+
+    protected PortletRequestDispatcher helpView;
+
+    protected void doHelp(RenderRequest renderRequest,
+            RenderResponse renderRespose) throws PortletException, IOException {
+        helpView.include(renderRequest, renderRespose);
+    }
+
+    protected void doView(RenderRequest renderRequest,
+            RenderResponse renderRespose) throws PortletException, IOException {
+        if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
+            return;
+        }
+        SystemLog log = PortletManager.getCurrentSystemLog(renderRequest);
+        renderRequest.setAttribute("configFile", log.getConfigFileName());
+//        renderRequest.setAttribute("configuration", LogHelper.getConfiguration());
+        renderRequest.setAttribute("logLevel", log.getRootLoggerLevel());
+        renderRequest.setAttribute("refreshPeriod", new Integer(log.getRefreshPeriodSeconds()));
+
+        normalView.include(renderRequest, renderRespose);
+    }
+
+    public void init(PortletConfig portletConfig) throws PortletException {
+        PortletContext pc = portletConfig.getPortletContext();
+        normalView = pc.getRequestDispatcher("/WEB-INF/view/logmanager/view.jsp");
+        helpView = pc.getRequestDispatcher("/WEB-INF/view/logmanager/help.jsp");
+        super.init(portletConfig);
+    }
+
+    public void processAction(ActionRequest actionRequest,
+            ActionResponse actionResponse) throws PortletException, IOException {
+        SystemLog log = PortletManager.getCurrentSystemLog(actionRequest);
+
+        String action = actionRequest.getParameter("action");
+        String logLevel = actionRequest.getParameter("logLevel");
+        String configFile = actionRequest.getParameter("configFile");
+        String configuration = actionRequest.getParameter("append");
+        String refreshPeriod = actionRequest.getParameter("refreshPeriod");
+        String currentLevel = log.getRootLoggerLevel();
+
+        if ("update".equals(action)) {
+            if (refreshPeriod != null) {
+                int refreshPeriodInt = Integer.parseInt(refreshPeriod);
+                if (refreshPeriodInt != log.getRefreshPeriodSeconds()) {
+                    log.setRefreshPeriodSeconds(refreshPeriodInt);
+                }
+            }
+            if (!log.getConfigFileName().equals(configFile)) {
+                log.setConfigFileName(configFile);
+            }
+            if (!currentLevel.equals(logLevel)) {
+                log.setRootLoggerLevel(logLevel);
+            }
+        }
+    }
+}
\ No newline at end of file

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogManagerPortlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogManagerPortlet.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogManagerPortlet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogViewerPortlet.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogViewerPortlet.java?rev=393787&view=auto
==============================================================================
--- geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogViewerPortlet.java (added)
+++ geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogViewerPortlet.java Thu Apr 13 04:34:08 2006
@@ -0,0 +1,156 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  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.geronimo.console.logmanager;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.io.File;
+
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.WindowState;
+import javax.portlet.PortletSession;
+
+import org.apache.geronimo.console.BasePortlet;
+import org.apache.geronimo.console.util.PortletManager;
+import org.apache.geronimo.system.logging.SystemLog;
+
+public class LogViewerPortlet extends BasePortlet {
+    private final static String CRITERIA_KEY = "org.apache.geronimo.console.log.CRITERIA";
+
+    protected PortletRequestDispatcher searchView;
+
+    protected PortletRequestDispatcher helpView;
+
+    protected void doHelp(RenderRequest renderRequest,
+            RenderResponse renderRespose) throws PortletException, IOException {
+        helpView.include(renderRequest, renderRespose);
+    }
+
+    protected void doView(RenderRequest renderRequest,
+            RenderResponse renderRespose) throws PortletException, IOException {
+        if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
+            return;
+        }
+        String action = renderRequest.getParameter("action");
+
+        SystemLog log = PortletManager.getCurrentSystemLog(renderRequest);
+        String[] logFiles = log.getLogFileNames();
+        LogFile[] files = new LogFile[logFiles.length];
+        for (int i = 0; i < files.length; i++) {
+            files[i] = new LogFile(logFiles[i]);
+        }
+        Criteria criteria;
+        if ("refresh".equals(action)) {
+            criteria = (Criteria) renderRequest.getPortletSession(true).getAttribute(CRITERIA_KEY, PortletSession.PORTLET_SCOPE);
+        } else {
+            String startPos = renderRequest.getParameter("startPos");
+            String endPos = renderRequest.getParameter("endPos");
+            String maxRows = renderRequest.getParameter("maxRows");
+            String logLevel = renderRequest.getParameter("logLevel");
+            String searchString = renderRequest.getParameter("searchString");
+            String stackTraces = renderRequest.getParameter("stackTraces");
+            String logFile = renderRequest.getParameter("logFile");
+            if(logFile == null || logFile.equals("")) {
+                logFile = logFiles[0];
+            }
+            if(logLevel == null || logLevel.equals("")) {
+                logLevel = "WARN";
+            }
+            if(maxRows == null || maxRows.equals("")) {
+                maxRows = "10";
+            }
+            criteria = new Criteria();
+            criteria.max = Integer.parseInt(maxRows);
+            criteria.start = startPos == null || startPos.equals("") ? null : new Integer(startPos);
+            criteria.stop = endPos == null || endPos.equals("") ? null : new Integer(endPos);
+            criteria.logFile = logFile;
+            criteria.stackTraces = stackTraces != null && !stackTraces.equals("");
+            criteria.level = logLevel;
+            criteria.text = searchString == null || searchString.equals("") ? null : searchString;
+            renderRequest.getPortletSession(true).setAttribute(CRITERIA_KEY, criteria, PortletSession.PORTLET_SCOPE);
+        }
+
+        SystemLog.SearchResults results = log.getMatchingItems(criteria.logFile, criteria.start, criteria.stop,
+                        criteria.level, criteria.text, criteria.max, criteria.stackTraces);
+        renderRequest.setAttribute("searchResults", results.getResults());
+        renderRequest.setAttribute("lineCount", new Integer(results.getLineCount()));
+        renderRequest.setAttribute("startPos", criteria.start);
+        renderRequest.setAttribute("endPos", criteria.stop);
+        renderRequest.setAttribute("logLevel", criteria.level);
+        renderRequest.setAttribute("searchString", criteria.text);
+        renderRequest.setAttribute("maxRows", Integer.toString(criteria.max));
+        renderRequest.setAttribute("logFile", criteria.logFile);
+        renderRequest.setAttribute("logFiles", files);
+        if(criteria.stackTraces) {
+            renderRequest.setAttribute("stackTraces", Boolean.TRUE);
+        }
+        if(results.isCapped()) {
+            renderRequest.setAttribute("capped", Boolean.TRUE);
+        }
+
+        searchView.include(renderRequest, renderRespose);
+    }
+
+    public void init(PortletConfig portletConfig) throws PortletException {
+        PortletContext pc = portletConfig.getPortletContext();
+        searchView = pc
+                .getRequestDispatcher("/WEB-INF/view/logmanager/search.jsp");
+        helpView = pc
+                .getRequestDispatcher("/WEB-INF/view/logmanager/viewhelp.jsp");
+        super.init(portletConfig);
+    }
+
+    private static class Criteria implements Serializable {
+        int max;
+        Integer start;
+        Integer stop;
+        String text;
+        String level;
+        String logFile;
+        boolean stackTraces;
+    }
+
+    public static class LogFile {
+        private String fullName;
+        private String name;
+
+        public LogFile(String fullName) {
+            this.fullName = fullName;
+            //todo: what if portla JVM has different separator than server JVM?
+            int pos = fullName.lastIndexOf(File.separatorChar);
+            if(pos > -1) {
+                name = fullName.substring(pos+1);
+            } else {
+                name = fullName;
+            }
+        }
+
+        public String getFullName() {
+            return fullName;
+        }
+
+        public String getName() {
+            return name;
+        }
+    }
+}
\ No newline at end of file

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogViewerPortlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogViewerPortlet.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: geronimo/trunk/applications/console/console-standard/src/java/org/apache/geronimo/console/logmanager/LogViewerPortlet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain