001 /* 002 * Copyright 2007-2008 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.bo; 017 018 import org.hibernate.annotations.GenericGenerator; 019 import org.hibernate.annotations.Parameter; 020 import org.kuali.rice.krad.bo.PersistableBusinessObjectBase; 021 022 import javax.persistence.*; 023 import java.util.ArrayList; 024 import java.util.List; 025 026 /** 027 * This class represents and instance of a Notification Channel. A Notification Channel is correlated to a specific class of 028 * notification, or in other words a specific business purpose. For instance, all overdue books from a specific library could 029 * be a channel or a channel for concerts coming to campus could be another channel. 030 * 031 * @author Kuali Rice Team (rice.collab@kuali.org) 032 */ 033 @Entity 034 @Table(name = "KREN_CHNL_T") 035 public class NotificationChannel extends PersistableBusinessObjectBase { 036 @Id 037 @GeneratedValue(generator="KREN_CHNL_S") 038 @GenericGenerator(name="KREN_CHNL_S",strategy="org.hibernate.id.enhanced.SequenceStyleGenerator",parameters={ 039 @Parameter(name="sequence_name",value="KREN_CHNL_S"), 040 @Parameter(name="value_column",value="id") 041 }) 042 @Column(name = "CHNL_ID") 043 private Long id; 044 @Column(name = "NM", nullable = false) 045 private String name; 046 @Column(name = "DESC_TXT", nullable = false) 047 private String description; 048 @Column(name = "SUBSCRB_IND", nullable = false) 049 private boolean subscribable; 050 051 // List references 052 @OneToMany(cascade={CascadeType.REFRESH, CascadeType.DETACH, CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST}, 053 targetEntity=org.kuali.rice.ken.bo.NotificationRecipientList.class, mappedBy="channel") 054 @OrderBy ("id ASC") 055 private List<NotificationRecipientList> recipientLists; 056 057 @ManyToMany(fetch=FetchType.LAZY, cascade={CascadeType.REFRESH, CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST})@JoinTable(name="KREN_CHNL_PRODCR_T", 058 joinColumns=@JoinColumn(name="CHNL_ID"), 059 inverseJoinColumns=@JoinColumn(name="PRODCR_ID")) 060 @OrderBy ("id ASC") 061 private List<NotificationProducer> producers; 062 063 @OneToMany(cascade={CascadeType.REFRESH, CascadeType.DETACH, CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST}, 064 targetEntity=org.kuali.rice.ken.bo.NotificationChannelReviewer.class, mappedBy="channel") 065 @OrderBy ("id ASC") 066 private List<NotificationChannelReviewer> reviewers = new ArrayList<NotificationChannelReviewer>(); 067 068 @OneToMany(cascade={CascadeType.REFRESH, CascadeType.DETACH, CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST}, 069 targetEntity=org.kuali.rice.ken.bo.UserChannelSubscription.class, mappedBy="channel") 070 @OrderBy ("id ASC") 071 private List<UserChannelSubscription> subscriptions = new ArrayList<UserChannelSubscription>(); 072 073 074 /** 075 * Constructs a NotificationChannel instance. 076 */ 077 public NotificationChannel() { 078 super(); 079 recipientLists = new ArrayList<NotificationRecipientList>(); 080 producers = new ArrayList<NotificationProducer>(); 081 } 082 083 /** 084 * Gets the recipientLists attribute. 085 * 086 * @return Returns the recipientLists. 087 */ 088 public List<NotificationRecipientList> getRecipientLists() { 089 return recipientLists; 090 } 091 092 /** 093 * Sets the recipientLists attribute value. 094 * 095 * @param recipientLists 096 * The recipientLists to set. 097 */ 098 public void setRecipientLists(List<NotificationRecipientList> recipientLists) { 099 this.recipientLists = recipientLists; 100 } 101 102 /** 103 * This method adds a recipient list to the overall set of recipient lists that are associated with this channnel. 104 * 105 * @param recipientList 106 */ 107 public void addRecipientList(NotificationRecipientList recipientList) { 108 this.recipientLists.add(recipientList); 109 } 110 111 /** 112 * This method removes a recipient list object from the overall list. 113 * 114 * @param recipientList 115 */ 116 public void removeRecipientList(NotificationRecipientList recipientList) { 117 this.recipientLists.remove(recipientList); 118 } 119 120 /** 121 * Gets the description attribute. 122 * 123 * @return Returns the description. 124 */ 125 public String getDescription() { 126 return description; 127 } 128 129 /** 130 * Sets the description attribute value. 131 * 132 * @param description 133 * The description to set. 134 */ 135 public void setDescription(String description) { 136 this.description = description; 137 } 138 139 /** 140 * Gets the id attribute. 141 * 142 * @return Returns the id. 143 */ 144 public Long getId() { 145 return id; 146 } 147 148 /** 149 * Sets the id attribute value. 150 * 151 * @param id 152 * The id to set. 153 */ 154 public void setId(Long id) { 155 this.id = id; 156 } 157 158 /** 159 * Gets the name attribute. 160 * 161 * @return Returns the name. 162 */ 163 public String getName() { 164 return name; 165 } 166 167 /** 168 * Sets the name attribute value. 169 * 170 * @param name 171 * The name to set. 172 */ 173 public void setName(String name) { 174 this.name = name; 175 } 176 177 /** 178 * Gets the subscribable attribute. 179 * 180 * @return Returns the subscribable. 181 */ 182 public boolean isSubscribable() { 183 return subscribable; 184 } 185 186 /** 187 * Sets the subscribable attribute value. 188 * 189 * @param subscribable 190 * The subscribable to set. 191 */ 192 public void setSubscribable(boolean subscribable) { 193 this.subscribable = subscribable; 194 } 195 196 /** 197 * Gets the producers attribute. 198 * 199 * @return Returns the producers. 200 */ 201 public List<NotificationProducer> getProducers() { 202 return producers; 203 } 204 205 /** 206 * Sets the producers attribute value. 207 * 208 * @param producers 209 * The producers to set. 210 */ 211 public void setProducers(List<NotificationProducer> producers) { 212 this.producers = producers; 213 } 214 215 /** 216 * Gets the list of reviewers for notification publications to this channel 217 * 218 * @return the list of reviewers for notification publications to this channel 219 */ 220 public List<NotificationChannelReviewer> getReviewers() { 221 return reviewers; 222 } 223 224 /** 225 * Sets the list of reviewers for notification publications to this channel 226 * 227 * @param reviewers 228 * the list of reviewers for notification publications to this channel 229 */ 230 public void setReviewers(List<NotificationChannelReviewer> reviewers) { 231 this.reviewers = reviewers; 232 } 233 234 /** 235 * Gets the list of subscriptions to this channel 236 * 237 * @return the list of subscriptions to this channel 238 */ 239 public List<UserChannelSubscription> getSubscriptions() { 240 return subscriptions; 241 } 242 243 /** 244 * Sets the list of subscriptions to this channel 245 * 246 * @param subscriptions 247 * the list of subscriptions to this channel 248 */ 249 public void setSubscriptions(List<UserChannelSubscription> subscriptions) { 250 this.subscriptions = subscriptions; 251 } 252 253 /** 254 * Compares the id values of each NotificationChannel object. 255 * 256 * @see java.lang.Object#equals(java.lang.Object) 257 */ 258 @Override 259 public boolean equals(Object obj) { 260 NotificationChannel channelToCompare = (NotificationChannel) obj; 261 return this.getId().equals(channelToCompare.getId()); 262 } 263 }