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