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.core.web.parameter;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.apache.commons.logging.Log;
20  import org.apache.commons.logging.LogFactory;
21  import org.kuali.rice.core.framework.parameter.ParameterService;
22  import org.kuali.rice.core.impl.component.ComponentBo;
23  import org.kuali.rice.core.impl.component.DerivedComponentBo;
24  import org.kuali.rice.core.impl.parameter.ParameterBo;
25  import org.kuali.rice.kim.api.KimConstants;
26  import org.kuali.rice.kim.api.services.KimApiServiceLocator;
27  import org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl;
28  import org.kuali.rice.krad.bo.BusinessObject;
29  import org.kuali.rice.krad.util.GlobalVariables;
30  import org.kuali.rice.krad.util.KRADConstants;
31  
32  import java.util.Collection;
33  import java.util.Collections;
34  import java.util.HashMap;
35  import java.util.List;
36  import java.util.Map;
37  
38  /**
39   * This is a description of what this class does - kellerj don't forget to fill this in.
40   *
41   * @author Kuali Rice Team (rice.collab@kuali.org)
42   *
43   */
44  public class ParameterLookupableHelperServiceImpl extends KualiLookupableHelperServiceImpl {
45  
46      private static final long serialVersionUID = 4381873774407301041L;
47  
48      private static final Log LOG = LogFactory.getLog(ParameterLookupableHelperServiceImpl.class);
49      private static final String COMPONENT_NAME = "component.name";
50      private static final String DERIVED_COMPONENT_NAME = "derivedComponent.name";
51      private static final String NAMESPACE_CODE = "namespaceCode";
52  
53      @Override
54      protected boolean allowsMaintenanceEditAction(BusinessObject businessObject) {
55      	
56          ParameterBo parm = (ParameterBo)businessObject;
57          
58          Map<String, String> permissionDetails = new HashMap<String, String>();
59          permissionDetails.put(KimConstants.AttributeConstants.NAMESPACE_CODE, parm.getNamespaceCode());
60          permissionDetails.put(KimConstants.AttributeConstants.COMPONENT_NAME, parm.getComponentCode());
61          permissionDetails.put(KimConstants.AttributeConstants.PARAMETER_NAME, parm.getName());
62          return KimApiServiceLocator.getPermissionService().isAuthorizedByTemplateName(
63          		GlobalVariables.getUserSession().getPerson().getPrincipalId(),
64  				KRADConstants.KRAD_NAMESPACE,
65  				KimConstants.PermissionTemplateNames.MAINTAIN_SYSTEM_PARAMETER,
66  				permissionDetails, Collections.<String, String>emptyMap());
67      }
68      
69      @Override
70      public List<? extends BusinessObject> getSearchResults(java.util.Map<String, String> fieldValues) {
71  
72          List<ParameterBo> parametersWithDerivedComponents = null;
73  
74          if (fieldValues.containsKey(COMPONENT_NAME) && StringUtils.isNotBlank(fieldValues.get(COMPONENT_NAME))) {
75              // also search based on derived component name
76              Map<String, String> derivedComponentFieldValues = new HashMap<String, String>(fieldValues);
77              String componentName = derivedComponentFieldValues.remove(COMPONENT_NAME);
78              derivedComponentFieldValues.put(DERIVED_COMPONENT_NAME, componentName);
79              parametersWithDerivedComponents = (List<ParameterBo>)super.getSearchResultsUnbounded(derivedComponentFieldValues);
80          }
81  
82          List<ParameterBo> results = (List<ParameterBo>)super.getSearchResultsUnbounded(fieldValues);
83          if (parametersWithDerivedComponents != null) {
84              results.addAll(parametersWithDerivedComponents);
85          }
86          normalizeParameterComponents(results);
87          return results;
88      }
89  
90  	private void normalizeParameterComponents(List<ParameterBo> parameters) {
91  		// attach the derived components where needed
92          for (ParameterBo parameterBo : parameters) {
93              if (parameterBo.getComponent() == null) {
94                  parameterBo.setComponent(DerivedComponentBo.toComponentBo(parameterBo.getDerivedComponent()));
95              }
96          }
97  	}
98  
99  }
100