001 /** 002 * Copyright 2005-2012 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.kew.api; 017 018 import javax.xml.namespace.QName; 019 import org.apache.commons.lang.StringUtils; 020 import org.kuali.rice.core.api.config.module.RunMode; 021 import org.kuali.rice.core.api.config.property.ConfigContext; 022 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader; 023 import org.kuali.rice.kew.api.action.WorkflowDocumentActionsService; 024 import org.kuali.rice.kew.api.actionlist.ActionListService; 025 import org.kuali.rice.kew.api.doctype.DocumentTypeService; 026 import org.kuali.rice.kew.api.document.WorkflowDocumentService; 027 import org.kuali.rice.kew.api.document.attribute.DocumentAttributeIndexingQueue; 028 import org.kuali.rice.kew.api.extension.ExtensionRepositoryService; 029 import org.kuali.rice.kew.api.group.GroupMembershipChangeQueue; 030 import org.kuali.rice.kew.api.mail.ImmediateEmailReminderQueue; 031 import org.kuali.rice.kew.api.note.NoteService; 032 import org.kuali.rice.kew.api.peopleflow.PeopleFlowService; 033 import org.kuali.rice.kew.api.preferences.PreferencesService; 034 import org.kuali.rice.kew.api.repository.type.KewTypeRepositoryService; 035 import org.kuali.rice.kew.api.responsibility.ResponsibilityChangeQueue; 036 import org.kuali.rice.kew.api.rule.RuleService; 037 import org.kuali.rice.ksb.api.KsbApiServiceLocator; 038 039 /** 040 * A static service locator which aids in locating the various services that 041 * form the Kuali Service Bus API. 042 */ 043 public class KewApiServiceLocator { 044 045 // Rice 2.0 - TODO - should these be using the QName versions instead? How else will they be fetched in "remote" mode? 046 public static final String WORKFLOW_DOCUMENT_ACTIONS_SERVICE = "rice.kew.workflowDocumentActionsService"; 047 public static final String WORKFLOW_DOCUMENT_SERVICE = "rice.kew.workflowDocumentService"; 048 public static final String ACTION_LIST_SERVICE = "rice.kew.actionListService"; 049 public static final String DOCUMENT_TYPE_SERVICE = "rice.kew.documentTypeService"; 050 public static final String NOTE_SERVICE = "rice.kew.noteService"; 051 public static final String EXTENSION_REPOSITORY_SERVICE = "rice.kew.extensionRepositoryService"; 052 public static final String RULE_SERVICE = "rice.kew.ruleService"; 053 public static final String KEW_TYPE_REPOSITORY_SERVICE = "rice.kew.kewTypeRepositoryService"; 054 public static final String PEOPLE_FLOW_SERVICE = "rice.kew.peopleFlowService"; 055 public static final String PREFERENCES_SERVICE = "rice.kew.preferencesService"; 056 public static final String KEW_RUN_MODE_PROPERTY = "kew.mode"; 057 public static final String STANDALONE_APPLICATION_ID = "standalone.application.id"; 058 public static final QName DOCUMENT_ATTRIBUTE_INDEXING_QUEUE_NAME = new QName(KewApiConstants.Namespaces.KEW_NAMESPACE_2_0, "documentAttributeIndexingQueue"); 059 public static final QName GROUP_MEMBERSHIP_CHANGE_QUEUE_NAME = new QName(KewApiConstants.Namespaces.KEW_NAMESPACE_2_0, "groupMembershipChangeQueue"); 060 public static final QName IMMEDIATE_EMAIL_REMINDER_QUEUE = new QName(KewApiConstants.Namespaces.KEW_NAMESPACE_2_0, "immediateEmailReminderQueue"); 061 public static final QName RESPONSIBILITY_CHANGE_QUEUE = new QName(KewApiConstants.Namespaces.KEW_NAMESPACE_2_0, "responsibilityChangeQueue"); 062 063 static <T> T getService(String serviceName) { 064 return GlobalResourceLoader.<T>getService(serviceName); 065 } 066 067 public static WorkflowDocumentActionsService getWorkflowDocumentActionsService() { 068 RunMode kewRunMode = RunMode.valueOf(ConfigContext.getCurrentContextConfig().getProperty(KEW_RUN_MODE_PROPERTY)); 069 if (kewRunMode == RunMode.REMOTE || kewRunMode == RunMode.THIN) { 070 String standaloneApplicationId = ConfigContext.getCurrentContextConfig().getProperty(STANDALONE_APPLICATION_ID); 071 return getWorkflowDocumentActionsService(standaloneApplicationId); 072 } else { 073 return getService(WORKFLOW_DOCUMENT_ACTIONS_SERVICE); 074 } 075 } 076 077 public static WorkflowDocumentActionsService getWorkflowDocumentActionsService(String applicationId){ 078 if(!StringUtils.isEmpty(applicationId)){//Need to find out proper remote endpoint in this case 079 QName qN = new QName(KewApiConstants.Namespaces.KEW_NAMESPACE_2_0, KewApiConstants.ServiceNames.WORKFLOW_DOCUMENT_ACTIONS_SERVICE_SOAP); 080 //http://rice.kuali.org/kew/v2_0}workflowDocumentActionsService 081 return (WorkflowDocumentActionsService)KsbApiServiceLocator.getServiceBus().getService(qN, applicationId); 082 }else{//we can use the default internal service here since we dont have an applicationId 083 return getWorkflowDocumentActionsService(); 084 } 085 } 086 087 public static WorkflowDocumentService getWorkflowDocumentService() { 088 return getService(WORKFLOW_DOCUMENT_SERVICE); 089 } 090 091 public static ActionListService getActionListService() { 092 return getService(ACTION_LIST_SERVICE); 093 } 094 095 public static DocumentTypeService getDocumentTypeService() { 096 return getService(DOCUMENT_TYPE_SERVICE); 097 } 098 099 public static NoteService getNoteService() { 100 return getService(NOTE_SERVICE); 101 } 102 103 public static RuleService getRuleService() { 104 return getService(RULE_SERVICE); 105 } 106 107 public static ExtensionRepositoryService getExtensionRepositoryService() { 108 return getService(EXTENSION_REPOSITORY_SERVICE); 109 } 110 111 public static KewTypeRepositoryService getKewTypeRepositoryService() { 112 return getService(KEW_TYPE_REPOSITORY_SERVICE); 113 } 114 115 public static PeopleFlowService getPeopleFlowService() { 116 return getService(PEOPLE_FLOW_SERVICE); 117 } 118 119 public static DocumentAttributeIndexingQueue getDocumentAttributeIndexingQueue() { 120 return getDocumentAttributeIndexingQueue(null); 121 } 122 123 public static DocumentAttributeIndexingQueue getDocumentAttributeIndexingQueue(String applicationId) { 124 return (DocumentAttributeIndexingQueue)KsbApiServiceLocator.getMessageHelper().getServiceAsynchronously(DOCUMENT_ATTRIBUTE_INDEXING_QUEUE_NAME, applicationId); 125 } 126 127 public static GroupMembershipChangeQueue getGroupMembershipChangeQueue() { 128 return (GroupMembershipChangeQueue)KsbApiServiceLocator.getMessageHelper().getServiceAsynchronously(GROUP_MEMBERSHIP_CHANGE_QUEUE_NAME); 129 } 130 131 public static ResponsibilityChangeQueue getResponsibilityChangeQueue() { 132 return (ResponsibilityChangeQueue)KsbApiServiceLocator.getMessageHelper().getServiceAsynchronously( 133 RESPONSIBILITY_CHANGE_QUEUE); 134 } 135 136 public static ImmediateEmailReminderQueue getImmediateEmailReminderQueue() { 137 return KsbApiServiceLocator.getMessageHelper().getServiceAsynchronously(IMMEDIATE_EMAIL_REMINDER_QUEUE); 138 } 139 140 public static PreferencesService getPreferencesService() { 141 return getService(PREFERENCES_SERVICE); 142 } 143 }