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.krms.impl.repository;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.rice.core.api.uif.RemotableAttributeField;
20  import org.kuali.rice.kns.inquiry.KualiInquirableImpl;
21  import org.kuali.rice.krad.uif.container.Container;
22  import org.kuali.rice.krad.uif.view.View;
23  import org.kuali.rice.krad.web.form.InquiryForm;
24  import org.kuali.rice.krms.api.repository.type.KrmsTypeDefinition;
25  import org.kuali.rice.krms.framework.type.ActionTypeService;
26  import org.kuali.rice.krms.framework.type.AgendaTypeService;
27  import org.kuali.rice.krms.framework.type.RuleTypeService;
28  import org.kuali.rice.krms.impl.type.ActionTypeServiceBase;
29  import org.kuali.rice.krms.impl.type.AgendaTypeServiceBase;
30  import org.kuali.rice.krms.impl.type.RuleTypeServiceBase;
31  import org.kuali.rice.krms.impl.ui.AgendaEditor;
32  
33  import java.util.ArrayList;
34  import java.util.List;
35  import java.util.Map;
36  
37  public class AgendaInquiryHelperServiceImpl extends KualiInquirableImpl {
38  
39      @Override
40      public AgendaEditor retrieveDataObject(Map fieldValues) {
41          AgendaEditor agendaEditor = null;
42  
43          String agendaId = (String) fieldValues.get("id");
44          AgendaBo agenda = getBusinessObjectService().findBySinglePrimaryKey(AgendaBo.class, agendaId);
45          if (agenda != null) {
46              agendaEditor = new AgendaEditor();
47              agendaEditor.setAgenda(agenda);
48              agendaEditor.setNamespace(agenda.getContext().getNamespace());
49              agendaEditor.setContextName(agenda.getContext().getName());
50              agendaEditor.setCustomAttributesMap(agenda.getAttributes());
51          }
52  
53          return agendaEditor;
54      }
55  
56      public List<RemotableAttributeField> retrieveCustomAttributes(View view, Object model, Container container) {
57          List<RemotableAttributeField> results = new ArrayList<RemotableAttributeField>();
58  
59          InquiryForm inquiryForm = (InquiryForm)model;
60          AgendaEditor agendaEditor = (AgendaEditor)inquiryForm.getDataObject();
61  
62          // if we have an agenda w/ a typeId set on it
63          if (agendaEditor.getAgenda() != null && !StringUtils.isBlank(agendaEditor.getAgenda().getTypeId())) {
64  
65              String krmsTypeId = agendaEditor.getAgenda().getTypeId();
66  
67              AgendaTypeService agendaTypeService = getAgendaTypeService(krmsTypeId);
68              results.addAll(agendaTypeService.getAttributeFields(krmsTypeId));
69          }
70  
71          return results;
72      }
73  
74      private AgendaTypeService getAgendaTypeService(String krmsTypeId) {
75          //
76          // Get the AgendaTypeService by hook or by crook
77          //
78  
79          KrmsTypeDefinition krmsType =
80                      KrmsRepositoryServiceLocator.getKrmsTypeRepositoryService().
81                              getTypeById(krmsTypeId);
82  
83          AgendaTypeService agendaTypeService = null;
84  
85          if (!StringUtils.isBlank(krmsTypeId)) {
86              String serviceName = krmsType.getServiceName();
87  
88              if (!StringUtils.isBlank(serviceName)) {
89                  agendaTypeService = KrmsRepositoryServiceLocator.getService(serviceName);
90              }
91          }
92  
93          if (agendaTypeService == null) { agendaTypeService = AgendaTypeServiceBase.defaultAgendaTypeService; }
94  
95          return agendaTypeService;
96      }
97  
98      /**
99       *  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 }