KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > geronimo > console > jmsmanager > wizard > ListScreenHandler


1 /**
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17 package org.apache.geronimo.console.jmsmanager.wizard;
18
19 import java.io.IOException JavaDoc;
20 import java.io.Serializable JavaDoc;
21 import java.util.ArrayList JavaDoc;
22 import java.util.Collections JavaDoc;
23 import java.util.List JavaDoc;
24 import javax.management.MalformedObjectNameException JavaDoc;
25 import javax.management.ObjectName JavaDoc;
26 import javax.portlet.ActionRequest;
27 import javax.portlet.ActionResponse;
28 import javax.portlet.PortletException;
29 import javax.portlet.PortletRequest;
30 import javax.portlet.RenderRequest;
31 import javax.portlet.RenderResponse;
32
33 import org.apache.geronimo.console.MultiPageModel;
34 import org.apache.geronimo.console.util.PortletManager;
35 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
36 import org.apache.geronimo.kernel.management.State;
37 import org.apache.geronimo.kernel.proxy.GeronimoManagedBean;
38 import org.apache.geronimo.management.geronimo.JCAAdminObject;
39 import org.apache.geronimo.management.geronimo.JCAManagedConnectionFactory;
40 import org.apache.geronimo.management.geronimo.JCAResource;
41 import org.apache.geronimo.management.geronimo.ResourceAdapter;
42 import org.apache.geronimo.management.geronimo.ResourceAdapterModule;
43 import org.apache.commons.logging.Log;
44 import org.apache.commons.logging.LogFactory;
45
46 /**
47  * A handles for the front page that lists available resources.
48  *
49  * @version $Rev: 476061 $ $Date: 2006-11-17 01:36:50 -0500 (Fri, 17 Nov 2006) $
50  */

