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