001 package org.kuali.rice.ken.api.notification; 002 003 import java.io.Serializable; 004 import java.util.Collection; 005 import javax.xml.bind.annotation.XmlAccessType; 006 import javax.xml.bind.annotation.XmlAccessorType; 007 import javax.xml.bind.annotation.XmlAnyElement; 008 import javax.xml.bind.annotation.XmlElement; 009 import javax.xml.bind.annotation.XmlRootElement; 010 import javax.xml.bind.annotation.XmlType; 011 import org.kuali.rice.core.api.CoreConstants; 012 import org.kuali.rice.core.api.mo.AbstractDataTransferObject; 013 import org.kuali.rice.core.api.mo.ModelBuilder; 014 import org.w3c.dom.Element; 015 016 @XmlRootElement(name = NotificationRecipient.Constants.ROOT_ELEMENT_NAME) 017 @XmlAccessorType(XmlAccessType.NONE) 018 @XmlType(name = NotificationRecipient.Constants.TYPE_NAME, propOrder = { 019 NotificationRecipient.Elements.NOTIFICATION_ID, 020 NotificationRecipient.Elements.RECIPIENT_TYPE, 021 NotificationRecipient.Elements.RECIPIENT_ID, 022 NotificationRecipient.Elements.ID, 023 CoreConstants.CommonElements.VERSION_NUMBER, 024 CoreConstants.CommonElements.OBJECT_ID, 025 CoreConstants.CommonElements.FUTURE_ELEMENTS 026 }) 027 public final class NotificationRecipient 028 extends AbstractDataTransferObject 029 implements NotificationRecipientContract 030 { 031 032 @XmlElement(name = Elements.NOTIFICATION_ID, required = false) 033 private final Long notificationId; 034 @XmlElement(name = Elements.RECIPIENT_TYPE, required = false) 035 private final String recipientType; 036 @XmlElement(name = Elements.RECIPIENT_ID, required = false) 037 private final String recipientId; 038 @XmlElement(name = Elements.ID, required = false) 039 private final Long id; 040 @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER, required = false) 041 private final Long versionNumber; 042 @XmlElement(name = CoreConstants.CommonElements.OBJECT_ID, required = false) 043 private final String objectId; 044 @SuppressWarnings("unused") 045 @XmlAnyElement 046 private final Collection<Element> _futureElements = null; 047 048 /** 049 * Private constructor used only by JAXB. 050 * 051 */ 052 private NotificationRecipient() { 053 this.notificationId = null; 054 this.recipientType = null; 055 this.recipientId = null; 056 this.id = null; 057 this.versionNumber = null; 058 this.objectId = null; 059 } 060 061 private NotificationRecipient(Builder builder) { 062 this.notificationId = builder.getNotificationId(); 063 this.recipientType = builder.getRecipientType(); 064 this.recipientId = builder.getRecipientId(); 065 this.id = builder.getId(); 066 this.versionNumber = builder.getVersionNumber(); 067 this.objectId = builder.getObjectId(); 068 } 069 070 @Override 071 public Long getNotificationId() { 072 return this.notificationId; 073 } 074 075 @Override 076 public String getRecipientType() { 077 return this.recipientType; 078 } 079 080 @Override 081 public String getRecipientId() { 082 return this.recipientId; 083 } 084 085 @Override 086 public Long getId() { 087 return this.id; 088 } 089 090 @Override 091 public Long getVersionNumber() { 092 return this.versionNumber; 093 } 094 095 @Override 096 public String getObjectId() { 097 return this.objectId; 098 } 099 100 101 /** 102 * A builder which can be used to construct {@link NotificationRecipient} instances. Enforces the constraints of the {@link NotificationRecipientContract}. 103 * 104 */ 105 public final static class Builder 106 implements Serializable, ModelBuilder, NotificationRecipientContract 107 { 108 109 private Long notificationId; 110 private String recipientType; 111 private String recipientId; 112 private Long id; 113 private Long versionNumber; 114 private String objectId; 115 116 private Builder() { 117 // TODO modify this constructor as needed to pass any required values and invoke the appropriate 'setter' methods 118 } 119 120 public static Builder create() { 121 // TODO modify as needed to pass any required values and add them to the signature of the 'create' method 122 return new Builder(); 123 } 124 125 public static Builder create(NotificationRecipientContract contract) { 126 if (contract == null) { 127 throw new IllegalArgumentException("contract was null"); 128 } 129 // TODO if create() is modified to accept required parameters, this will need to be modified 130 Builder builder = create(); 131 builder.setNotificationId(contract.getNotificationId()); 132 builder.setRecipientType(contract.getRecipientType()); 133 builder.setRecipientId(contract.getRecipientId()); 134 builder.setId(contract.getId()); 135 builder.setVersionNumber(contract.getVersionNumber()); 136 builder.setObjectId(contract.getObjectId()); 137 return builder; 138 } 139 140 public NotificationRecipient build() { 141 return new NotificationRecipient(this); 142 } 143 144 @Override 145 public Long getNotificationId() { 146 return this.notificationId; 147 } 148 149 @Override 150 public String getRecipientType() { 151 return this.recipientType; 152 } 153 154 @Override 155 public String getRecipientId() { 156 return this.recipientId; 157 } 158 159 @Override 160 public Long getId() { 161 return this.id; 162 } 163 164 @Override 165 public Long getVersionNumber() { 166 return this.versionNumber; 167 } 168 169 @Override 170 public String getObjectId() { 171 return this.objectId; 172 } 173 174 public void setNotificationId(Long notificationId) { 175 // TODO add validation of input value if required and throw IllegalArgumentException if needed 176 this.notificationId = notificationId; 177 } 178 179 public void setRecipientType(String recipientType) { 180 // TODO add validation of input value if required and throw IllegalArgumentException if needed 181 this.recipientType = recipientType; 182 } 183 184 public void setRecipientId(String recipientId) { 185 // TODO add validation of input value if required and throw IllegalArgumentException if needed 186 this.recipientId = recipientId; 187 } 188 189 public void setId(Long id) { 190 // TODO add validation of input value if required and throw IllegalArgumentException if needed 191 this.id = id; 192 } 193 194 public void setVersionNumber(Long versionNumber) { 195 // TODO add validation of input value if required and throw IllegalArgumentException if needed 196 this.versionNumber = versionNumber; 197 } 198 199 public void setObjectId(String objectId) { 200 // TODO add validation of input value if required and throw IllegalArgumentException if needed 201 this.objectId = objectId; 202 } 203 204 } 205 206 207 /** 208 * Defines some internal constants used on this class. 209 * 210 */ 211 static class Constants { 212 213 final static String ROOT_ELEMENT_NAME = "notificationRecipient"; 214 final static String TYPE_NAME = "NotificationRecipientType"; 215 216 } 217 218 219 /** 220 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML. 221 * 222 */ 223 static class Elements { 224 225 final static String NOTIFICATION_ID = "notificationId"; 226 final static String RECIPIENT_TYPE = "recipientType"; 227 final static String RECIPIENT_ID = "recipientId"; 228 final static String ID = "id"; 229 230 } 231 232 }