001/** 002 * Copyright 2005-2016 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 */ 016package org.kuali.rice.krms.impl.util; 017 018import org.apache.commons.lang.StringUtils; 019import org.kuali.rice.core.api.uif.RemotableAttributeField; 020import org.kuali.rice.krad.uif.container.Container; 021import org.kuali.rice.krad.uif.view.View; 022import org.kuali.rice.krad.web.form.InquiryForm; 023import org.kuali.rice.krad.web.form.MaintenanceForm; 024import org.kuali.rice.krms.api.repository.type.KrmsTypeDefinition; 025import org.kuali.rice.krms.framework.type.ActionTypeService; 026import org.kuali.rice.krms.framework.type.AgendaTypeService; 027import org.kuali.rice.krms.framework.type.RuleTypeService; 028import org.kuali.rice.krms.impl.repository.KrmsRepositoryServiceLocator; 029import org.kuali.rice.krms.impl.type.ActionTypeServiceBase; 030import org.kuali.rice.krms.impl.type.AgendaTypeServiceBase; 031import org.kuali.rice.krms.impl.type.RuleTypeServiceBase; 032import org.kuali.rice.krms.impl.ui.AgendaEditor; 033 034import java.util.ArrayList; 035import java.util.List; 036 037/** 038 * KRMS utilility class for retrieving KRMS objects for {@link org.kuali.rice.krms.impl.ui.AgendaEditorMaintainable} and 039 * {@link org.kuali.rice.krms.impl.repository.AgendaInquiryHelperServiceImpl} 040 * 041 * @author Kuali Rice Team (rice.collab@kuali.org) 042 */ 043public class KrmsRetriever { 044 045 private static final long serialVersionUID = 1L; 046 047 /** 048 * This only supports a single action within a rule. 049 * @param agendaEditor 050 * @return List<RemotableAttributeField> 051 */ 052 public List<RemotableAttributeField> retrieveRuleActionCustomAttributes(AgendaEditor agendaEditor) { 053 List<RemotableAttributeField> results = new ArrayList<RemotableAttributeField>(); 054 // if we have an rule action w/ a typeId set on it 055 if (agendaEditor != null && agendaEditor.getAgendaItemLineRuleAction() != null 056 &&!StringUtils.isBlank(agendaEditor.getAgendaItemLineRuleAction().getTypeId())) { 057 ActionTypeService actionTypeService = getActionTypeService(agendaEditor.getAgendaItemLineRuleAction().getTypeId()); 058 results.addAll(actionTypeService.getAttributeFields(agendaEditor.getAgendaItemLineRuleAction().getTypeId())); 059 } 060 061 return results; 062 } 063 064 /** 065 * Get the AgendaEditor out of the MaintenanceForm's newMaintainableObject 066 * @param model the MaintenanceForm 067 * @return the AgendaEditor 068 */ 069 private AgendaEditor getAgendaEditor(Object model) { 070 MaintenanceForm maintenanceForm = (MaintenanceForm)model; 071 return (AgendaEditor)maintenanceForm.getDocument().getNewMaintainableObject().getDataObject(); 072 } 073 074 private ActionTypeService getActionTypeService(String krmsTypeId) { 075 // 076 // Get the ActionTypeService by hook or by crook 077 // 078 079 KrmsTypeDefinition krmsType = KrmsRepositoryServiceLocator.getKrmsTypeRepositoryService().getTypeById(krmsTypeId); 080 081 ActionTypeService actionTypeService = null; 082 083 if (!StringUtils.isBlank(krmsTypeId)) { 084 String serviceName = krmsType.getServiceName(); 085 086 if (!StringUtils.isBlank(serviceName)) { 087 actionTypeService = KrmsRepositoryServiceLocator.getService(serviceName); 088 } 089 } 090 if (actionTypeService == null) { 091 actionTypeService = ActionTypeServiceBase.defaultActionTypeService; 092 } 093 094 // if (actionTypeService == null) { actionTypeService = AgendaTypeServiceBase.defaultAgendaTypeService; } 095 096 return actionTypeService; 097 } 098 099 /** 100 * 101 * @param agendaEditor 102 * @return List<RemotableAttributeField> 103 */ 104 public List<RemotableAttributeField> retrieveAgendaCustomAttributes(AgendaEditor agendaEditor) { 105 List<RemotableAttributeField> results = new ArrayList<RemotableAttributeField>(); 106 // if we have an agenda w/ a typeId set on it 107 if (agendaEditor != null && agendaEditor.getAgenda() != null 108 && !StringUtils.isBlank(agendaEditor.getAgenda().getTypeId())) { 109 110 String krmsTypeId = agendaEditor.getAgenda().getTypeId(); 111 112 AgendaTypeService agendaTypeService = getAgendaTypeService(krmsTypeId); 113 results.addAll(agendaTypeService.getAttributeFields(krmsTypeId)); 114 } 115 116 return results; 117 } 118 119 private AgendaTypeService getAgendaTypeService(String krmsTypeId) { 120 // 121 // Get the AgendaTypeService by hook or by crook 122 // 123 124 KrmsTypeDefinition krmsType = 125 KrmsRepositoryServiceLocator.getKrmsTypeRepositoryService(). 126 getTypeById(krmsTypeId); 127 128 AgendaTypeService agendaTypeService = null; 129 130 if (!StringUtils.isBlank(krmsTypeId)) { 131 String serviceName = krmsType.getServiceName(); 132 133 if (!StringUtils.isBlank(serviceName)) { 134 agendaTypeService = KrmsRepositoryServiceLocator.getService(serviceName); 135 } 136 } 137 138 if (agendaTypeService == null) { agendaTypeService = AgendaTypeServiceBase.defaultAgendaTypeService; } 139 140 return agendaTypeService; 141 } 142 143 public List<RemotableAttributeField> retrieveRuleCustomAttributes(AgendaEditor agendaEditor) { 144 List<RemotableAttributeField> results = new ArrayList<RemotableAttributeField>(); 145 // if we have an rule w/ a typeId set on it 146 if (agendaEditor != null && agendaEditor.getAgendaItemLine() != null && agendaEditor.getAgendaItemLine().getRule() != null 147 && !StringUtils.isBlank(agendaEditor.getAgendaItemLine().getRule().getTypeId())) { 148 149 String krmsTypeId = agendaEditor.getAgendaItemLine().getRule().getTypeId(); 150 151 RuleTypeService ruleTypeService = getRuleTypeService(krmsTypeId); 152 results.addAll(ruleTypeService.getAttributeFields(krmsTypeId)); 153 } 154 155 return results; 156 } 157 158 159 private RuleTypeService getRuleTypeService(String krmsTypeId) { 160 RuleTypeService ruleTypeService = null; 161 String serviceName = getRuleTypeServiceName(krmsTypeId); 162 163 if (!StringUtils.isBlank(serviceName)) { 164 ruleTypeService = KrmsRepositoryServiceLocator.getService(serviceName); 165 } 166 if (ruleTypeService == null) { 167 ruleTypeService = RuleTypeServiceBase.defaultRuleTypeService; 168 } 169 return ruleTypeService; 170 } 171 172 private String getRuleTypeServiceName(String krmsTypeId) { 173 String serviceName = null; 174 KrmsTypeDefinition krmsType = 175 KrmsRepositoryServiceLocator.getKrmsTypeRepositoryService(). 176 getTypeById(krmsTypeId); 177 178 if (!StringUtils.isBlank(krmsTypeId)) { 179 serviceName = krmsType.getServiceName(); 180 } 181 return serviceName; 182 } 183}