001    /**
002     *
003     *  Licensed to the Apache Software Foundation (ASF) under one or more
004     *  contributor license agreements.  See the NOTICE file distributed with
005     *  this work for additional information regarding copyright ownership.
006     *  The ASF licenses this file to You under the Apache License, Version 2.0
007     *  (the "License"); you may not use this file except in compliance with
008     *  the License.  You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     *  Unless required by applicable law or agreed to in writing, software
013     *  distributed under the License is distributed on an "AS IS" BASIS,
014     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     *  See the License for the specific language governing permissions and
016     *  limitations under the License.
017     */
018    package org.apache.geronimo.connector;
019    
020    import org.apache.geronimo.management.geronimo.JCAResource;
021    import org.apache.geronimo.management.geronimo.JCAResourceAdapter;
022    import org.apache.geronimo.management.geronimo.JCAConnectionFactory;
023    import org.apache.geronimo.management.geronimo.JCAManagedConnectionFactory;
024    import org.apache.geronimo.management.geronimo.JCAAdminObject;
025    import org.apache.geronimo.j2ee.management.impl.Util;
026    
027    import java.util.Collection;
028    import java.util.ArrayList;
029    import java.util.Iterator;
030    import java.util.Set;
031    import java.util.HashSet;
032    import java.util.Arrays;
033    import java.util.List;
034    
035    /**
036     * @version $Rev: 470597 $ $Date: 2006-11-02 15:30:55 -0800 (Thu, 02 Nov 2006) $
037     */
038    public class JCAResourceImpl implements JCAResource  {
039        private final String objectName;
040    
041        private final Collection connectionFactories;
042        private final Collection resourceAdapters;
043        private final Collection adminObjects;
044    
045        public JCAResourceImpl(String objectName, Collection connectionFactories, Collection resourceAdapters, Collection adminObjects) {
046            this.objectName = objectName;
047            this.connectionFactories = connectionFactories;
048            this.resourceAdapters = resourceAdapters;
049            this.adminObjects = adminObjects;
050        }
051    
052        public String[] getConnectionFactories() {
053            return Util.getObjectNames(getConnectionFactoryInstances());
054        }
055    
056        public String[] getResourceAdapterInstanceNames() {
057            ArrayList temp = new ArrayList();
058            for (Iterator iterator = resourceAdapters.iterator(); iterator.hasNext();) {
059                JCAResourceAdapter resourceAdapter = (JCAResourceAdapter) iterator.next();
060                temp.add(resourceAdapter.getObjectName());
061            }
062            return (String[])temp.toArray(new String[temp.size()]);
063        }
064    
065        public JCAResourceAdapter[] getResourceAdapterInstances() {
066            return (JCAResourceAdapter[])resourceAdapters.toArray(new JCAResourceAdapter[resourceAdapters.size()]);
067        }
068    
069        public JCAConnectionFactory[] getConnectionFactoryInstances() {
070            return (JCAConnectionFactory[])connectionFactories.toArray(new JCAConnectionFactory[connectionFactories.size()]);
071        }
072    
073        public JCAManagedConnectionFactory[] getOutboundFactories() {
074            return getOutboundFactories((String[]) null);
075        }
076    
077        public JCAManagedConnectionFactory[] getOutboundFactories(String connectionFactoryInterface) {
078            return getOutboundFactories(new String[]{connectionFactoryInterface});
079        }
080    
081        public JCAManagedConnectionFactory[] getOutboundFactories(String[] connectionFactoryInterfaces) {
082            Set interfaceFilter = null;
083            if (connectionFactoryInterfaces != null) {
084                interfaceFilter = new HashSet(Arrays.asList(connectionFactoryInterfaces));
085            }
086    
087            List list = new ArrayList();
088            for (Iterator iterator = connectionFactories.iterator(); iterator.hasNext();) {
089                JCAConnectionFactory jcaConnectionFactory = (JCAConnectionFactory) iterator.next();
090                JCAManagedConnectionFactory mcf = jcaConnectionFactory.getManagedConnectionFactoryInstance();
091                if (interfaceFilter == null || interfaceFilter.contains(mcf.getConnectionFactoryInterface())) {
092                    list.add(mcf);
093                    continue;
094                }
095                for (int m = 0; m < mcf.getImplementedInterfaces().length; m++) {
096                    String iface = mcf.getImplementedInterfaces()[m];
097                    if (interfaceFilter == null || interfaceFilter.contains(iface)) {
098                        list.add(mcf);
099                        break;
100                    }
101                }
102            }
103            return (JCAManagedConnectionFactory[]) list.toArray(new JCAManagedConnectionFactory[list.size()]);
104        }
105    
106        public String[] getAdminObjects() {
107            return Util.getObjectNames(getAdminObjectInstances());
108        }
109    
110        public JCAAdminObject[] getAdminObjectInstances() {
111            return (JCAAdminObject[]) adminObjects.toArray(new JCAAdminObject[adminObjects.size()]);
112        }
113    
114        public JCAAdminObject[] getAdminObjectInstances(String adminObjectInterface) {
115            return getAdminObjectInstances(new String[] {adminObjectInterface});
116        }
117    
118        public JCAAdminObject[] getAdminObjectInstances(String[] adminObjectInterfaces) {
119            Set interfaceFilter = null;
120            if (adminObjectInterfaces != null) {
121                interfaceFilter = new HashSet(Arrays.asList(adminObjectInterfaces));
122            }
123    
124            List list = new ArrayList();
125    
126            for (Iterator iterator = adminObjects.iterator(); iterator.hasNext();) {
127                JCAAdminObject adminObject = (JCAAdminObject) iterator.next();
128                if (interfaceFilter == null || interfaceFilter.contains(adminObject.getAdminObjectInterface())) {
129                    list.add(adminObject);
130                }
131            }
132    
133            return (JCAAdminObject[]) list.toArray(new JCAAdminObject[list.size()]);
134        }
135    
136    
137        public String getObjectName() {
138            return objectName;
139        }
140    
141        public boolean isStateManageable() {
142            return false;
143        }
144    
145        public boolean isStatisticsProvider() {
146            return false;
147        }
148    
149        public boolean isEventProvider() {
150            return false;
151        }
152    }