1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package mocks;
17  
18  import java.util.ArrayList;
19  import java.util.Collection;
20  import java.util.HashMap;
21  import java.util.Iterator;
22  import java.util.List;
23  import java.util.Map;
24  
25  import org.apache.log4j.Logger;
26  import org.joda.time.DateTime;
27  import org.kuali.rice.core.mail.Mailer;
28  import org.kuali.rice.kew.api.action.ActionItem;
29  import org.kuali.rice.kew.api.action.ActionRequestType;
30  import org.kuali.rice.kew.mail.service.EmailContentService;
31  import org.kuali.rice.kew.api.KewApiConstants;
32  import org.kuali.rice.kim.api.identity.Person;
33  import org.kuali.rice.kim.api.identity.principal.Principal;
34  import org.kuali.rice.kim.api.services.KimApiServiceLocator;
35  
36  
37  public class MockEmailNotificationServiceImpl 
38      private static final Logger LOG = Logger.getLogger(MockEmailNotificationServiceImpl.class);
39  
40      private static Map<String,List> immediateReminders = new HashMap<String,List>();
41      private static Map<String,Integer> aggregateReminderCount = new HashMap<String,Integer>();
42      public static boolean SEND_DAILY_REMINDER_CALLED = false;
43      public static boolean SEND_WEEKLY_REMINDER_CALLED = false;
44  
45      private EmailContentService contentService;
46      private String deploymentEnvironment;
47  
48  	private Mailer mailer;
49  
50      
51  
52  
53      public void resetReminderCounts() {
54          aggregateReminderCount.clear();
55          immediateReminders.clear();
56      }
57  
58      
59  
60  
61  
62      @Override
63      public void sendImmediateReminder(ActionItem actionItem, Boolean skipOnApprovals) {
64          if (skipOnApprovals != null && skipOnApprovals.booleanValue()
65                  && actionItem.getActionRequestCd().equals(KewApiConstants.ACTION_REQUEST_APPROVE_REQ)) {
66              LOG.debug("As requested, skipping immediate reminder notification on action item approval for " + actionItem.getPrincipalId());
67              return;
68          }
69          List actionItemsSentUser = (List)immediateReminders.get(actionItem.getPrincipalId());
70          if (actionItemsSentUser == null) {
71              actionItemsSentUser = new ArrayList();
72              immediateReminders.put(actionItem.getPrincipalId(), actionItemsSentUser);
73          }
74          actionItemsSentUser.add(actionItem);
75      }
76  
77      
78  
79  
80      
81      protected boolean sendActionListEmailNotification() {
82  
83          return true;
84      }
85  
86      @Override
87  	public void sendDailyReminder() {
88          try {
89              getEmailContentGenerator().generateWeeklyReminder(null, null);
90          }
91          catch (NullPointerException npe) {}
92  
93          List<ActionItem> actionItems = new ArrayList<ActionItem>(1);
94          actionItems.add(ActionItem.Builder.create("ai1", "ai2", "ai3", new DateTime(), "ai4", "ai5", "ai6", "ai7", "ai8").build());
95          sendPeriodicReminder(null, actionItems, KewApiConstants.EMAIL_RMNDR_DAY_VAL);
96          
97  		SEND_DAILY_REMINDER_CALLED = true;
98      }
99  
100     @Override
101     public void sendWeeklyReminder() {
102         try {
103             getEmailContentGenerator().generateWeeklyReminder(null, null);
104         }
105         catch (NullPointerException npe) {}
106         List<ActionItem> actionItems = new ArrayList<ActionItem>(1);
107         actionItems.add(ActionItem.Builder.create("ai1", "ai2", "ai3", new DateTime(), "ai4", "ai5", "ai6", "ai7", "ai8").build());
108         sendPeriodicReminder(null, actionItems, KewApiConstants.EMAIL_RMNDR_WEEK_VAL);
109         
110     	SEND_WEEKLY_REMINDER_CALLED = true;
111     }
112 
113     @Override
114     public void scheduleBatchEmailReminders() throws Exception {
115         
116     }
117 
118     
119     protected void sendPeriodicReminder(Person user, Collection<ActionItem> actionItems, String emailSetting) {
120         
121         if (!aggregateReminderCount.containsKey(emailSetting)) {
122             aggregateReminderCount.put(emailSetting, actionItems.size());
123         } else {
124             aggregateReminderCount.put(emailSetting, aggregateReminderCount.get(emailSetting) + actionItems.size());
125         }
126     }
127 
128     public Integer getTotalPeriodicRemindersSent(String emailReminderConstant) {
129         Integer returnVal = aggregateReminderCount.get(emailReminderConstant);
130         if (returnVal == null) {
131             returnVal = Integer.valueOf(0);
132         }
133         return returnVal;
134     }
135 
136     public Integer getTotalPeriodicRemindersSent() {
137         int total = 0;
138         for (Map.Entry<String, Integer> mapEntry : aggregateReminderCount.entrySet()) {
139             Integer value = mapEntry.getValue();
140             total += (value == null) ? 0 : value.intValue();
141         }
142         return Integer.valueOf(total);
143     }
144 
145     public boolean wasStyleServiceAccessed() {
146         return getEmailContentGenerator().wasServiceAccessed();
147     }
148 
149     private void resetStyleService() {
150         getEmailContentGenerator().resetServiceAccessed();
151     }
152 
153     public int immediateReminderEmailsSent(String networkId, String documentId, String actionRequestCd) {
154         Principal principal = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName(networkId);
155         List actionItemsSentUser = immediateReminders.get(principal.getPrincipalId());
156         if (actionItemsSentUser == null) {
157             return 0;
158         }
159         int emailsSent = 0;
160         for (Iterator iter = actionItemsSentUser.iterator(); iter.hasNext();) {
161             ActionItem actionItem = (ActionItem) iter.next();
162             if (actionItem.getDocumentId().equals(documentId) && actionItem.getActionRequestCd().equals(actionRequestCd)) {
163                 emailsSent++;
164             }
165         }
166         return emailsSent;
167     }
168 
169     public void setEmailContentGenerator(EmailContentService contentService) {
170         this.contentService = contentService;
171     }
172 
173     protected MockStyleableEmailContentService getEmailContentGenerator() {
174         return (MockStyleableEmailContentService) contentService;
175     }
176 
177 	public void setMailer(Mailer mailer){
178 		this.mailer = mailer;
179 	}
180 
181 	public void setDeploymentEnvironment(String deploymentEnvironment) {
182 		this.deploymentEnvironment = deploymentEnvironment;
183 	}
184 }