001 /**
002 * Copyright 2005-2012 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.ken.util;
017
018 import org.kuali.rice.ken.bo.NotificationProducerBo;
019 import org.kuali.rice.kew.api.KewApiConstants;
020
021 /**
022 * This class houses all constants for the NotificationSystem.
023 * @author Kuali Rice Team (rice.collab@kuali.org)
024 */
025 public final class NotificationConstants {
026
027 /**
028 * This inner class holds contants that are used for parsing and resolving of content
029 * inside of the XML message format that represents a notification request.
030 * @author Kuali Rice Team (rice.collab@kuali.org)
031 */
032 public static final class XML_MESSAGE_CONSTANTS {
033 public static final String MESSAGE_OPEN = "<message><![CDATA[";
034 public static final String MESSAGE_CLOSE = "]]></message>";
035 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\">";
036 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\">";
037 public static final String CONTENT_CLOSE = "</content>";
038
039 private XML_MESSAGE_CONSTANTS() {
040 throw new UnsupportedOperationException("do not call");
041 }
042 }
043
044 /**
045 * Different content types for the Notification System. These are static out of the box content types that have specific UIs built for them.
046 * @author Kuali Rice Team (rice.collab@kuali.org)
047 */
048 public static final class CONTENT_TYPES {
049 public static final String EVENT_CONTENT_TYPE = "Event";
050 public static final String SIMPLE_CONTENT_TYPE = "Simple";
051
052 private CONTENT_TYPES() {
053 throw new UnsupportedOperationException("do not call");
054 }
055 }
056
057 /**
058 * Different delivery types for the Notification System.
059 * FYI - user gets notification in list, but can remove without actually viewing details and taking action
060 * ACK - user gets notification in list, but has to view details and conciously press the acknowledge button
061 * @author Kuali Rice Team (rice.collab@kuali.org)
062 */
063 public static final class DELIVERY_TYPES {
064 public static final String FYI = "FYI";
065 public static final String ACK = "ACK";
066
067 private DELIVERY_TYPES() {
068 throw new UnsupportedOperationException("do not call");
069 }
070 }
071
072 /**
073 * String that indicates the cause of a dismissal of a messageDelivery was
074 * due to autoremoval
075 */
076 public static final String AUTO_REMOVE_CAUSE = "autoremove";
077 public static final String ACK_CAUSE = "ack";
078 public static final String FYI_CAUSE = "fyi";
079
080 /**
081 * This class holds constants for different detail views of a notification.
082 * INLINE - display the details inline (i.e. without any menus around them)
083 * NORMAL_VIEW - display the details in a normal view with all of the appropriate menus
084 * @author Kuali Rice Team (rice.collab@kuali.org)
085 */
086 public static final class NOTIFICATION_DETAIL_VIEWS {
087 public static final String NORMAL_VIEW = "displayActionListView";
088 public static final String INLINE = "displayActionListInlineView";
089 public static final String DOC_SEARCH_VIEW = "displayDocSearchView";
090
091 private NOTIFICATION_DETAIL_VIEWS() {
092 throw new UnsupportedOperationException("do not call");
093 }
094 }
095
096 /**
097 * Constants for request processing (web layer).
098 * @author Kuali Rice Team (rice.collab@kuali.org)
099 */
100 public static final class NOTIFICATION_CONTROLLER_CONSTANTS {
101 public static final String MSG_DELIVERY_ID = "messageDeliveryId";
102 public static final String DELIVERER_ID = "delivererId";
103 public static final String DOC_ID = "docId";
104 public static final String COMMAND = "command";
105 public static final String STANDALONE_WINDOW = "standaloneWindow";
106
107 private NOTIFICATION_CONTROLLER_CONSTANTS() {
108 throw new UnsupportedOperationException("do not call");
109 }
110 }
111
112 /**
113 * Different delivery status flags for the notification system.
114 * UNDELIVERED - the notification has not been delivered by the delivery machine
115 * DELIVERED - the notification has been delivered by the delivery machine
116 * REMOVED - the notification has been removed by the delivery machine
117 * AUTO_REMOVED - the notification was auto removed by the delivery machine
118 * @author Kuali Rice Team (rice.collab@kuali.org)
119 */
120 public static final class MESSAGE_DELIVERY_STATUS {
121 public static final String UNDELIVERED = "UNDELIVERED";
122 public static final String DELIVERED = "DELIVERED";
123 public static final String REMOVED = "REMOVED";
124 public static final String AUTO_REMOVED = "AUTO_REMOVED";
125
126 private MESSAGE_DELIVERY_STATUS() {
127 throw new UnsupportedOperationException("do not call");
128 }
129 }
130
131 /**
132 * Different message delivery types for the notification system.
133 * KEW_ACTION_LIST_MESSAGE_DELIVERY_TYPE - the KEW action list
134 * DEFAULT_MESSAGE_DELIVERY_TYPE - the default message delivery type
135 * @author Kuali Rice Team (rice.collab@kuali.org)
136 */
137 public static final class MESSAGE_DELIVERY_TYPES {
138 public static final String KEW_ACTION_LIST_MESSAGE_DELIVERY_TYPE = "KEWActionList";
139 public static final String DEFAULT_MESSAGE_DELIVERY_TYPE = KEW_ACTION_LIST_MESSAGE_DELIVERY_TYPE;
140
141 private MESSAGE_DELIVERY_TYPES() {
142 throw new UnsupportedOperationException("do not call");
143 }
144 }
145
146 /**
147 * Different recipient types for the notification system.
148 * USER - the notification specifically has a user as one of its recipients
149 * GROUP - the notification specifically has a group as one of its recipients
150 * @author Kuali Rice Team (rice.collab@kuali.org)
151 */
152 public static final class RECIPIENT_TYPES {
153 public static final String USER = "USER";
154 public static final String GROUP = "GROUP";
155
156 private RECIPIENT_TYPES() {
157 throw new UnsupportedOperationException("do not call");
158 }
159 }
160
161 /**
162 * Different processing flags for the notification system.
163 * RESOLVED - the notification has been resolved by the system and specific message deliveries have been created
164 * UNRESOLVED - the notification has not been resolved by the system
165 * @author Kuali Rice Team (rice.collab@kuali.org)
166 */
167 public static final class PROCESSING_FLAGS {
168 public static final String RESOLVED = "RESOLVED";
169 public static final String UNRESOLVED = "UNRESOLVED";
170
171 private PROCESSING_FLAGS() {
172 throw new UnsupportedOperationException("do not call");
173 }
174 }
175
176 /**
177 * Flags for record locking
178 * @author Kuali Rice Team (rice.collab@kuali.org)
179 */
180 public static final class LOCKED_FLAG {
181 public static final String UNLOCKED = "U";
182 public static final String LOCKED = "L";
183
184 private LOCKED_FLAG() {
185 throw new UnsupportedOperationException("do not call");
186 }
187 }
188
189 /**
190 * Different response statuses for sending notifications.
191 * SUCCESS - the notification message was successfully received and will be processed and delivered by the system
192 * FAILURE - the notification message was received but there were problems and it will not be processed and delivered by the system.
193 * @author Kuali Rice Team (rice.collab@kuali.org)
194 */
195 public static final class RESPONSE_STATUSES {
196 public static final String SUCCESS = "Success";
197 public static final String FAILURE = "Failure";
198
199 private RESPONSE_STATUSES() {
200 throw new UnsupportedOperationException("do not call");
201 }
202 }
203
204 /**
205 * Different response messages for sending notifications.
206 * @author Kuali Rice Team (rice.collab@kuali.org)
207 */
208 public static final class RESPONSE_MESSAGES {
209 public static final String SUCCESSFULLY_RECEIVED = "The notification message has been successfully received by the system and will be processed and delivered.";
210 public static final String PRODUCER_NOT_AUTHORIZED_FOR_CHANNEL = "The notification message was received by the system; however, " +
211 "we cannot process it because the Producer specified cannot send notifications for the Notification Channel specified.";
212 public static final String INVALID_RECIPIENT = "The notification message was received by the system; however, we cannot process it because one of " +
213 "the recipients that was specified was invalid and is not registered in the system.";
214 public static final String ERROR_SAVING_NOTIFICATION = "The notification message was received by the system; however, we cannot process it because " +
215 "there was a problem when trying to save the notification to the database.";
216 public static final String INVALID_DELIVERY_TYPE = "The notification message was received by the system; however, we cannot process it because " +
217 "the specified delivery type was invalid.";
218 public static final String INVALID_REMOVE_DATE = "The notification message was received by the system; however, we cannot process it because " +
219 "the specified auto-remove date is before the send date.";
220
221 private RESPONSE_MESSAGES() {
222 throw new UnsupportedOperationException("do not call");
223 }
224 }
225
226 /**
227 * This class houses constants that represent the property names for the business objects. This should
228 * be used for building database queries.
229 * @author Kuali Rice Team (rice.collab@kuali.org)
230 */
231 public static final class BO_PROPERTY_NAMES {
232 public static final String ID = "id";
233 public static final String NAME = "name";
234 public static final String DESCRIPTION = "description";
235 public static final String NAMESPACE = "namespace";
236 public static final String CHANNEL_ID = "channel.id";
237 public static final String RECIPIENT_TYPE = "recipientType";
238 public static final String RECIPIENT_ID = "recipientId";
239 public static final String REVIEWER_ID = "reviewerId";
240 public static final String RECIPIENTS_RECIPIENT_ID = "recipients.recipientId";
241 public static final String PROPERTY = "property";
242 public static final String VALUE = "value";
243 public static final String USER_ID = "userId";
244 public static final String CONTENT = "content";
245 public static final String PRODUCER_ID = "producerId";
246 public static final String CONTENT_TYPE_ID = "contentType.id";
247 public static final String CONTENT_TYPE_NAME = "contentType.name";
248 public static final String PROCESSING_FLAG = "processingFlag";
249 public static final String SEND_DATE_TIME = "sendDateTimeValue";
250 public static final String NOTIFICATION_AUTO_REMOVE_DATE_TIME = "notification.autoRemoveDateTimeValue";
251 public static final String MESSAGE_DELIVERY_STATUS = "messageDeliveryStatus";
252 public static final String LOCKED_DATE = "lockedDateValue";
253 // NotificationMessageDelivery
254 public static final String NOTIFICATION = "notification";
255 public static final String USER_RECIPIENT_ID = "userRecipientId";
256 public static final String DELIVERY_SYSTEM_ID = "deliverySystemId";
257
258 private BO_PROPERTY_NAMES() {
259 throw new UnsupportedOperationException("do not call");
260 }
261 }
262
263 /**
264 * This inner class is used to hold constants needed for KEW integration.
265 * @author Kuali Rice Team (rice.collab@kuali.org)
266 */
267 public static final class KEW_CONSTANTS {
268 public static final String NOTIFICATION_DOC_TYPE = "KualiNotification";
269 public static final String NOTIFICATION_SYSTEM_USER = "notsys";
270 public static final String NOTIFICATION_SYSTEM_USER_NAME = "Notification System";
271 public static final String NOTIFICATION_SYSTEM_USER_PARAM = "ken.system.user";
272 public static final String FYI_AD_HOC_ROUTE = KewApiConstants.ACTION_REQUEST_FYI_REQ;
273 public static final String ACK_AD_HOC_ROUTE = KewApiConstants.ACTION_REQUEST_ACKNOWLEDGE_REQ;
274 public static final String GENERIC_DELIVERY_ANNOTATION = "The notification message has been delivered by the Notification System.";
275 public static final String GENERIC_AUTO_REMOVE_ANNOTATION = "The notification message has been auto-removed by the Notification System.";
276 public static final String NOTIFICATION_ADMIN_GROUP_NAME = "NotificationAdmin";
277 public static final String SEND_NOTIFICATION_REQ_DOC_TYPE = "SendNotificationRequest";
278
279 private KEW_CONSTANTS() {
280 throw new UnsupportedOperationException("do not call");
281 }
282 }
283
284 /**
285 * This inner class is used to hold constants around needed for the default system producer which all channels must be exposed
286 * to for the generic message sending form to work with.
287 * @author Kuali Rice Team (rice.collab@kuali.org)
288 */
289 public static final class NOTIFICATION_PRODUCERS {
290 public static final NotificationProducerBo NOTIFICATION_SYSTEM_PRODUCER = buildNotificationSystemProducer();
291
292 public static final String NOTIFICATION_SYSTEM_PRODUCER_NAME = "Notification System";
293 public static final String NOTIFICATION_SYSTEM_PRODUCER_DESCRIPTION = "This producer represents messages sent from the general message sending form.";
294 public static final String NOTIFICATION_SYSTEM_PRODUCER_CONTACT_INFO = "admins-notsys@cornell.edu";
295
296 /**
297 * This method is a helper to build the static NotificationProducer Notification System Producer instance, which is the
298 * default producer that all channels automatically have added to them when they are created.
299 * @return NotificationProducer
300 */
301 private static final NotificationProducerBo buildNotificationSystemProducer() {
302 NotificationProducerBo producer = new NotificationProducerBo();
303 producer.setName(NOTIFICATION_SYSTEM_PRODUCER_NAME);
304 producer.setDescription(NOTIFICATION_SYSTEM_PRODUCER_DESCRIPTION);
305 producer.setContactInfo(NOTIFICATION_SYSTEM_PRODUCER_CONTACT_INFO);
306 return producer;
307 }
308
309 private NOTIFICATION_PRODUCERS() {
310 throw new UnsupportedOperationException("do not call");
311 }
312 }
313 }