001    /**
002     * Copyright 2005-2012 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.ken.web.spring;
017    
018    import org.apache.commons.lang.StringUtils;
019    import org.apache.log4j.Logger;
020    import org.kuali.rice.coreservice.api.namespace.Namespace;
021    import org.kuali.rice.coreservice.api.namespace.NamespaceService;
022    import org.kuali.rice.ken.exception.ErrorList;
023    import org.kuali.rice.kim.api.group.Group;
024    import org.kuali.rice.kim.api.group.GroupService;
025    import org.kuali.rice.kim.api.identity.IdentityService;
026    import org.kuali.rice.kim.api.identity.principal.Principal;
027    import org.kuali.rice.kim.api.services.KimApiServiceLocator;
028    import org.kuali.rice.krad.service.KRADServiceLocatorInternal;
029    import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
030    
031    import javax.servlet.http.HttpServletRequest;
032    import java.util.ArrayList;
033    import java.util.List;
034    
035    /**
036     * Base class for KEN controllers for sending notifications
037     *
038     * @author Kuali Rice Team (rice.collab@kuali.org)
039     *
040     */
041    public class BaseSendNotificationController extends MultiActionController {
042        private static final Logger LOG = Logger.getLogger(BaseSendNotificationController.class);
043    
044        private static final String USER_RECIPS_PARAM = "userRecipients";
045        private static final String WORKGROUP_RECIPS_PARAM = "workgroupRecipients";
046        private static final String WORKGROUP_NAMESPACE_CODES_PARAM = "workgroupNamespaceCodes";
047        private static final String SPLIT_REGEX = "(%2C|,)";
048        
049        private static IdentityService identityService;
050        private static GroupService groupService;
051        private static NamespaceService namespaceService;
052    
053        protected static IdentityService getIdentityService() {
054            if ( identityService == null ) {
055                identityService = KimApiServiceLocator.getIdentityService();
056            }
057            return identityService;
058        }
059    
060        protected static GroupService getGroupService() {
061            if ( groupService == null ) {
062                groupService = KimApiServiceLocator.getGroupService();
063            }
064            return groupService;
065        }
066        
067        protected static NamespaceService getNamespaceService() {
068            if ( namespaceService == null ) {
069                namespaceService = KRADServiceLocatorInternal.getNamespaceService();
070            }
071            return namespaceService;
072        }
073        
074        protected String[] parseUserRecipients(HttpServletRequest request) {
075            return parseCommaSeparatedValues(request, USER_RECIPS_PARAM);
076        }
077    
078        protected String[] parseWorkgroupRecipients(HttpServletRequest request) {
079            return parseCommaSeparatedValues(request, WORKGROUP_RECIPS_PARAM);
080        }
081    
082        protected String[] parseWorkgroupNamespaceCodes(HttpServletRequest request) {
083            return parseCommaSeparatedValues(request, WORKGROUP_NAMESPACE_CODES_PARAM);
084        }
085        
086        protected String[] parseCommaSeparatedValues(HttpServletRequest request, String param) {
087            String vals = request.getParameter(param);
088            if (vals != null) {
089                String[] split = vals.split(SPLIT_REGEX);
090                List<String> strs = new ArrayList<String>();
091                for (String component: split) {
092                    if (StringUtils.isNotBlank(component)) {
093                        strs.add(component.trim());
094                    }
095                }
096                return strs.toArray(new String[strs.size()]);
097            } else {
098                return new String[0];
099            }
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().getGroupByNamespaceCodeAndName(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    }