View Javadoc
1   /**
2    * Copyright 2005-2015 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.ken.service;
17  
18  import org.kuali.rice.core.api.util.xml.XmlException;
19  import org.kuali.rice.ken.bo.NotificationBo;
20  import org.kuali.rice.ken.bo.NotificationResponseBo;
21  
22  import java.io.IOException;
23  import java.util.Collection;
24  
25  /**
26   * The NotificationService class is responsible for processing notification messages 
27   * that come into the system.  It also is able to retrieve notifications that have 
28   * already been entered/processed by the system.
29   * 
30   * @author Kuali Rice Team (rice.collab@kuali.org)
31   */
32  public interface NotificationService {
33      /**
34       * This method allows consumers to send notification messages.  This particular service 
35       * accepts the XML format of the notification and then marshals it out into the actual 
36       * business object construct, for further processing.  The response is also sent back as 
37       * a String of XML.
38       * @param notificationMessageAsXml
39       * @return NotificationResponse response object
40       */
41      public NotificationResponseBo sendNotification(String notificationMessageAsXml) throws IOException, XmlException;
42      
43      /**
44       * This method allows consumers to send notification messages.  This particular service 
45       * accepts the actual business object.
46       * @param notification
47       * @return NotificationResponse
48       */
49      public NotificationResponseBo sendNotification(NotificationBo notification);
50      
51      /**
52       * This method will retrieve a Notification object from the system, given the id of the 
53       * actual notification record.
54       * @param id
55       * @return Notification
56       */
57      public NotificationBo getNotification(Long id);
58      
59      /**
60       * This method will retrieve a collection of notifications given a contentTypeName and recipientId.
61       * @param contentTypeName the name of the content type
62       * @param recipientId the recipient id
63       * @return Collection of notifications
64       */
65      public Collection<NotificationBo> getNotificationsForRecipientByType(String contentTypeName, String recipientId);
66      
67      /**
68       * This method will "dismiss"/remove a NotificationMessageDelivery with the specified cause.
69       * @param id the id of the NotificationMessageDelivery that was acted upon
70       * @param user the user or entity that performed the dismissal
71       * @param cause the cause of the dismissal (e.g. an end user action or auto-removal by the system)
72       */
73      public void dismissNotificationMessageDelivery(Long id, String user, String cause);
74      
75      
76      /**
77       * This method is responsible for atomically finding all untaken, unresolved notifications that are ready to be sent,
78       * marking them as taken and returning them to the caller for processing.
79       * NOTE: it is important that this method execute in a SEPARATE dedicated transaction; either the caller should
80       * NOT be wrapped by Spring declarative transaction and this service should be wrapped (which is the case), or
81       * the caller should arrange to invoke this from within a newly created transaction).
82       * @return a list of notifications to be resolved that have been marked as taken by the caller
83       */
84      public Collection<NotificationBo> takeNotificationsForResolution();
85      
86      /**
87       * Unlocks specified notification
88       * @param notification the notification object to unlock
89       */
90      public void unlockNotification(NotificationBo notification);
91  }