001 /*
002 * Copyright 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.kfs.sys.context;
017
018 import java.util.HashSet;
019 import java.util.Set;
020
021 import javax.xml.namespace.QName;
022
023 import org.kuali.rice.core.resourceloader.SpringBeanFactoryResourceLoader;
024
025 /**
026 * A custom {@link org.kuali.rice.kew.plugin.ResourceLoader} which wraps a Spring BeanFactory and delegates certain service lookups to
027 * the BeanFactory.
028 */
029 public class FinancialSystemResourceLoader extends SpringBeanFactoryResourceLoader {
030
031 private static final String CONVERSIONS_DELIMITER = "|";
032 //private static final String LOOKUPABLE_REGEX = "workflow-.+-Lookupable(.+)";
033
034 private Set<String> overridableServices = new HashSet<String>();
035
036 public FinancialSystemResourceLoader() {
037 super(new QName("FinancialSystemResourceLoader"));
038 }
039
040 @Override
041 public Object getService(QName serviceName) {
042 if (overridableServices.contains(serviceName.getLocalPart())) {
043 return super.getService(serviceName);
044 }
045 // else if (isKualiLookupable(serviceName)) {
046 // return fetchKualiLookupable(serviceName);
047 // }
048 else if (serviceName.getLocalPart().indexOf("Lookupable") > -1) {
049 return super.getService(serviceName);
050 }
051 else if (serviceName.getLocalPart().contains("InactivationBlockingDetectionService")) {
052 return super.getService(serviceName);
053 }
054 return null;
055 }
056
057 // protected boolean isKualiLookupable(QName serviceName) {
058 // return serviceName.getLocalPart().matches(LOOKUPABLE_REGEX);
059 // }
060 //
061 // protected Object fetchKualiLookupable(QName serviceName) {
062 // String lookupableName = serviceName.getLocalPart();
063 // WorkflowLookupable workflowLookupable = null;
064 // if (lookupableName.indexOf(".") > 0) {
065 // String lookupableImplName = lookupableName.substring(0, lookupableName.indexOf("("));
066 // WorkflowLookupableImpl workflowLookupableImpl = (WorkflowLookupableImpl) getBeanFactory().getBean(lookupableImplName);
067 // String allConversions = lookupableName.substring(lookupableName.indexOf("(") + 1, lookupableName.indexOf(")"));
068 // String fieldConversions = null;
069 // String lookupParameters = null;
070 // if (allConversions.indexOf(CONVERSIONS_DELIMITER) > 0) {
071 // fieldConversions = allConversions.substring(0, allConversions.indexOf(CONVERSIONS_DELIMITER));
072 // lookupParameters = allConversions.substring(allConversions.indexOf(CONVERSIONS_DELIMITER) + 1);
073 // }
074 // else {
075 // fieldConversions = allConversions;
076 // }
077 // workflowLookupableImpl.setFieldConversions(fieldConversions);
078 // workflowLookupableImpl.setLookupParameters(lookupParameters);
079 // workflowLookupable = (WorkflowLookupable) super.wrap(serviceName, workflowLookupableImpl);
080 // }
081 // else {
082 // workflowLookupable = (WorkflowLookupable) super.getService(serviceName);
083 // }
084 // return workflowLookupable;
085 // }
086
087 public Set<String> getOverridableServices() {
088 return overridableServices;
089 }
090
091 public void setOverridableServices(Set<String> overridableServices) {
092 this.overridableServices = overridableServices;
093 }
094
095 }