View Javadoc

1   /*
2    * Copyright 2006-2011 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.kuali.rice.ksb.messaging.quartz;
18  
19  import org.kuali.rice.core.api.config.property.ConfigContext;
20  import org.kuali.rice.ksb.util.KSBConstants;
21  import org.springframework.beans.factory.config.AbstractFactoryBean;
22  
23  import java.util.Properties;
24  
25  /**
26   * A factory bean which reads quartz-related properties from the Config system and
27   * generates a Properites instance for use when configuration quartz.
28   * 
29   * @author Kuali Rice Team (rice.collab@kuali.org)
30   *
31   */
32  public class QuartzConfigPropertiesFactoryBean extends AbstractFactoryBean {
33  
34      private static final String QUARTZ_PREFIX = "ksb.org.quartz";
35      private static final String QUARTZ_IS_CLUSTERED = QUARTZ_PREFIX + ".jobStore.isClustered";
36      private static final String QUARTZ_TABLE_PREFIX = QUARTZ_PREFIX + ".jobStore.tablePrefix";
37      
38      @Override
39      protected Object createInstance() throws Exception {
40  	Properties properties = new Properties();
41  	Properties configProps = ConfigContext.getCurrentContextConfig().getProperties();
42  	boolean useQuartzDatabase = Boolean.valueOf(ConfigContext.getCurrentContextConfig().getProperty(KSBConstants.Config.USE_QUARTZ_DATABASE));
43  	for (Object keyObj : configProps.keySet()) {
44  	    if (keyObj instanceof String) {
45  	    	String key = (String)keyObj;
46  	    	if (key.startsWith(QUARTZ_PREFIX) && !propertyShouldBeFiltered(useQuartzDatabase, key)) {
47  	    		properties.put(key.substring(4), configProps.get(key));
48  	    	}
49  	    }
50  	}
51  	return properties;
52      }
53      
54      /**
55       * When we aren't using the quartz database, prevents some of the parameters for quartz database mode from
56       * being passed to quartz.  If we pass these to quartz when it's using a RAMJobStore, we get an error.  So
57       * in order to allow us to provide good defaults in common-config-defaults.xml, we will filter these out
58       * if useQuartzDatabase=false
59       */
60      protected boolean propertyShouldBeFiltered(boolean useQuartzDatabase, String propertyName) {
61      	if (!useQuartzDatabase) {
62      		if (propertyName.startsWith(QUARTZ_TABLE_PREFIX) || propertyName.startsWith(QUARTZ_IS_CLUSTERED)) {
63      			return true;
64      		}
65      	}
66      	return false;
67      }
68      
69      
70      @Override
71      public Class getObjectType() {
72  	return Properties.class;
73      }
74  
75  }