001    /*
002     * Copyright 2007 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.ksb.messaging.resourceloader;
017    
018    import javax.xml.namespace.QName;
019    
020    import org.kuali.rice.core.config.Config;
021    import org.kuali.rice.core.config.ConfigContext;
022    import org.kuali.rice.core.config.ConfigurationException;
023    import org.kuali.rice.core.resourceloader.BaseResourceLoader;
024    import org.kuali.rice.core.resourceloader.GlobalResourceLoader;
025    import org.kuali.rice.core.resourceloader.ResourceLoader;
026    import org.kuali.rice.core.resourceloader.SpringResourceLoader;
027    import org.kuali.rice.ksb.messaging.RemoteResourceServiceLocator;
028    import org.kuali.rice.ksb.messaging.RemoteResourceServiceLocatorImpl;
029    
030    
031    
032    /**
033     * Creates KSBs root resource loader with all the correct children attached ready for starting.
034     * Uses config object to store QNames so everything is good with the current context classloader.
035     *
036     * Can grab any KSB specific resource loader from the resource loading stack.
037     *
038     *
039     * @author Kuali Rice Team (rice.collab@kuali.org)
040     *
041     */
042    public class KSBResourceLoaderFactory {
043    
044            private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger
045                            .getLogger(KSBResourceLoaderFactory.class);
046            
047            private static final String KSB_ROOT_RESOURCE_LOACER_NAME = "KSB_ROOT_RESOURCE_LOADER";
048            private static final String KSB_REMOTE_RESOURCE_LOADER_LOCAL_NAME = "KSB_REMOTE_RESOURCE_LOADER";
049    
050            private static void initialize() {
051                    Config config = ConfigContext.getCurrentContextConfig();
052                    if (config.getServiceNamespace() == null) {
053                            throw new ConfigurationException("No service namespace available at this time");
054                    }
055                    if (getRootResourceLoaderName() == null) {
056                            setRootResourceLoaderName(new QName(ConfigContext.getCurrentContextConfig().getServiceNamespace(), KSB_ROOT_RESOURCE_LOACER_NAME));
057                    }
058                    if (getRemoteResourceLoaderName() == null) {
059                            setRemoteResourceLoaderName(new QName(ConfigContext.getCurrentContextConfig().getServiceNamespace(), KSB_REMOTE_RESOURCE_LOADER_LOCAL_NAME));
060                    }
061            }
062    
063            public static ResourceLoader createRootKSBRemoteResourceLoader() {
064                    initialize();
065                    ResourceLoader rootResourceLoader = new BaseResourceLoader(getRootResourceLoaderName());
066                    rootResourceLoader.addResourceLoader(new RemoteResourceServiceLocatorImpl(getRemoteResourceLoaderName()));
067                    return rootResourceLoader;
068            }
069    
070            public static ResourceLoader createThinClientKSBResourceLoader() {
071                    ResourceLoader resourceLoader = new SpringResourceLoader(new QName("", "KSB_THIN_CLIENT_RESOURCE_LOADER"), "classpath:org/kuali/rice/ksb/config/KSBThinClientSpringBeans.xml");
072                    GlobalResourceLoader.addResourceLoader(resourceLoader);
073                    return resourceLoader;
074            }
075    
076            public static BaseResourceLoader getRootResourceLoader() {
077                    return (BaseResourceLoader)GlobalResourceLoader.getResourceLoader(getRootResourceLoaderName());
078            }
079    
080            public static RemoteResourceServiceLocator getRemoteResourceLocator() {
081                    return (RemoteResourceServiceLocator)GlobalResourceLoader.getResourceLoader(getRemoteResourceLoaderName());
082            }
083    
084            public static QName getRootResourceLoaderName() {
085                    return (QName)ConfigContext.getCurrentContextConfig().getObject(KSB_ROOT_RESOURCE_LOACER_NAME);
086            }
087    
088            public static void setRootResourceLoaderName(QName name) {
089                    ConfigContext.getCurrentContextConfig().putObject(KSB_ROOT_RESOURCE_LOACER_NAME, name);
090            }
091    
092            public static QName getRemoteResourceLoaderName() {
093                    return (QName)ConfigContext.getCurrentContextConfig().getObject(KSB_REMOTE_RESOURCE_LOADER_LOCAL_NAME);
094            }
095    
096            public static void setRemoteResourceLoaderName(QName remoteResourceLoaderName) {
097                    ConfigContext.getCurrentContextConfig().putObject(KSB_REMOTE_RESOURCE_LOADER_LOCAL_NAME, remoteResourceLoaderName);
098            }
099    
100    }