001    /**
002     * Copyright 2005-2011 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.edl.impl.config;
017    
018    import org.apache.commons.lang.StringUtils;
019    import org.kuali.rice.core.api.config.module.RunMode;
020    import org.kuali.rice.core.api.config.property.ConfigContext;
021    import org.kuali.rice.core.api.lifecycle.Lifecycle;
022    import org.kuali.rice.core.api.resourceloader.ResourceLoader;
023    import org.kuali.rice.core.framework.persistence.jpa.OrmUtils;
024    import org.kuali.rice.core.impl.config.module.ModuleConfigurer;
025    import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
026    import org.kuali.rice.core.impl.resourceloader.RiceResourceLoaderFactory;
027    import org.kuali.rice.kew.lifecycle.EmbeddedLifeCycle;
028    import org.kuali.rice.kew.plugin.PluginRegistry;
029    import org.kuali.rice.kew.plugin.PluginRegistryFactory;
030    import org.kuali.rice.kew.resourceloader.CoreResourceLoader;
031    import org.kuali.rice.kew.api.KewApiConstants.ClientProtocol;
032    
033    import javax.sql.DataSource;
034    import java.util.ArrayList;
035    import java.util.Collection;
036    import java.util.Collections;
037    import java.util.LinkedList;
038    import java.util.List;
039    
040    
041    /**
042     * Configures the EDocLite module. 
043     *
044     * @author Kuali Rice Team (rice.collab@kuali.org)
045     */
046    public class EDLConfigurer extends ModuleConfigurer {
047    
048            public static final String KEW_DATASOURCE_OBJ = "org.kuali.workflow.datasource";
049    
050            private DataSource dataSource;
051            
052            @Override
053            public List<String> getPrimarySpringFiles() {
054                    final List<String> springFileLocations;
055    //              if (RunMode.REMOTE.equals(getRunMode()) || RunMode.THIN.equals(getRunMode()) ||
056    //                              ClientProtocol.WEBSERVICE.equals(getClientProtocol())) {
057    //                      springFileLocations = Collections.emptyList();
058    //              } else {
059                            springFileLocations = getEmbeddedSpringFileLocation();
060    //              }
061    
062                    return springFileLocations;
063            }
064            
065        private List<String> getEmbeddedSpringFileLocation(){
066            final List<String> springFileLocations = new ArrayList<String>();
067            springFileLocations.add("classpath:org/kuali/rice/edl/impl/config/EDLSpringBeans.xml");
068    
069    //        if ( isExposeServicesOnBus() ) {
070    //              if (isSetSOAPServicesAsDefault()) {
071    //                      springFileLocations.add("classpath:org/kuali/rice/kew/config/KEWServiceBusSOAPDefaultSpringBeans.xml");
072    //              } else {
073    //                      springFileLocations.add("classpath:org/kuali/rice/kew/config/KEWServiceBusSpringBeans.xml");
074    //              }
075    //        }
076            
077    //        if (OrmUtils.isJpaEnabled("rice.kew")) {
078    //              springFileLocations.add("classpath:org/kuali/rice/kew/config/KEWJPASpringBeans.xml");
079    //        }
080    //        else {
081                    springFileLocations.add("classpath:org/kuali/rice/edl/impl/config/EDLOJBSpringBeans.xml");
082    //        }
083    
084            return springFileLocations;
085        }
086    
087            @Override
088            public void addAdditonalToConfig() {
089                    configureDataSource();
090            }
091    
092            private void configureDataSource() {
093                    if (getDataSource() != null) {
094                            ConfigContext.getCurrentContextConfig().putObject(KEW_DATASOURCE_OBJ, getDataSource());
095                    }
096            }
097    
098            @Override
099            public Collection<ResourceLoader> getResourceLoadersToRegister() throws Exception {
100                    // create the plugin registry
101                    PluginRegistry registry = null;
102                    String pluginRegistryEnabled = ConfigContext.getCurrentContextConfig().getProperty("plugin.registry.enabled");
103                    if (!StringUtils.isBlank(pluginRegistryEnabled) && Boolean.valueOf(pluginRegistryEnabled).booleanValue()) {
104                            registry = new PluginRegistryFactory().createPluginRegistry();
105                    }
106    
107                    final Collection<ResourceLoader> rls = new ArrayList<ResourceLoader>();
108                    for (ResourceLoader rl : RiceResourceLoaderFactory.getSpringResourceLoaders()) {
109                            CoreResourceLoader coreResourceLoader = 
110                                    new CoreResourceLoader(rl, registry);
111                            coreResourceLoader.start();
112    
113                            //wait until core resource loader is started to attach to GRL;  this is so startup
114                            //code can depend on other things hooked into GRL without incomplete KEW resources
115                            //messing things up.
116    
117                            GlobalResourceLoader.addResourceLoader(coreResourceLoader);
118    
119                            // now start the plugin registry if there is one
120                            if (registry != null) {
121                                    registry.start();
122                                    // the registry resourceloader is now being handled by the CoreResourceLoader
123                                    //GlobalResourceLoader.addResourceLoader(registry);
124                            }
125                            rls.add(coreResourceLoader);
126                    }
127    
128                    return rls;
129            }
130    
131            private ClientProtocol getClientProtocol() {
132                    return ClientProtocol.valueOf(ConfigContext.getCurrentContextConfig().getProperty("client.protocol"));
133            }
134    
135            public DataSource getDataSource() {
136                    return dataSource;
137            }
138    
139            public void setDataSource(DataSource dataSource) {
140                    this.dataSource = dataSource;
141            }
142    }