View Javadoc

1   /**
2    * Copyright 2005-2012 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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   * RecipientPreferenceService implementation 
31   * 
32   * @author Kuali Rice Team (rice.collab@kuali.org)
33   */
34  public class RecipientPreferenceServiceImpl extends BusinessObjectServiceImpl implements RecipientPreferenceService {
35      /**
36       * @see org.kuali.rice.kcb.service.RecipientPreferenceService#getRecipientPreference(java.lang.String, java.lang.String)
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       * @see org.kuali.rice.kcb.service.RecipientPreferenceService#deleteRecipientPreference(org.kuali.rice.kcb.bo.RecipientPreference)
55       */
56      public void deleteRecipientPreference(RecipientPreference pref) {
57          dao.delete(pref);
58      }
59  
60      /**
61       * @see org.kuali.rice.kcb.service.RecipientPreferenceService#getRecipientPreferences(java.lang.String)
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       * @see org.kuali.rice.kcb.service.RecipientPreferenceService#saveRecipientPreference(org.kuali.rice.kcb.bo.RecipientPreference)
77       */
78      public void saveRecipientPreference(RecipientPreference pref) {
79          dao.save(pref);
80      }
81  
82      /**
83       * @see org.kuali.rice.kcb.service.RecipientPreferenceService#saveRecipientPreferences(java.lang.String, java.util.HashMap, org.kuali.rice.kcb.deliverer.MessageDeliverer)
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             // We need to check if this property is already set
93             // for the user by checking doing a unique key query...if
94             // it already exists, update, otherwise add it 
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     // deliverer config
112     
113     /**
114      * @see org.kuali.rice.kcb.service.RecipientPreferenceService#removeRecipientDelivererConfigs(java.lang.String)
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      * @see org.kuali.rice.kcb.service.RecipientPreferenceService#saveRecipientDelivererConfig(java.lang.String, java.lang.String, java.lang.String[])
124      */
125     public void saveRecipientDelivererConfig(String recipientId, String delivererName, String[] channels) {
126         if (channels == null || channels.length == 0) return;
127     
128         // if selected[0] is 0 we want to remove this deliverer
129         // for all channels.  We already did that above.
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             // first, verify that we aren't trying to insert a duplicate
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      * @see org.kuali.rice.kcb.service.RecipientPreferenceService#getDeliverersForRecipient(java.lang.String)
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      * @see org.kuali.rice.kcb.service.RecipientPreferenceService#getDeliverersForRecipientAndChannel(java.lang.String, java.lang.String)
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 }