1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kcb.service.impl;
17
18 import java.util.Collection;
19 import java.util.HashMap;
20 import java.util.Map;
21
22 import org.kuali.rice.core.api.exception.RiceRuntimeException;
23 import org.kuali.rice.kcb.bo.RecipientDelivererConfig;
24 import org.kuali.rice.kcb.bo.RecipientPreference;
25 import org.kuali.rice.kcb.deliverer.MessageDeliverer;
26 import org.kuali.rice.kcb.exception.ErrorList;
27 import org.kuali.rice.kcb.service.RecipientPreferenceService;
28
29
30
31
32
33
34 public class RecipientPreferenceServiceImpl extends BusinessObjectServiceImpl implements RecipientPreferenceService {
35
36
37
38 public RecipientPreference getRecipientPreference(String recipientId, String key) {
39 Map<String, String> fields = new HashMap<String, String>(2);
40 fields.put(RecipientPreference.RECIPIENT_FIELD, recipientId);
41 fields.put(RecipientPreference.PROPERTY_FIELD, key);
42
43 Collection<RecipientPreference> prefs = dao.findMatching(RecipientPreference.class, fields);
44 assert(prefs.size() <= 1);
45
46 if (prefs.size() > 0) {
47 return prefs.iterator().next();
48 } else {
49 return null;
50 }
51 }
52
53
54
55
56 public void deleteRecipientPreference(RecipientPreference pref) {
57 dao.delete(pref);
58 }
59
60
61
62
63 public HashMap<String, String> getRecipientPreferences(String recipientId) {
64 Map<String, String> fields = new HashMap<String, String>(1);
65 fields.put(RecipientPreference.RECIPIENT_FIELD, recipientId);
66 HashMap<String, String> prefs = new HashMap<String,String>();
67 Collection<RecipientPreference> userPrefs = dao.findMatching(RecipientPreference.class, fields);
68 for (RecipientPreference p: userPrefs) {
69 prefs.put(p.getProperty(), p.getValue());
70 }
71
72 return prefs;
73 }
74
75
76
77
78 public void saveRecipientPreference(RecipientPreference pref) {
79 dao.save(pref);
80 }
81
82
83
84
85 public void saveRecipientPreferences(String recipientId, HashMap<String, String> prefs, MessageDeliverer deliverer) throws ErrorList {
86 deliverer.validatePreferenceValues(prefs);
87
88 for (Map.Entry<String, String> entry: prefs.entrySet()) {
89 String prop = entry.getKey();
90 String value = entry.getValue();
91
92
93
94
95 RecipientPreference currentPreference = getRecipientPreference(recipientId, prop);
96 if (currentPreference != null) {
97 currentPreference.setRecipientId(recipientId);
98 currentPreference.setProperty(prop);
99 currentPreference.setValue(value);
100 dao.save(currentPreference);
101 } else {
102 RecipientPreference recipientPreference = new RecipientPreference();
103 recipientPreference.setRecipientId(recipientId);
104 recipientPreference.setProperty(prop);
105 recipientPreference.setValue(value);
106 dao.save(recipientPreference);
107 }
108 }
109 }
110
111
112
113
114
115
116 public void removeRecipientDelivererConfigs(String recipientId) {
117 Map<String, String> fields = new HashMap<String, String>(1);
118 fields.put(RecipientDelivererConfig.RECIPIENT_ID, recipientId);
119 dao.deleteMatching(RecipientDelivererConfig.class, fields);
120 }
121
122
123
124
125 public void saveRecipientDelivererConfig(String recipientId, String delivererName, String[] channels) {
126 if (channels == null || channels.length == 0) return;
127
128
129
130 for (String channel: channels) {
131 RecipientDelivererConfig config = new RecipientDelivererConfig();
132
133 config.setRecipientId(recipientId);
134 config.setDelivererName(delivererName);
135 config.setChannel(channel);
136
137
138 Collection<RecipientDelivererConfig> deliverers = getDeliverersForRecipientAndChannel(recipientId, channel);
139 if (deliverers != null) {
140 for (RecipientDelivererConfig deliverer : deliverers) {
141 if (deliverer.getDelivererName().equals(delivererName)) {
142 throw new RiceRuntimeException("Attempting to save a duplicate Recipient Deliverer Config.");
143 }
144 }
145 }
146 dao.save(config);
147 }
148 }
149
150
151
152
153 public Collection<RecipientDelivererConfig> getDeliverersForRecipient(String recipientId) {
154 Map<String, String> fields = new HashMap<String, String>(1);
155 fields.put(RecipientDelivererConfig.RECIPIENT_ID, recipientId);
156 return dao.findMatching(RecipientDelivererConfig.class, fields);
157 }
158
159
160
161
162 public Collection<RecipientDelivererConfig> getDeliverersForRecipientAndChannel(String recipientId, String channel) {
163 Map<String, String> fields = new HashMap<String, String>(1);
164 fields.put(RecipientDelivererConfig.RECIPIENT_ID, recipientId);
165 fields.put(RecipientDelivererConfig.CHANNEL, channel);
166
167 return dao.findMatching(RecipientDelivererConfig.class, fields);
168 }
169 }