001    package org.apache.fulcrum.intake;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *   http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import java.beans.IntrospectionException;
023    import java.lang.reflect.Method;
024    
025    import org.apache.fulcrum.intake.model.Group;
026    
027    /**
028     * This is a Facade class for IntakeService.
029     * 
030     * This class provides static methods that call related methods of the
031     * implementation of the IntakeService used by the System, according to the
032     * settings in your intake.xml file.
033     * 
034     * Note: How should a facade class work? It seems to me that maybe it should
035     * only have a hook into the Avalon Component Manager somehow?
036     * 
037     * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
038     * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
039     * @version $Id: IntakeServiceFacade.java 832048 2009-11-02 18:55:08Z tv $
040     */
041    public class IntakeServiceFacade
042    {
043        /** Static instance of the intakeService. */
044    
045        private static IntakeService intakeService;
046    
047        /**
048         * Return whether the intake service has been initialized.
049         * @return true if the service has been initialzed
050         */
051        public static boolean isInitialized()
052        {
053            return (!(intakeService == null));
054        }
055    
056        /**
057         * Gets an instance of a named group either from the pool or by calling the
058         * Factory Service if the pool is empty.
059         * 
060         * @param groupName
061         *            the name of the group.
062         * @return a Group instance.
063         * @throws IntakeException
064         *             if recycling fails.
065         */
066        public static Group getGroup(String groupName) throws IntakeException
067        {
068            if (groupName == null)
069            {
070                throw new IntakeException("IntakeServiceFacade.getGroup(groupName) is null");
071            }
072            return getService().getGroup(groupName);
073        }
074    
075        /**
076         * Puts a group back to the pool.
077         * 
078         * @param instance
079         *            the object instance to recycle.
080         * @throws IntakeException
081         *             A non existant group was passed
082         */
083        public static void releaseGroup(Group instance) throws IntakeException
084        {
085            getService().releaseGroup(instance);
086        }
087    
088        /**
089         * Gets the current size of the pool for a named group.
090         * 
091         * @param groupName
092         *            the name of the group.
093         * @return the current pool size
094         * @throws IntakeException
095         *             A non existant group was passed
096         */
097        public static int getSize(String groupName) throws IntakeException
098        {
099            return getService().getSize(groupName);
100        }
101    
102        /**
103         * Names of all the defined groups.
104         * 
105         * @return array of names.
106         */
107        public static String[] getGroupNames()
108        {
109            return getService().getGroupNames();
110        }
111    
112        /**
113         * Gets the key (usually a short identifier) for a group.
114         * 
115         * @param groupName
116         *            the name of the group.
117         * @return the the key.
118         */
119        public static String getGroupKey(String groupName)
120        {
121            return getService().getGroupKey(groupName);
122        }
123    
124        /**
125         * Gets the group name given its key.
126         * 
127         * @param groupKey
128         *            the key.
129         * @return groupName the name of the group.
130         */
131        public static String getGroupName(String groupKey)
132        {
133            return getService().getGroupName(groupKey);
134        }
135    
136        /**
137         * Gets the Method that can be used to set a property.
138         * 
139         * @param className
140         *            the name of the object.
141         * @param propName
142         *            the name of the property.
143         * @return the setter.
144         * @throws ClassNotFoundException
145         * @throws IntrospectionException
146         */
147        public static Method getFieldSetter(String className, String propName) throws IntrospectionException, ClassNotFoundException
148        {
149            return getService().getFieldSetter(className, propName);
150        }
151    
152        /**
153         * Gets the Method that can be used to get a property value.
154         * 
155         * @param className
156         *            the name of the object.
157         * @param propName
158         *            the name of the property.
159         * @return the getter.
160         * @throws ClassNotFoundException
161         * @throws IntrospectionException
162         */
163        public static Method getFieldGetter(String className, String propName) throws IntrospectionException, ClassNotFoundException
164        {
165            return getService().getFieldGetter(className, propName);
166        }
167    
168        /**
169         * Utility method for accessing the service implementation
170         * 
171         * @return a IntakeService implementation instance
172         */
173        private static IntakeService getService()
174        {
175            return intakeService;
176        }
177    
178        public static void setIntakeService(IntakeService service)
179        {
180            intakeService = service;
181        }
182    
183    }