View Javadoc

1   /**
2    * Copyright 2005-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  package org.kuali.rice.ksb.messaging;
17  
18  import java.util.ArrayList;
19  import java.util.List;
20  
21  import org.kuali.rice.core.api.config.ConfigurationException;
22  import org.kuali.rice.core.api.config.module.RunMode;
23  import org.kuali.rice.core.api.config.property.ConfigContext;
24  import org.kuali.rice.ksb.api.bus.support.PropertyConditionalServiceBusExporter;
25  
26  /**
27   * A KSBExporter which will exports the service in the case where the specified
28   * run mode is set.  The run mode order proceeds as follows:
29   * 
30   * <p>remote -> embedded -> local
31   * 
32   * <p>If any of the earlier run modes in the list is set, then the ones after it
33   * will be applied.  So, if remote is set, then it will automatically be exported
34   * for embedded and local run modes.
35   * 
36   * @author Kuali Rice Team (kuali-rice@googlegroups.com)
37   */
38  public class RunModeServiceExporter extends PropertyConditionalServiceBusExporter {
39  	
40      private String runModePropertyName;
41      private RunMode validRunMode;
42      private static final List<RunMode> runModeHierarchy = new ArrayList<RunMode>();
43      static {
44      	runModeHierarchy.add(RunMode.THIN);
45      	runModeHierarchy.add(RunMode.REMOTE);
46      	runModeHierarchy.add(RunMode.EMBEDDED);
47      	runModeHierarchy.add(RunMode.LOCAL);
48      }
49  
50      @Override
51  	protected boolean shouldRemoteThisService() {
52      	if (validRunMode == null) {
53      		throw new ConfigurationException("The validRunMode property was not set.");
54      	}
55      	if (!runModeHierarchy.contains(getValidRunMode())) {
56      		throw new ConfigurationException("Given validRunMode is not a valid run mode.  Value was: " + getValidRunMode());
57      	}
58  		RunMode runModePropertyValue = RunMode.valueOf(ConfigContext.getCurrentContextConfig().getProperty(getRunModePropertyName()));
59  
60      	if (!runModeHierarchy.contains(runModePropertyValue)) {
61      		throw new ConfigurationException("Run mode value set on runModePropertyName of '" + getRunModePropertyName() + "' is not a valid run mode.  Value was: " + runModePropertyValue);
62      	}
63      	List<RunMode> validRunModeSubList = runModeHierarchy.subList(runModeHierarchy.indexOf(getValidRunMode()), runModeHierarchy.size());
64      	return validRunModeSubList.contains(runModePropertyValue) && super.shouldRemoteThisService();
65  	}
66  
67  	public String getRunModePropertyName() {
68          return this.runModePropertyName;
69      }
70  
71      public void setRunModePropertyName(String runModePropertyName) {
72          this.runModePropertyName = runModePropertyName;
73      }
74  
75      public RunMode getValidRunMode() {
76          return this.validRunMode;
77      }
78  
79      public void setValidRunMode(RunMode validRunMode) {
80          this.validRunMode = validRunMode;
81      }
82      
83  }