View Javadoc

1   /*
2    * Copyright 2007-2009 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.ken.web.spring;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.apache.log4j.Logger;
20  import org.kuali.rice.core.api.namespace.Namespace;
21  import org.kuali.rice.core.api.namespace.NamespaceService;
22  import org.kuali.rice.ken.exception.ErrorList;
23  import org.kuali.rice.kim.api.group.Group;
24  import org.kuali.rice.kim.api.group.GroupService;
25  import org.kuali.rice.kim.api.identity.IdentityService;
26  import org.kuali.rice.kim.api.identity.principal.Principal;
27  import org.kuali.rice.kim.api.services.KimApiServiceLocator;
28  import org.kuali.rice.krad.service.KRADServiceLocatorInternal;
29  import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
30  
31  import javax.servlet.http.HttpServletRequest;
32  import java.util.ArrayList;
33  import java.util.List;
34  
35  /**
36   * Base class for KEN controllers for sending notifications
37   *
38   * @author Kuali Rice Team (rice.collab@kuali.org)
39   *
40   */
41  public class BaseSendNotificationController extends MultiActionController {
42      private static final Logger LOG = Logger.getLogger(BaseSendNotificationController.class);
43  
44      private static final String USER_RECIPS_PARAM = "userRecipients";
45      private static final String WORKGROUP_RECIPS_PARAM = "workgroupRecipients";
46      private static final String WORKGROUP_NAMESPACE_CODES_PARAM = "workgroupNamespaceCodes";
47      private static final String SPLIT_REGEX = "(%2C|,)";
48      
49      private static IdentityService identityService;
50      private static GroupService groupService;
51      private static NamespaceService namespaceService;
52  
53      protected static IdentityService getIdentityService() {
54          if ( identityService == null ) {
55              identityService = KimApiServiceLocator.getIdentityService();
56          }
57          return identityService;
58      }
59  
60      protected static GroupService getGroupService() {
61          if ( groupService == null ) {
62              groupService = KimApiServiceLocator.getGroupService();
63          }
64          return groupService;
65      }
66      
67      protected static NamespaceService getNamespaceService() {
68          if ( namespaceService == null ) {
69              namespaceService = KRADServiceLocatorInternal.getNamespaceService();
70          }
71          return namespaceService;
72      }
73      
74      protected String[] parseUserRecipients(HttpServletRequest request) {
75          return parseCommaSeparatedValues(request, USER_RECIPS_PARAM);
76      }
77  
78      protected String[] parseWorkgroupRecipients(HttpServletRequest request) {
79          return parseCommaSeparatedValues(request, WORKGROUP_RECIPS_PARAM);
80      }
81  
82      protected String[] parseWorkgroupNamespaceCodes(HttpServletRequest request) {
83      	return parseCommaSeparatedValues(request, WORKGROUP_NAMESPACE_CODES_PARAM);
84      }
85      
86      protected String[] parseCommaSeparatedValues(HttpServletRequest request, String param) {
87          String vals = request.getParameter(param);
88          if (vals != null) {
89              String[] split = vals.split(SPLIT_REGEX);
90              List<String> strs = new ArrayList<String>();
91              for (String component: split) {
92                  if (StringUtils.isNotBlank(component)) {
93                      strs.add(component.trim());
94                  }
95              }
96              return strs.toArray(new String[strs.size()]);
97          } else {
98              return new String[0];
99          }
100     }
101 
102     protected boolean isUserRecipientValid(String user, ErrorList errors) {
103         boolean valid = true;
104         Principal principal = getIdentityService().getPrincipalByPrincipalName(user);
105         if (principal == null) {
106         	valid = false;
107         	errors.addError("'" + user + "' is not a valid principal name");
108         }
109 
110         return valid;
111     }
112 
113     protected boolean isWorkgroupRecipientValid(String groupName, String namespaceCode, ErrorList errors) {
114     	Namespace nSpace = getNamespaceService().getNamespace(namespaceCode);
115     	if (nSpace == null) {
116     		errors.addError((new StringBuilder()).append('\'').append(namespaceCode).append("' is not a valid namespace code").toString());
117     		return false;
118     	} else {
119     		Group i = getGroupService().getGroupByName(namespaceCode, groupName);
120        		if (i == null) {
121        			errors.addError((new StringBuilder()).append('\'').append(groupName).append(
122        					"' is not a valid group name for namespace code '").append(namespaceCode).append('\'').toString());
123        			return false;
124        		} else {
125        			return true;
126        		}
127     	}
128     }
129 }