001 /* 002 * Copyright 2007 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.NotificationProducer; 019 import org.kuali.rice.kew.util.KEWConstants; 020 021 022 /** 023 * This class houses all constants for the NotificationSystem. 024 * @author Kuali Rice Team (rice.collab@kuali.org) 025 */ 026 public class NotificationConstants { 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 040 /** 041 * Different content types for the Notification System. These are static out of the box content types that have specific UIs built for them. 042 * @author Kuali Rice Team (rice.collab@kuali.org) 043 */ 044 public static final class CONTENT_TYPES { 045 public static final String EVENT_CONTENT_TYPE = "Event"; 046 public static final String SIMPLE_CONTENT_TYPE = "Simple"; 047 } 048 049 /** 050 * Different delivery types for the Notification System. 051 * FYI - user gets notification in list, but can remove without actually viewing details and taking action 052 * ACK - user gets notification in list, but has to view details and conciously press the acknowledge button 053 * @author Kuali Rice Team (rice.collab@kuali.org) 054 */ 055 public static final class DELIVERY_TYPES { 056 public static final String FYI = "FYI"; 057 public static final String ACK = "ACK"; 058 } 059 060 /** 061 * String that indicates the cause of a dismissal of a messageDelivery was 062 * due to autoremoval 063 */ 064 public static final String AUTO_REMOVE_CAUSE = "autoremove"; 065 public static final String ACK_CAUSE = "ack"; 066 public static final String FYI_CAUSE = "fyi"; 067 068 /** 069 * This class holds constants for different detail views of a notification. 070 * INLINE - display the details inline (i.e. without any menus around them) 071 * NORMAL_VIEW - display the details in a normal view with all of the appropriate menus 072 * @author Kuali Rice Team (rice.collab@kuali.org) 073 */ 074 public static final class NOTIFICATION_DETAIL_VIEWS { 075 public static final String NORMAL_VIEW = "displayActionListView"; 076 public static final String INLINE = "displayActionListInlineView"; 077 public static final String DOC_SEARCH_VIEW = "displayDocSearchView"; 078 } 079 080 /** 081 * Constants for request processing (web layer). 082 * @author Kuali Rice Team (rice.collab@kuali.org) 083 */ 084 public static final class NOTIFICATION_CONTROLLER_CONSTANTS { 085 public static final String MSG_DELIVERY_ID = "messageDeliveryId"; 086 public static final String DELIVERER_ID = "delivererId"; 087 public static final String DOC_ID = "docId"; 088 public static final String COMMAND = "command"; 089 public static final String STANDALONE_WINDOW = "standaloneWindow"; 090 } 091 092 /** 093 * Different delivery status flags for the notification system. 094 * UNDELIVERED - the notification has not been delivered by the delivery machine 095 * DELIVERED - the notification has been delivered by the delivery machine 096 * REMOVED - the notification has been removed by the delivery machine 097 * AUTO_REMOVED - the notification was auto removed by the delivery machine 098 * @author Kuali Rice Team (rice.collab@kuali.org) 099 */ 100 public static final class MESSAGE_DELIVERY_STATUS { 101 public static final String UNDELIVERED = "UNDELIVERED"; 102 public static final String DELIVERED = "DELIVERED"; 103 public static final String REMOVED = "REMOVED"; 104 public static final String AUTO_REMOVED = "AUTO_REMOVED"; 105 } 106 107 /** 108 * Different message delivery types for the notification system. 109 * KEW_ACTION_LIST_MESSAGE_DELIVERY_TYPE - the KEW action list 110 * DEFAULT_MESSAGE_DELIVERY_TYPE - the default message delivery type 111 * @author Kuali Rice Team (rice.collab@kuali.org) 112 */ 113 public static final class MESSAGE_DELIVERY_TYPES { 114 public static final String KEW_ACTION_LIST_MESSAGE_DELIVERY_TYPE = "KEWActionList"; 115 public static final String DEFAULT_MESSAGE_DELIVERY_TYPE = KEW_ACTION_LIST_MESSAGE_DELIVERY_TYPE; 116 } 117 118 /** 119 * Different recipient types for the notification system. 120 * USER - the notification specifically has a user as one of its recipients 121 * GROUP - the notification specifically has a group as one of its recipients 122 * @author Kuali Rice Team (rice.collab@kuali.org) 123 */ 124 public static final class RECIPIENT_TYPES { 125 public static final String USER = "USER"; 126 public static final String GROUP = "GROUP"; 127 } 128 129 /** 130 * Different processing flags for the notification system. 131 * RESOLVED - the notification has been resolved by the system and specific message deliveries have been created 132 * UNRESOLVED - the notification has not been resolved by the system 133 * @author Kuali Rice Team (rice.collab@kuali.org) 134 */ 135 public static final class PROCESSING_FLAGS { 136 public static final String RESOLVED = "RESOLVED"; 137 public static final String UNRESOLVED = "UNRESOLVED"; 138 } 139 140 /** 141 * Flags for record locking 142 * @author Kuali Rice Team (rice.collab@kuali.org) 143 */ 144 public static final class LOCKED_FLAG { 145 public static final String UNLOCKED = "U"; 146 public static final String LOCKED = "L"; 147 } 148 149 /** 150 * Different response statuses for sending notifications. 151 * SUCCESS - the notification message was successfully received and will be processed and delivered by the system 152 * FAILURE - the notification message was received but there were problems and it will not be processed and delivered by the system. 153 * @author Kuali Rice Team (rice.collab@kuali.org) 154 */ 155 public static final class RESPONSE_STATUSES { 156 public static final String SUCCESS = "Success"; 157 public static final String FAILURE = "Failure"; 158 } 159 160 /** 161 * Different response messages for sending notifications. 162 * @author Kuali Rice Team (rice.collab@kuali.org) 163 */ 164 public static final class RESPONSE_MESSAGES { 165 public static final String SUCCESSFULLY_RECEIVED = "The notification message has been successfully received by the system and will be processed and delivered."; 166 public static final String PRODUCER_NOT_AUTHORIZED_FOR_CHANNEL = "The notification message was received by the system; however, " + 167 "we cannot process it because the Producer specified cannot send notifications for the Notification Channel specified."; 168 public static final String INVALID_RECIPIENT = "The notification message was received by the system; however, we cannot process it because one of " + 169 "the recipients that was specified was invalid and is not registered in the system."; 170 public static final String ERROR_SAVING_NOTIFICATION = "The notification message was received by the system; however, we cannot process it because " + 171 "there was a problem when trying to save the notification to the database."; 172 public static final String INVALID_DELIVERY_TYPE = "The notification message was received by the system; however, we cannot process it because " + 173 "the specified delivery type was invalid."; 174 public static final String INVALID_REMOVE_DATE = "The notification message was received by the system; however, we cannot process it because " + 175 "the specified auto-remove date is before the send date."; 176 } 177 178 /** 179 * This class houses constants that represent the property names for the business objects. This should 180 * be used for building database queries. 181 * @author Kuali Rice Team (rice.collab@kuali.org) 182 */ 183 public static final class BO_PROPERTY_NAMES { 184 public static final String ID = "id"; 185 public static final String NAME = "name"; 186 public static final String DESCRIPTION = "description"; 187 public static final String NAMESPACE = "namespace"; 188 public static final String CHANNEL_ID = "channel.id"; 189 public static final String RECIPIENT_TYPE = "recipientType"; 190 public static final String RECIPIENT_ID = "recipientId"; 191 public static final String REVIEWER_ID = "reviewerId"; 192 public static final String RECIPIENTS_RECIPIENT_ID = "recipients.recipientId"; 193 public static final String PROPERTY = "property"; 194 public static final String VALUE = "value"; 195 public static final String USER_ID = "userId"; 196 public static final String CONTENT = "content"; 197 public static final String PRODUCER_ID = "producerId"; 198 public static final String CONTENT_TYPE_ID = "contentType.id"; 199 public static final String CONTENT_TYPE_NAME = "contentType.name"; 200 public static final String PROCESSING_FLAG = "processingFlag"; 201 public static final String SEND_DATE_TIME = "sendDateTime"; 202 public static final String NOTIFICATION_AUTO_REMOVE_DATE_TIME = "notification.autoRemoveDateTime"; 203 public static final String MESSAGE_DELIVERY_STATUS = "messageDeliveryStatus"; 204 public static final String LOCKED_DATE = "lockedDate"; 205 // NotificationMessageDelivery 206 public static final String NOTIFICATION = "notification"; 207 public static final String USER_RECIPIENT_ID = "userRecipientId"; 208 public static final String DELIVERY_SYSTEM_ID = "deliverySystemId"; 209 } 210 211 /** 212 * This inner class is used to hold constants needed for KEW integration. 213 * @author Kuali Rice Team (rice.collab@kuali.org) 214 */ 215 public static final class KEW_CONSTANTS { 216 public static final String NOTIFICATION_DOC_TYPE = "KualiNotification"; 217 public static final String NOTIFICATION_SYSTEM_USER = "notsys"; 218 public static final String NOTIFICATION_SYSTEM_USER_NAME = "Notification System"; 219 public static final String NOTIFICATION_SYSTEM_USER_PARAM = "ken.system.user"; 220 public static final String FYI_AD_HOC_ROUTE = KEWConstants.ACTION_REQUEST_FYI_REQ; 221 public static final String ACK_AD_HOC_ROUTE = KEWConstants.ACTION_REQUEST_ACKNOWLEDGE_REQ; 222 public static final String GENERIC_DELIVERY_ANNOTATION = "The notification message has been delivered by the Notification System."; 223 public static final String GENERIC_AUTO_REMOVE_ANNOTATION = "The notification message has been auto-removed by the Notification System."; 224 public static final String NOTIFICATION_ADMIN_GROUP_NAME = "NotificationAdmin"; 225 public static final String SEND_NOTIFICATION_REQ_DOC_TYPE = "SendNotificationRequest"; 226 } 227 228 /** 229 * This inner class is used to hold constants around needed for the default system producer which all channels must be exposed 230 * to for the generic message sending form to work with. 231 * @author Kuali Rice Team (rice.collab@kuali.org) 232 */ 233 public static final class NOTIFICATION_PRODUCERS { 234 public static final NotificationProducer NOTIFICATION_SYSTEM_PRODUCER = buildNotificationSystemProducer(); 235 236 public static final String NOTIFICATION_SYSTEM_PRODUCER_NAME = "Notification System"; 237 public static final String NOTIFICATION_SYSTEM_PRODUCER_DESCRIPTION = "This producer represents messages sent from the general message sending form."; 238 public static final String NOTIFICATION_SYSTEM_PRODUCER_CONTACT_INFO = "admins-notsys@cornell.edu"; 239 240 /** 241 * This method is a helper to build the static NotificationProducer Notification System Producer instance, which is the 242 * default producer that all channels automatically have added to them when they are created. 243 * @return NotificationProducer 244 */ 245 private static final NotificationProducer buildNotificationSystemProducer() { 246 NotificationProducer producer = new NotificationProducer(); 247 producer.setName(NOTIFICATION_SYSTEM_PRODUCER_NAME); 248 producer.setDescription(NOTIFICATION_SYSTEM_PRODUCER_DESCRIPTION); 249 producer.setContactInfo(NOTIFICATION_SYSTEM_PRODUCER_CONTACT_INFO); 250 return producer; 251 } 252 } 253 }