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 mocks;
017
018 import java.util.ArrayList;
019 import java.util.Collection;
020 import java.util.HashMap;
021 import java.util.Iterator;
022 import java.util.List;
023 import java.util.Map;
024
025 import org.apache.log4j.Logger;
026 import org.kuali.rice.core.mail.Mailer;
027 import org.kuali.rice.kew.api.action.ActionItem;
028 import org.kuali.rice.kew.api.action.ActionRequestType;
029 import org.kuali.rice.kew.mail.service.EmailContentService;
030 import org.kuali.rice.kew.api.KewApiConstants;
031 import org.kuali.rice.kim.api.identity.Person;
032 import org.kuali.rice.kim.api.identity.principal.Principal;
033 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
034
035
036 public class MockEmailNotificationServiceImpl /*extends CustomizableActionListEmailServiceImpl*/ implements MockEmailNotificationService {
037 private static final Logger LOG = Logger.getLogger(MockEmailNotificationServiceImpl.class);
038
039 private static Map<String,List> immediateReminders = new HashMap<String,List>();
040 private static Map<String,Integer> aggregateReminderCount = new HashMap<String,Integer>();
041 public static boolean SEND_DAILY_REMINDER_CALLED = false;
042 public static boolean SEND_WEEKLY_REMINDER_CALLED = false;
043
044 private EmailContentService contentService;
045 private String deploymentEnvironment;
046
047 private Mailer mailer;
048
049 /**
050 * Resets the reminder counts
051 */
052 public void resetReminderCounts() {
053 aggregateReminderCount.clear();
054 immediateReminders.clear();
055 }
056
057 /**
058 * This overridden method will perform the standard operations from org.kuali.rice.kew.mail.ActionListEmailServiceImpl but will also keep track of action
059 * items processed
060 */
061 @Override
062 public void sendImmediateReminder(ActionItem actionItem, Boolean skipOnApprovals) {
063 if (skipOnApprovals != null && skipOnApprovals.booleanValue()
064 && actionItem.getActionRequestCd().equals(KewApiConstants.ACTION_REQUEST_APPROVE_REQ)) {
065 LOG.debug("As requested, skipping immediate reminder notification on action item approval for " + actionItem.getPrincipalId());
066 return;
067 }
068 List actionItemsSentUser = (List)immediateReminders.get(actionItem.getPrincipalId());
069 if (actionItemsSentUser == null) {
070 actionItemsSentUser = new ArrayList();
071 immediateReminders.put(actionItem.getPrincipalId(), actionItemsSentUser);
072 }
073 actionItemsSentUser.add(actionItem);
074 }
075
076 /**
077 * This overridden method returns a value of true always
078 */
079 //@Override
080 protected boolean sendActionListEmailNotification() {
081
082 return true;
083 }
084
085 @Override
086 public void sendDailyReminder() {
087 resetStyleService();
088 //super.sendDailyReminder();
089 SEND_DAILY_REMINDER_CALLED = true;
090 }
091
092 @Override
093 public void sendWeeklyReminder() {
094 resetStyleService();
095 //super.sendWeeklyReminder();
096 SEND_WEEKLY_REMINDER_CALLED = true;
097 }
098
099 @Override
100 public void scheduleBatchEmailReminders() throws Exception {
101 //do nothing
102 }
103
104 //@Override
105 protected void sendPeriodicReminder(Person user, Collection<ActionItem> actionItems, String emailSetting) {
106 //super.sendPeriodicReminder(user, actionItems, emailSetting);
107 if (!aggregateReminderCount.containsKey(emailSetting)) {
108 aggregateReminderCount.put(emailSetting, actionItems.size());
109 } else {
110 aggregateReminderCount.put(emailSetting, aggregateReminderCount.get(emailSetting) + actionItems.size());
111 }
112 }
113
114 public Integer getTotalPeriodicRemindersSent(String emailReminderConstant) {
115 Integer returnVal = aggregateReminderCount.get(emailReminderConstant);
116 if (returnVal == null) {
117 returnVal = Integer.valueOf(0);
118 }
119 return returnVal;
120 }
121
122 public Integer getTotalPeriodicRemindersSent() {
123 int total = 0;
124 for (Map.Entry<String, Integer> mapEntry : aggregateReminderCount.entrySet()) {
125 Integer value = mapEntry.getValue();
126 total += (value == null) ? 0 : value.intValue();
127 }
128 return Integer.valueOf(total);
129 }
130
131 public boolean wasStyleServiceAccessed() {
132 return getEmailContentGenerator().wasServiceAccessed();
133 }
134
135 private void resetStyleService() {
136 getEmailContentGenerator().resetServiceAccessed();
137 }
138
139 public int immediateReminderEmailsSent(String networkId, String documentId, String actionRequestCd) {
140 Principal principal = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName(networkId);
141 List actionItemsSentUser = immediateReminders.get(principal.getPrincipalId());
142 if (actionItemsSentUser == null) {
143 return 0;
144 }
145 int emailsSent = 0;
146 for (Iterator iter = actionItemsSentUser.iterator(); iter.hasNext();) {
147 ActionItem actionItem = (ActionItem) iter.next();
148 if (actionItem.getDocumentId().equals(documentId) && actionItem.getActionRequestCd().equals(actionRequestCd)) {
149 emailsSent++;
150 }
151 }
152 return emailsSent;
153 }
154
155 public void setEmailContentGenerator(EmailContentService contentService) {
156 this.contentService = contentService;
157 }
158
159 protected MockStyleableEmailContentService getEmailContentGenerator() {
160 return (MockStyleableEmailContentService) contentService;
161 }
162
163 public void setMailer(Mailer mailer){
164 this.mailer = mailer;
165 }
166
167 public void setDeploymentEnvironment(String deploymentEnvironment) {
168 this.deploymentEnvironment = deploymentEnvironment;
169 }
170 }