001    /**
002     *  Licensed to the Apache Software Foundation (ASF) under one or more
003     *  contributor license agreements.  See the NOTICE file distributed with
004     *  this work for additional information regarding copyright ownership.
005     *  The ASF licenses this file to You under the Apache License, Version 2.0
006     *  (the "License"); you may not use this file except in compliance with
007     *  the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     */
017    package org.apache.geronimo.console.configcreator;
018    
019    import java.util.ArrayList;
020    import java.util.Iterator;
021    import java.util.List;
022    import java.util.SortedSet;
023    
024    import javax.management.MalformedObjectNameException;
025    import javax.management.ObjectName;
026    import javax.portlet.PortletRequest;
027    
028    import org.apache.geronimo.console.util.PortletManager;
029    import org.apache.geronimo.gbean.AbstractName;
030    import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
031    import org.apache.geronimo.kernel.repository.ListableRepository;
032    import org.apache.geronimo.management.EJBModule;
033    import org.apache.geronimo.management.J2EEResource;
034    import org.apache.geronimo.management.geronimo.JCAAdminObject;
035    import org.apache.geronimo.management.geronimo.JCAManagedConnectionFactory;
036    import org.apache.geronimo.management.geronimo.ResourceAdapterModule;
037    import org.apache.geronimo.management.geronimo.SecurityRealm;
038    
039    /**
040     * Util class for JSR-77 related functions
041     * 
042     * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
043     */
044    public class JSR77_Util {
045    
046        public static class ReferredData {
047            private String displayName;
048    
049            private String patternName;
050    
051            public ReferredData(String displayName, String patternName) {
052                this.displayName = displayName;
053                this.patternName = patternName;
054            }
055    
056            public String getDisplayName() {
057                return displayName;
058            }
059    
060            public void setDisplayName(String displayName) {
061                this.displayName = displayName;
062            }
063    
064            public String getPatternName() {
065                return patternName;
066            }
067    
068            public void setPatternName(String patternName) {
069                this.patternName = patternName;
070            }
071        }
072    
073        protected static List getDeployedEJBs(PortletRequest request) {
074            List ejbList = new ArrayList();
075            EJBModule[] ejbModules = PortletManager.getManagementHelper(request).getEJBModules(
076                    PortletManager.getCurrentServer(request));
077            for (int i = 0; ejbModules != null && i < ejbModules.length; i++) {
078                String[] ejbObjectNames = ejbModules[i].getEjbs();
079                for (int j = 0; j < ejbObjectNames.length; j++) {
080                    try {
081                        ObjectName objectName = ObjectName.getInstance(ejbObjectNames[j]);
082                        String ejbName = objectName.getKeyProperty(NameFactory.J2EE_NAME);
083                        String configurationName;
084                        if ("null".equalsIgnoreCase(objectName.getKeyProperty(NameFactory.J2EE_APPLICATION))) {
085                            configurationName = objectName.getKeyProperty(NameFactory.EJB_MODULE) + "/";
086                        } else {
087                            configurationName = objectName.getKeyProperty(NameFactory.J2EE_APPLICATION) + "/"
088                                    + objectName.getKeyProperty(NameFactory.EJB_MODULE);
089                        }
090                        ReferredData data = new ReferredData(ejbName + " (" + configurationName + ")",
091                                configurationName + "/" + ejbName);
092                        ejbList.add(data);
093                    } catch (MalformedObjectNameException e) {
094                        // log.error(e.getMessage(), e);
095                        e.printStackTrace();
096                    } catch (NullPointerException e) {
097                        // log.error(e.getMessage(), e);
098                        e.printStackTrace();
099                    }
100                }
101            }
102            return ejbList;
103        }
104    
105        protected static List getJMSConnectionFactories(PortletRequest request) {
106            // TODO this is a duplicate of the code from
107            // org.apache.geronimo.console.jmsmanager.wizard.ListScreenHandler.populateExistingList()
108            // TODO need to eliminate this duplicate code probably by putting it in a common place
109            List connectionFactories = new ArrayList();
110    
111            // Get the list of connection factories
112            ResourceAdapterModule[] modules = PortletManager.getOutboundRAModules(request, new String[] {
113                    "javax.jms.ConnectionFactory", "javax.jms.QueueConnectionFactory",
114                    "javax.jms.TopicConnectionFactory", });
115            try {
116                for (int i = 0; i < modules.length; i++) {
117                    ResourceAdapterModule module = modules[i];
118                    String configurationName = PortletManager.getConfigurationFor(request,
119                            PortletManager.getNameFor(request, module)).toString()
120                            + "/";
121    
122                    JCAManagedConnectionFactory[] factories = PortletManager.getOutboundFactoriesForRA(request,
123                            module, new String[] { "javax.jms.ConnectionFactory", "javax.jms.QueueConnectionFactory",
124                                    "javax.jms.TopicConnectionFactory", });
125                    for (int j = 0; j < factories.length; j++) {
126                        JCAManagedConnectionFactory factory = factories[j];
127                        String factoryName = ObjectName.getInstance(factory.getObjectName()).getKeyProperty(
128                                NameFactory.J2EE_NAME);
129                        ReferredData data = new ReferredData(factoryName + " (" + configurationName + ")",
130                                configurationName + "/" + factoryName);
131                        connectionFactories.add(data);
132                    }
133                }
134            } catch (MalformedObjectNameException e) {
135                // log.error(e.getMessage(), e);
136            }
137            return connectionFactories;
138        }
139    
140        protected static List getJMSDestinations(PortletRequest request) {
141            // TODO this is a duplicate of the code from
142            // org.apache.geronimo.console.jmsmanager.wizard.ListScreenHandler.populateExistingList()
143            // TODO need to eliminate this duplicate code probably by putting it in a common place
144            List jmsDestinations = new ArrayList();
145    
146            // Get the list of connection factories
147            ResourceAdapterModule[] modules = PortletManager.getOutboundRAModules(request, new String[] {
148                    "javax.jms.ConnectionFactory", "javax.jms.QueueConnectionFactory",
149                    "javax.jms.TopicConnectionFactory", });
150            try {
151                for (int i = 0; i < modules.length; i++) {
152                    ResourceAdapterModule module = modules[i];
153                    String configurationName = PortletManager.getConfigurationFor(request,
154                            PortletManager.getNameFor(request, module)).toString()
155                            + "/";
156    
157                    JCAAdminObject[] admins = PortletManager.getAdminObjectsForRA(request, module, new String[] {
158                            "javax.jms.Queue", "javax.jms.Topic" });
159                    for (int j = 0; j < admins.length; j++) {
160                        JCAAdminObject admin = admins[j];
161                        String destinationName = ObjectName.getInstance(admin.getObjectName()).getKeyProperty(
162                                NameFactory.J2EE_NAME);
163                        ReferredData data = new ReferredData(destinationName + " (" + configurationName + ")",
164                                configurationName + "/" + destinationName);
165                        jmsDestinations.add(data);
166                    }
167                }
168            } catch (MalformedObjectNameException e) {
169                // log.error(e.getMessage(), e);
170            }
171            return jmsDestinations;
172        }
173    
174        protected static List getJDBCConnectionPools(PortletRequest request) {
175            // TODO this is a duplicate of the code from
176            // org.apache.geronimo.console.databasemanager.wizard.DatabasePoolPortlet.populatePoolList()
177            // TODO need to eliminate this duplicate code probably by putting it in a common place
178            List list = new ArrayList();
179            ResourceAdapterModule[] modules = PortletManager.getOutboundRAModules(request, "javax.sql.DataSource");
180            for (int i = 0; i < modules.length; i++) {
181                ResourceAdapterModule module = modules[i];
182                JCAManagedConnectionFactory[] databases = PortletManager.getOutboundFactoriesForRA(request, module,
183                        "javax.sql.DataSource");
184                for (int j = 0; j < databases.length; j++) {
185                    JCAManagedConnectionFactory db = databases[j];
186                    AbstractName dbName = PortletManager.getManagementHelper(request).getNameFor(db);
187                    String poolName = (String) dbName.getName().get(NameFactory.J2EE_NAME);
188                    String configurationName = dbName.getArtifact().toString() + "/";
189                    ReferredData data = new ReferredData(poolName + " (" + configurationName + ")", 
190                            configurationName + "/" + poolName);
191                    list.add(data);
192                }
193            }
194            return list;
195        }
196    
197        protected static List getJavaMailSessions(PortletRequest request) {
198            List mailSessionList = new ArrayList();
199            J2EEResource[] j2eeResources = PortletManager.getManagementHelper(request).getResources(
200                    PortletManager.getCurrentServer(request));
201            for (int i = 0; i < j2eeResources.length; i++) {
202                try {
203                    ObjectName objectName = ObjectName.getInstance(j2eeResources[i].getObjectName());
204                    if (NameFactory.JAVA_MAIL_RESOURCE.equals(objectName.getKeyProperty(NameFactory.J2EE_TYPE))) {
205                        String mailSesssionName = objectName.getKeyProperty(NameFactory.J2EE_NAME);
206                        String configurationName = objectName.getKeyProperty(NameFactory.SERVICE_MODULE) + "/";
207                        ReferredData data = new ReferredData(mailSesssionName + " (" + configurationName + ")",
208                                configurationName + "/" + mailSesssionName);
209                        mailSessionList.add(data);
210                    }
211                } catch (MalformedObjectNameException e) {
212                    // log.error(e.getMessage(), e);
213                    e.printStackTrace();
214                } catch (NullPointerException e) {
215                    // log.error(e.getMessage(), e);
216                    e.printStackTrace();
217                }
218            }
219            return mailSessionList;
220        }
221    
222        protected static List getDeployedCredentialStores(PortletRequest request) {
223            List credentialStoreList = new ArrayList();
224            Object[] objects = PortletManager.getGBeansImplementing(request,
225                    org.apache.geronimo.security.credentialstore.CredentialStore.class);
226            for (int i = 0; i < objects.length; i++) {
227                ObjectName objectName = PortletManager.getNameFor(request, objects[i]).getObjectName();
228                String credentialStoreName = objectName.getKeyProperty(NameFactory.J2EE_NAME);
229                String configurationName = objectName.getKeyProperty(NameFactory.SERVICE_MODULE) + "/";
230                ReferredData data = new ReferredData(credentialStoreName + " (" + configurationName + ")",
231                        configurationName + "/" + credentialStoreName);
232                credentialStoreList.add(data);
233            }
234            return credentialStoreList;
235        }
236    
237        protected static List getCommonLibs(PortletRequest request) {
238            // TODO this is a duplicate of the code from
239            // org.apache.geronimo.console.repository.RepositoryViewPortlet.doView()
240            // TODO need to eliminate this duplicate code probably by putting it in a common place
241            List list = new ArrayList();
242            ListableRepository[] repos = PortletManager.getCurrentServer(request).getRepositories();
243            for (int i = 0; i < repos.length; i++) {
244                ListableRepository repo = repos[i];
245                final SortedSet artifacts = repo.list();
246                for (Iterator iterator = artifacts.iterator(); iterator.hasNext();) {
247                    String fileName = iterator.next().toString();
248                    list.add(fileName);
249                }
250            }
251            return list;
252        }
253    
254        public static SecurityRealm[] getDeployedSecurityRealms(PortletRequest request) {
255            return PortletManager.getCurrentServer(request).getSecurityRealms();
256        }
257    }