001 /**
002 * Copyright 2005-2011 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.core.api.CoreConstants;
019 import org.kuali.rice.ken.bo.NotificationProducer;
020 import org.kuali.rice.kew.api.KewApiConstants;
021 import org.kuali.rice.kim.api.KimApiConstants;
022
023 /**
024 * This class houses all constants for the NotificationSystem.
025 * @author Kuali Rice Team (rice.collab@kuali.org)
026 */
027 public final class NotificationConstants {
028
029 /**
030 * This inner class holds contants that are used for parsing and resolving of content
031 * inside of the XML message format that represents a notification request.
032 * @author Kuali Rice Team (rice.collab@kuali.org)
033 */
034 public static final class XML_MESSAGE_CONSTANTS {
035 public static final String MESSAGE_OPEN = "<message><![CDATA[";
036 public static final String MESSAGE_CLOSE = "]]></message>";
037 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\">";
038 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\">";
039 public static final String CONTENT_CLOSE = "</content>";
040
041 private XML_MESSAGE_CONSTANTS() {
042 throw new UnsupportedOperationException("do not call");
043 }
044 }
045
046 /**
047 * Different content types for the Notification System. These are static out of the box content types that have specific UIs built for them.
048 * @author Kuali Rice Team (rice.collab@kuali.org)
049 */
050 public static final class CONTENT_TYPES {
051 public static final String EVENT_CONTENT_TYPE = "Event";
052 public static final String SIMPLE_CONTENT_TYPE = "Simple";
053
054 private CONTENT_TYPES() {
055 throw new UnsupportedOperationException("do not call");
056 }
057 }
058
059 /**
060 * Different delivery types for the Notification System.
061 * FYI - user gets notification in list, but can remove without actually viewing details and taking action
062 * ACK - user gets notification in list, but has to view details and conciously press the acknowledge button
063 * @author Kuali Rice Team (rice.collab@kuali.org)
064 */
065 public static final class DELIVERY_TYPES {
066 public static final String FYI = "FYI";
067 public static final String ACK = "ACK";
068
069 private DELIVERY_TYPES() {
070 throw new UnsupportedOperationException("do not call");
071 }
072 }
073
074 /**
075 * String that indicates the cause of a dismissal of a messageDelivery was
076 * due to autoremoval
077 */
078 public static final String AUTO_REMOVE_CAUSE = "autoremove";
079 public static final String ACK_CAUSE = "ack";
080 public static final String FYI_CAUSE = "fyi";
081
082 /**
083 * This class holds constants for different detail views of a notification.
084 * INLINE - display the details inline (i.e. without any menus around them)
085 * NORMAL_VIEW - display the details in a normal view with all of the appropriate menus
086 * @author Kuali Rice Team (rice.collab@kuali.org)
087 */
088 public static final class NOTIFICATION_DETAIL_VIEWS {
089 public static final String NORMAL_VIEW = "displayActionListView";
090 public static final String INLINE = "displayActionListInlineView";
091 public static final String DOC_SEARCH_VIEW = "displayDocSearchView";
092
093 private NOTIFICATION_DETAIL_VIEWS() {
094 throw new UnsupportedOperationException("do not call");
095 }
096 }
097
098 /**
099 * 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 }