001 /* 002 * Copyright 2005-2007 The Kuali Foundation 003 * 004 * 005 * Licensed under the Educational Community License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.opensource.org/licenses/ecl2.php 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package mocks; 018 019 import java.util.ArrayList; 020 import java.util.Collection; 021 import java.util.HashMap; 022 import java.util.Iterator; 023 import java.util.List; 024 import java.util.Map; 025 026 import org.apache.log4j.Logger; 027 import org.kuali.rice.kew.actionitem.ActionItem; 028 import org.kuali.rice.kew.mail.service.impl.CustomizableActionListEmailServiceImpl; 029 import org.kuali.rice.kim.bo.Person; 030 import org.kuali.rice.kim.bo.entity.KimPrincipal; 031 import org.kuali.rice.kim.service.KIMServiceLocator; 032 033 034 public class MockEmailNotificationServiceImpl extends CustomizableActionListEmailServiceImpl implements MockEmailNotificationService { 035 private static final Logger LOG = Logger.getLogger(MockEmailNotificationServiceImpl.class); 036 037 private static Map<String,List> immediateReminders = new HashMap<String,List>(); 038 private static Map<String,Integer> aggregateReminderCount = new HashMap<String,Integer>(); 039 public static boolean SEND_DAILY_REMINDER_CALLED = false; 040 public static boolean SEND_WEEKLY_REMINDER_CALLED = false; 041 042 /** 043 * Resets the reminder counts 044 */ 045 public void resetReminderCounts() { 046 aggregateReminderCount.clear(); 047 immediateReminders.clear(); 048 } 049 050 /** 051 * This overridden method will perform the standard operations from org.kuali.rice.kew.mail.ActionListEmailServiceImpl but will also keep track of action 052 * items processed 053 */ 054 @Override 055 public void sendImmediateReminder(Person user, ActionItem actionItem) { 056 super.sendImmediateReminder(user, actionItem); 057 List actionItemsSentUser = (List)immediateReminders.get(user.getPrincipalId()); 058 if (actionItemsSentUser == null) { 059 actionItemsSentUser = new ArrayList(); 060 immediateReminders.put(user.getPrincipalId(), actionItemsSentUser); 061 } 062 actionItemsSentUser.add(actionItem); 063 } 064 065 /** 066 * This overridden method returns a value of true always 067 */ 068 @Override 069 protected boolean sendActionListEmailNotification() { 070 071 return true; 072 } 073 074 @Override 075 public void sendDailyReminder() { 076 resetStyleService(); 077 super.sendDailyReminder(); 078 SEND_DAILY_REMINDER_CALLED = true; 079 } 080 081 @Override 082 public void sendWeeklyReminder() { 083 resetStyleService(); 084 super.sendWeeklyReminder(); 085 SEND_WEEKLY_REMINDER_CALLED = true; 086 } 087 088 @Override 089 protected void sendPeriodicReminder(Person user, Collection<ActionItem> actionItems, String emailSetting) { 090 super.sendPeriodicReminder(user, actionItems, emailSetting); 091 if (!aggregateReminderCount.containsKey(emailSetting)) { 092 aggregateReminderCount.put(emailSetting, actionItems.size()); 093 } else { 094 aggregateReminderCount.put(emailSetting, aggregateReminderCount.get(emailSetting) + actionItems.size()); 095 } 096 } 097 098 public Integer getTotalPeriodicRemindersSent(String emailReminderConstant) { 099 Integer returnVal = aggregateReminderCount.get(emailReminderConstant); 100 if (returnVal == null) { 101 returnVal = Integer.valueOf(0); 102 } 103 return returnVal; 104 } 105 106 public Integer getTotalPeriodicRemindersSent() { 107 int total = 0; 108 for (Map.Entry<String, Integer> mapEntry : aggregateReminderCount.entrySet()) { 109 Integer value = mapEntry.getValue(); 110 total += (value == null) ? 0 : value.intValue(); 111 } 112 return Integer.valueOf(total); 113 } 114 115 public boolean wasStyleServiceAccessed() { 116 return getEmailContentGenerator().wasServiceAccessed(); 117 } 118 119 private void resetStyleService() { 120 getEmailContentGenerator().resetServiceAccessed(); 121 } 122 123 public int immediateReminderEmailsSent(String networkId, Long documentId, String actionRequestCd) { 124 KimPrincipal principal = KIMServiceLocator.getIdentityManagementService().getPrincipalByPrincipalName(networkId); 125 List actionItemsSentUser = immediateReminders.get(principal.getPrincipalId()); 126 if (actionItemsSentUser == null) { 127 return 0; 128 } 129 int emailsSent = 0; 130 for (Iterator iter = actionItemsSentUser.iterator(); iter.hasNext();) { 131 ActionItem actionItem = (ActionItem) iter.next(); 132 if (actionItem.getRouteHeaderId().equals(documentId) && actionItem.getActionRequestCd().equals(actionRequestCd)) { 133 emailsSent++; 134 } 135 } 136 return emailsSent; 137 } 138 139 @Override 140 protected MockStyleableEmailContentService getEmailContentGenerator() { 141 return (MockStyleableEmailContentService) super.getEmailContentGenerator(); 142 } 143 }