51 public class ListScreenHandler extends AbstractHandler {
52     private static final Log log = LogFactory.getLog(ListScreenHandler.class);
53
54     public ListScreenHandler() {
55         super(LIST_MODE, "/WEB-INF/view/jmswizard/list.jsp");
56     }
57
58     public String JavaDoc actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException JavaDoc {
59         return getMode();
60     }
61
62     public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException JavaDoc {
63         populateExistingList(request);
64     }
65
66     public String JavaDoc actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException JavaDoc {
67         JMSResourceData data = (JMSResourceData) model;
68         String JavaDoc provider = request.getParameter(PROVIDER_PARAMETER);
69         if (isEmpty(provider)) {
70             return SELECT_PROVIDER_MODE + BEFORE_ACTION;
71         }
72         JMSProviderData providerData = JMSProviderData.getProviderByName(provider);
73         data.setRarURI(providerData.getRaURI());
74         data.setDependency(providerData.getDependency());
75         return CONFIGURE_RA_MODE + BEFORE_ACTION;
76     }
77
78
79     private void populateExistingList(PortletRequest renderRequest) {
80         // Prepare a list of JMS configurations
81
List JavaDoc resources = new ArrayList JavaDoc();
82
83         // Get the list of connection factories
84
ResourceAdapterModule[] modules = PortletManager.getOutboundRAModules(renderRequest, new String JavaDoc[]{
85                 "javax.jms.ConnectionFactory", "javax.jms.QueueConnectionFactory", "javax.jms.TopicConnectionFactory",});
86         try {
87             for (int i = 0; i < modules.length; i++) {
88                 ResourceAdapterModule module = modules[i];
89
90                 JMSResourceSummary target = null;
91                 for (int j = 0; j < resources.size(); j++) {
92                     JMSResourceSummary data = (JMSResourceSummary) resources.get(j);
93                     if (data.adapterObjectName.equals(module.getObjectName())) {
94                         target = data;
95                         break;
96                     }
97                 }
98                 if (target == null) {
99                     ResourceAdapter[] adapters = PortletManager.getResourceAdapters(renderRequest, module);
100                     String JavaDoc name = null;
101                     if (adapters.length == 1 && adapters[0].getJCAResources().length == 1) {
102                         JCAResource[] resource = PortletManager.getJCAResources(renderRequest, adapters[0]);
103                         if (resource.length == 1 && resource[0].getResourceAdapterInstances().length == 1) {
104                             name = ObjectName.getInstance(resource[0].getResourceAdapterInstanceNames()[0]).getKeyProperty(NameFactory.J2EE_NAME);
105                         }
106                     }
107                     if (name == null) {
108                         name = ObjectName.getInstance(module.getObjectName()).getKeyProperty(NameFactory.J2EE_NAME);
109                     }
110                     target = new JMSResourceSummary(PortletManager.getConfigurationFor(renderRequest, PortletManager.getNameFor(renderRequest, module)).toString(),
111                             module.getObjectName(), name, ((GeronimoManagedBean) module).getState());
112                     resources.add(target);
113                 }
114
115                 JCAManagedConnectionFactory[] factories = PortletManager.getOutboundFactoriesForRA(renderRequest, module, new String JavaDoc[]{
116                         "javax.jms.ConnectionFactory", "javax.jms.QueueConnectionFactory", "javax.jms.TopicConnectionFactory",});
117                 for (int j = 0; j < factories.length; j++) {
118                     JCAManagedConnectionFactory factory = factories[j];
119                     ObjectName JavaDoc name = ObjectName.getInstance(factory.getObjectName());
120                     target.getConnectionFactories().add(new ConnectionFactorySummary(factory.getObjectName(), name.getKeyProperty(NameFactory.J2EE_NAME),
121                             ((GeronimoManagedBean) factory).getState()));
122                 }
123             }
124
125             // Get the list of admin objects
126
modules = PortletManager.getAdminObjectModules(renderRequest, new String JavaDoc[]{"javax.jms.Queue", "javax.jms.Topic"});
127             for (int i = 0; i < modules.length; i++) {
128                 ResourceAdapterModule module = modules[i];
129
130                 JMSResourceSummary target = null;
131                 for (int j = 0; j < resources.size(); j++) {
132                     JMSResourceSummary data = (JMSResourceSummary) resources.get(j);
133                     if (data.adapterObjectName.equals(module.getObjectName())) {
134                         target = data;
135                         break;
136                     }
137                 }
138                 if (target == null) {
139                     ResourceAdapter[] adapters = PortletManager.getResourceAdapters(renderRequest, module);
140                     String JavaDoc name = null;
141                     if (adapters.length == 1 && adapters[0].getJCAResources().length == 1) {
142                         JCAResource[] resource = PortletManager.getJCAResources(renderRequest, adapters[0]);
143                         if (resource.length == 1 && resource[0].getResourceAdapterInstances().length == 1) {
144                             name = ObjectName.getInstance(resource[0].getResourceAdapterInstanceNames()[0]).getKeyProperty(NameFactory.J2EE_NAME);
145                         }
146                     }
147                     if (name == null) {
148                         name = ObjectName.getInstance(module.getObjectName()).getKeyProperty(NameFactory.J2EE_NAME);
149                     }
150                     target = new JMSResourceSummary(PortletManager.getConfigurationFor(renderRequest, PortletManager.getNameFor(renderRequest, module)).toString(),
151                             module.getObjectName(), name, ((GeronimoManagedBean) module).getState());
152                     resources.add(target);
153                 }
154
155                 JCAAdminObject[] admins = PortletManager.getAdminObjectsForRA(renderRequest, module, new String JavaDoc[]{"javax.jms.Queue", "javax.jms.Topic"});
156                 for (int j = 0; j < admins.length; j++) {
157                     GeronimoManagedBean bean = (GeronimoManagedBean) admins[j];
158                     ObjectName JavaDoc name = ObjectName.getInstance(bean.getObjectName());
159                     target.getAdminObjects().add(new AdminObjectSummary(bean.getObjectName(), name.getKeyProperty(NameFactory.J2EE_NAME),
160                             admins[j].getAdminObjectInterface().indexOf("Queue") > -1 ? "Queue" : "Topic",
161                             bean.getState()));
162                 }
163             }
164         } catch (MalformedObjectNameException JavaDoc e) {
165             log.error(e.getMessage(), e);
166         }
167
168         Collections.sort(resources);
169         renderRequest.setAttribute("resources", resources);
170         // Get the list of JMS providers
171
renderRequest.setAttribute("providers", JMSProviderData.getAllProviders());
172     }
173
174
175     public static class JMSResourceSummary implements Serializable JavaDoc, Comparable JavaDoc {
176         private static final long serialVersionUID = -2788803234448047035L;
177         private final String JavaDoc configurationName;
178         private final String JavaDoc adapterObjectName;
179         private final String JavaDoc name;
180         private final String JavaDoc parentName;
181         private final int state;
182         private final List JavaDoc connectionFactories = new ArrayList JavaDoc();
183         private final List JavaDoc adminObjects = new ArrayList JavaDoc();
184
185         public JMSResourceSummary(String JavaDoc configurationName, String JavaDoc adapterObjectName, String JavaDoc name, int state) {
186             this.configurationName = configurationName;
187             this.adapterObjectName = adapterObjectName;
188             this.state = state;
189             try {
190                 ObjectName JavaDoc objectName = ObjectName.getInstance(adapterObjectName);
191                 String JavaDoc parent = objectName.getKeyProperty(NameFactory.J2EE_APPLICATION);
192                 if (parent != null && parent.equals("null")) {
193                     parent = null;
194                 }
195                 parentName = parent;
196                 this.name = name;
197             } catch (MalformedObjectNameException JavaDoc e) {
198                 throw new RuntimeException JavaDoc("Can't parse ObjectName", e);
199             }
200         }
201
202         public String JavaDoc getConfigurationName() {
203             return configurationName;
204         }
205
206         public String JavaDoc getAdapterObjectName() {
207             return adapterObjectName;
208         }
209
210         public String JavaDoc getName() {
211             return name;
212         }
213
214         public String JavaDoc getParentName() {
215             return parentName;
216         }
217
218         public int getState() {
219             return state;
220         }
221
222         public List JavaDoc getConnectionFactories() {
223             return connectionFactories;
224         }
225
226         public List JavaDoc getAdminObjects() {
227             return adminObjects;
228         }
229
230         public String JavaDoc getStateName() {
231             return State.toString(state);
232         }
233
234         public int compareTo(Object JavaDoc o) {
235             final JMSResourceSummary pool = (JMSResourceSummary) o;
236             int names = name.toLowerCase().compareTo(pool.name.toLowerCase());
237             if (parentName == null) {
238                 if (pool.parentName == null) {
239                     return names;
240                 } else {
241                     return -1;
242                 }
243             } else {
244                 if (pool.parentName == null) {
245                     return 1;
246                 } else {
247                     int test = parentName.compareTo(pool.parentName);
248                     if (test != 0) {
249                         return test;
250                     } else {
251                         return names;
252                     }
253                 }
254             }
255         }
256     }
257
258     public static class ConnectionFactorySummary implements Serializable JavaDoc, Comparable JavaDoc {
259         private static final long serialVersionUID = 5777507920880039759L;
260         private final String JavaDoc factoryObjectName;
261         private final String JavaDoc name;
262         private final int state;
263
264         public ConnectionFactorySummary(String JavaDoc factoryObjectName, String JavaDoc name, int state) {
265             this.factoryObjectName = factoryObjectName;
266             this.name = name;
267             this.state = state;
268         }
269
270         public String JavaDoc getFactoryObjectName() {
271             return factoryObjectName;
272         }
273
274         public String JavaDoc getName() {
275             return name;
276         }
277
278         public int getState() {
279             return state;
280         }
281
282         public String JavaDoc getStateName() {
283             return State.toString(state);
284         }
285
286         public int compareTo(Object JavaDoc o) {
287             final ConnectionFactorySummary pool = (ConnectionFactorySummary) o;
288             return name.compareTo(pool.name);
289         }
290     }
291
292
293     public static class AdminObjectSummary implements Serializable JavaDoc, Comparable JavaDoc {
294         private static final long serialVersionUID = 3941332145785485903L;
295         private final String JavaDoc adminObjectName;
296         private final String JavaDoc name;
297         private final String JavaDoc type;
298         private final int state;
299
300         public AdminObjectSummary(String JavaDoc adminObjectName, String JavaDoc name, String JavaDoc type, int state) {
301             this.adminObjectName = adminObjectName;
302             this.name = name;
303             this.type = type;
304             this.state = state;
305         }
306
307         public String JavaDoc getAdminObjectName() {
308             return adminObjectName;
309         }
310
311         public String JavaDoc getName() {
312             return name;
313         }
314
315         public String JavaDoc getType() {
316             return type;
317         }
318
319         public int getState() {
320             return state;
321         }
322
323         public String JavaDoc getStateName() {
324             return State.toString(state);
325         }
326
327         public int compareTo(Object JavaDoc o) {
328             final AdminObjectSummary pool = (AdminObjectSummary) o;
329             int result = name.compareTo(pool.name);
330             return result == 0 ? type.compareTo(pool.type) : result;
331         }
332     }
333 }
334
Popular Tags