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