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.ken.util;
17  
18  import org.kuali.rice.core.api.CoreConstants;
19  import org.kuali.rice.ken.bo.NotificationProducer;
20  import org.kuali.rice.kew.api.KewApiConstants;
21  import org.kuali.rice.kim.api.KimApiConstants;
22  
23  /**
24   * This class houses all constants for the NotificationSystem.
25   * @author Kuali Rice Team (rice.collab@kuali.org)
26   */
27  public final class NotificationConstants {
28  
29      /**
30       * This inner class holds contants that are used for parsing and resolving of content 
31       * inside of the XML message format that represents a notification request.
32       * @author Kuali Rice Team (rice.collab@kuali.org)
33       */
34      public static final class XML_MESSAGE_CONSTANTS {
35          public static final String MESSAGE_OPEN = "<message><![CDATA[";
36          public static final String MESSAGE_CLOSE = "]]></message>";
37          public static final String CONTENT_SIMPLE_OPEN = "<content xmlns=\"ns:notification/ContentTypeSimple\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"ns:notification/ContentTypeSimple resource:notification/ContentTypeSimple\">";
38          public static final String CONTENT_EVENT_OPEN = "<content xmlns=\"ns:notification/ContentTypeEvent\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"ns:notification/ContentTypeEvent resource:notification/ContentTypeEvent\">";
39          public static final String CONTENT_CLOSE = "</content>";
40  
41          private XML_MESSAGE_CONSTANTS() {
42              throw new UnsupportedOperationException("do not call");
43          }
44      }
45  
46      /**
47       * Different content types for the Notification System.  These are static out of the box content types that have specific UIs built for them.
48   * @author Kuali Rice Team (rice.collab@kuali.org)
49       */
50      public static final class CONTENT_TYPES {
51          public static final String EVENT_CONTENT_TYPE = "Event";
52          public static final String SIMPLE_CONTENT_TYPE = "Simple";
53  
54          private CONTENT_TYPES() {
55              throw new UnsupportedOperationException("do not call");
56          }
57      }
58  
59      /**
60       * Different delivery types for the Notification System.
61       * FYI - user gets notification in list, but can remove without actually viewing details and taking action
62       * ACK - user gets notification in list, but has to view details and conciously press the acknowledge button
63   * @author Kuali Rice Team (rice.collab@kuali.org)
64       */
65      public static final class DELIVERY_TYPES {
66          public static final String FYI = "FYI";
67          public static final String ACK = "ACK";
68  
69          private DELIVERY_TYPES() {
70              throw new UnsupportedOperationException("do not call");
71          }
72      }
73  
74      /**
75       * String that indicates the cause of a dismissal of a messageDelivery was
76       * due to autoremoval
77       */
78      public static final String AUTO_REMOVE_CAUSE = "autoremove";
79      public static final String ACK_CAUSE = "ack";
80      public static final String FYI_CAUSE = "fyi";
81  
82      /**
83       * This class holds constants for different detail views of a notification.
84       * INLINE - display the details inline (i.e. without any menus around them)
85       * NORMAL_VIEW - display the details in a normal view with all of the appropriate menus
86   * @author Kuali Rice Team (rice.collab@kuali.org)
87       */
88      public static final class NOTIFICATION_DETAIL_VIEWS {
89          public static final String NORMAL_VIEW = "displayActionListView";
90          public static final String INLINE = "displayActionListInlineView";
91          public static final String DOC_SEARCH_VIEW = "displayDocSearchView";
92  
93          private NOTIFICATION_DETAIL_VIEWS() {
94              throw new UnsupportedOperationException("do not call");
95          }
96      }
97  
98      /**
99       * Constants for request processing (web layer).
100  * @author Kuali Rice Team (rice.collab@kuali.org)
101      */
102     public static final class NOTIFICATION_CONTROLLER_CONSTANTS {
103         public static final String MSG_DELIVERY_ID = "messageDeliveryId";
104         public static final String DELIVERER_ID = "delivererId";
105         public static final String DOC_ID = "docId";
106         public static final String COMMAND = "command";
107         public static final String STANDALONE_WINDOW = "standaloneWindow";
108 
109         private NOTIFICATION_CONTROLLER_CONSTANTS() {
110             throw new UnsupportedOperationException("do not call");
111         }
112     }
113 
114     /**
115      * Different delivery status flags for the notification system.
116      * UNDELIVERED - the notification has not been delivered by the delivery machine
117      * DELIVERED - the notification has been delivered by the delivery machine
118      * REMOVED - the notification has been removed by the delivery machine
119      * AUTO_REMOVED - the notification was auto removed by the delivery machine
120  * @author Kuali Rice Team (rice.collab@kuali.org)
121      */
122     public static final class MESSAGE_DELIVERY_STATUS {
123         public static final String UNDELIVERED = "UNDELIVERED";
124         public static final String DELIVERED = "DELIVERED";
125         public static final String REMOVED = "REMOVED";
126         public static final String AUTO_REMOVED = "AUTO_REMOVED";
127 
128         private MESSAGE_DELIVERY_STATUS() {
129             throw new UnsupportedOperationException("do not call");
130         }
131     }
132 
133     /**
134      * Different message delivery types for the notification system.
135      * KEW_ACTION_LIST_MESSAGE_DELIVERY_TYPE - the KEW action list
136      * DEFAULT_MESSAGE_DELIVERY_TYPE - the default message delivery type
137  * @author Kuali Rice Team (rice.collab@kuali.org)
138      */
139     public static final class MESSAGE_DELIVERY_TYPES {
140         public static final String KEW_ACTION_LIST_MESSAGE_DELIVERY_TYPE = "KEWActionList"; 
141         public static final String DEFAULT_MESSAGE_DELIVERY_TYPE = KEW_ACTION_LIST_MESSAGE_DELIVERY_TYPE;
142 
143         private MESSAGE_DELIVERY_TYPES() {
144             throw new UnsupportedOperationException("do not call");
145         }
146     }
147 
148     /**
149      * Different recipient types for the notification system.
150      * USER - the notification specifically has a user as one of its recipients
151      * GROUP - the notification specifically has a group as one of its recipients
152  * @author Kuali Rice Team (rice.collab@kuali.org)
153      */
154     public static final class RECIPIENT_TYPES {
155         public static final String USER = "USER";
156         public static final String GROUP = "GROUP";
157 
158         private RECIPIENT_TYPES() {
159             throw new UnsupportedOperationException("do not call");
160         }
161     }
162 
163     /**
164      * Different processing flags for the notification system.
165      * RESOLVED - the notification has been resolved by the system and specific message deliveries have been created
166      * UNRESOLVED - the notification has not been resolved by the system
167  * @author Kuali Rice Team (rice.collab@kuali.org)
168      */
169     public static final class PROCESSING_FLAGS {
170         public static final String RESOLVED = "RESOLVED";
171         public static final String UNRESOLVED = "UNRESOLVED";
172 
173         private PROCESSING_FLAGS() {
174             throw new UnsupportedOperationException("do not call");
175         }
176     }
177 
178     /**
179      * Flags for record locking
180  * @author Kuali Rice Team (rice.collab@kuali.org)
181      */
182     public static final class LOCKED_FLAG {
183         public static final String UNLOCKED = "U";
184         public static final String LOCKED = "L";
185 
186         private LOCKED_FLAG() {
187             throw new UnsupportedOperationException("do not call");
188         }
189     }
190 
191     /**
192      * Different response statuses for sending notifications.
193      * SUCCESS - the notification message was successfully received and will be processed and delivered by the system
194      * FAILURE - the notification message was received but there were problems and it will not be processed and delivered by the system.
195  * @author Kuali Rice Team (rice.collab@kuali.org)
196      */
197     public static final class RESPONSE_STATUSES {
198         public static final String SUCCESS = "Success";
199         public static final String FAILURE = "Failure";
200 
201         private RESPONSE_STATUSES() {
202             throw new UnsupportedOperationException("do not call");
203         }
204     }
205 
206     /**
207      * Different response messages for sending notifications.
208  * @author Kuali Rice Team (rice.collab@kuali.org)
209      */
210     public static final class RESPONSE_MESSAGES {
211         public static final String SUCCESSFULLY_RECEIVED = "The notification message has been successfully received by the system and will be processed and delivered.";
212         public static final String PRODUCER_NOT_AUTHORIZED_FOR_CHANNEL = "The notification message was received by the system; however, " +
213             "we cannot process it because the Producer specified cannot send notifications for the Notification Channel specified.";
214         public static final String INVALID_RECIPIENT = "The notification message was received by the system; however, we cannot process it because one of " +
215             "the recipients that was specified was invalid and is not registered in the system.";
216         public static final String ERROR_SAVING_NOTIFICATION = "The notification message was received by the system; however, we cannot process it because " +
217             "there was a problem when trying to save the notification to the database.";
218         public static final String INVALID_DELIVERY_TYPE = "The notification message was received by the system; however, we cannot process it because " +
219             "the specified delivery type was invalid.";
220         public static final String INVALID_REMOVE_DATE = "The notification message was received by the system; however, we cannot process it because " +
221     "the specified auto-remove date is before the send date.";
222 
223         private RESPONSE_MESSAGES() {
224             throw new UnsupportedOperationException("do not call");
225         }
226     }
227 
228     /**
229      * This class houses constants that represent the property names for the business objects.  This should 
230      * be used for building database queries.
231  * @author Kuali Rice Team (rice.collab@kuali.org)
232      */
233     public static final class BO_PROPERTY_NAMES {
234         public static final String ID = "id";
235         public static final String NAME = "name";
236         public static final String DESCRIPTION = "description";
237         public static final String NAMESPACE = "namespace";
238         public static final String CHANNEL_ID = "channel.id";
239         public static final String RECIPIENT_TYPE = "recipientType";
240         public static final String RECIPIENT_ID = "recipientId";
241         public static final String REVIEWER_ID = "reviewerId";
242         public static final String RECIPIENTS_RECIPIENT_ID = "recipients.recipientId";
243         public static final String PROPERTY = "property";
244         public static final String VALUE = "value";
245         public static final String USER_ID = "userId";
246         public static final String CONTENT = "content";
247         public static final String PRODUCER_ID = "producerId";
248         public static final String CONTENT_TYPE_ID = "contentType.id";
249         public static final String CONTENT_TYPE_NAME = "contentType.name";
250         public static final String PROCESSING_FLAG = "processingFlag";
251         public static final String SEND_DATE_TIME = "sendDateTime";
252         public static final String NOTIFICATION_AUTO_REMOVE_DATE_TIME = "notification.autoRemoveDateTime";
253         public static final String MESSAGE_DELIVERY_STATUS = "messageDeliveryStatus";
254         public static final String LOCKED_DATE = "lockedDate";
255         // NotificationMessageDelivery
256         public static final String NOTIFICATION = "notification";
257         public static final String USER_RECIPIENT_ID = "userRecipientId";
258         public static final String DELIVERY_SYSTEM_ID = "deliverySystemId";
259 
260         private BO_PROPERTY_NAMES() {
261             throw new UnsupportedOperationException("do not call");
262         }
263     }
264 
265     /**
266      * This inner class is used to hold constants needed for KEW integration.
267  * @author Kuali Rice Team (rice.collab@kuali.org)
268      */
269     public static final class KEW_CONSTANTS {
270         public static final String NOTIFICATION_DOC_TYPE = "KualiNotification";
271         public static final String NOTIFICATION_SYSTEM_USER = "notsys";
272         public static final String NOTIFICATION_SYSTEM_USER_NAME = "Notification System";
273         public static final String NOTIFICATION_SYSTEM_USER_PARAM = "ken.system.user";
274         public static final String FYI_AD_HOC_ROUTE = KewApiConstants.ACTION_REQUEST_FYI_REQ;
275         public static final String ACK_AD_HOC_ROUTE = KewApiConstants.ACTION_REQUEST_ACKNOWLEDGE_REQ;
276         public static final String GENERIC_DELIVERY_ANNOTATION = "The notification message has been delivered by the Notification System.";
277         public static final String GENERIC_AUTO_REMOVE_ANNOTATION = "The notification message has been auto-removed by the Notification System.";
278         public static final String NOTIFICATION_ADMIN_GROUP_NAME = "NotificationAdmin";
279         public static final String SEND_NOTIFICATION_REQ_DOC_TYPE = "SendNotificationRequest";
280 
281         private KEW_CONSTANTS() {
282             throw new UnsupportedOperationException("do not call");
283         }
284     }
285 
286     /**
287      * This inner class is used to hold constants around needed for the default system producer which all channels must be exposed 
288      * to for the generic message sending form to work with.
289  * @author Kuali Rice Team (rice.collab@kuali.org)
290      */
291     public static final class NOTIFICATION_PRODUCERS {
292         public static final NotificationProducer NOTIFICATION_SYSTEM_PRODUCER = buildNotificationSystemProducer();
293 
294         public static final String NOTIFICATION_SYSTEM_PRODUCER_NAME = "Notification System";
295         public static final String NOTIFICATION_SYSTEM_PRODUCER_DESCRIPTION = "This producer represents messages sent from the general message sending form.";
296         public static final String NOTIFICATION_SYSTEM_PRODUCER_CONTACT_INFO = "admins-notsys@cornell.edu";
297 
298         /**
299          * This method is a helper to build the static NotificationProducer Notification System Producer instance, which is the 
300          * default producer that all channels automatically have added to them when they are created.
301          * @return NotificationProducer
302          */
303         private static final NotificationProducer buildNotificationSystemProducer() {
304             NotificationProducer producer = new NotificationProducer();
305             producer.setName(NOTIFICATION_SYSTEM_PRODUCER_NAME);
306             producer.setDescription(NOTIFICATION_SYSTEM_PRODUCER_DESCRIPTION);
307             producer.setContactInfo(NOTIFICATION_SYSTEM_PRODUCER_CONTACT_INFO);
308             return producer;
309         }
310 
311         private NOTIFICATION_PRODUCERS() {
312             throw new UnsupportedOperationException("do not call");
313         }
314     }
315 }