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