1 /*** 2 * Java DAB EPG API - Serialize/Deserialize To/From POJOs to XML/Binary as per 3 * ETSI specifications TS 102 818 (XML Specification for DAB EPG) and TS 102 4 * 371 (Transportation and Binary Encoding Specification for EPG). 5 * 6 * Copyright (C) 2007 GCap Media PLC 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this library; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 */ 22 package com.gcapmedia.dab.epg; 23 24 import java.util.ArrayList; 25 import java.util.Collection; 26 import java.util.Collections; 27 import java.util.List; 28 29 /*** 30 * Describes a grouping of programmes, programme events or other groups. 31 */ 32 public class ProgrammeGroup { 33 34 /*** 35 * Programme group names 36 */ 37 private NameGroup names; 38 39 /*** 40 * Programme media descriptions 41 */ 42 private MediaGroup media; 43 44 /*** 45 * Programme genres 46 */ 47 private List<Genre> genres; 48 49 /*** 50 * Programme keywords 51 */ 52 private Keywords keywords; 53 54 /*** 55 * Groups this programme is a member of 56 */ 57 private List<Membership> memberships; 58 59 /*** 60 * Used to link to additional information or content 61 */ 62 private List<Link> links; 63 64 /*** 65 * <p>An identifier for a programme, programme event. Unlike a full CRID 66 * this is designed to be more appropriate for limited bandwidth data 67 * channels and for basic EPG receivers. The short CRID (sCRID) is a 68 * 24-bit integer, expressed as a decimal value, with a range of 0 to 69 * 16,777,215 inclusive.</p> 70 * 71 * <p>The following rules should be applied whenever short CRIDs are used 72 * in an EPG service: 73 * 74 * <ul> 75 * <li>The sCRID shall only be unique within a single EPG Service, therefore 76 * a receiver must process it in some way on decoding to ensure that it is 77 * globally unique</li> 78 * <li>The sCRID must not be reused within that EPG service for a minimum of 79 * six month</li> 80 * </ul> 81 * </p> 82 */ 83 private int shortId; 84 85 /*** 86 * Programme group CRID 87 */ 88 private Crid id; 89 90 /*** 91 * Schedule version number 92 */ 93 private int version; 94 95 /*** 96 * Indicates the type of programme grouping 97 */ 98 private Type type; 99 100 /*** 101 * The number of items within the group 102 */ 103 private int numOfItems; 104 105 /*** 106 * Create a new programme group 107 */ 108 public ProgrammeGroup() { 109 names = new NameGroup(); 110 genres = new ArrayList<Genre>(); 111 memberships = new ArrayList<Membership>(); 112 links = new ArrayList<Link>(); 113 } 114 115 /*** 116 * @return Returns the name group for this programme group 117 */ 118 public NameGroup getNames() { 119 return names; 120 } 121 122 /*** 123 * @return Returns media descriptions related to this programme 124 */ 125 public MediaGroup getMedia() { 126 return media; 127 } 128 129 /*** 130 * Adds a genre to the programme 131 * @param genre Genre to add 132 */ 133 public void addGenre(Genre genre) { 134 genres.add(genre); 135 } 136 137 /*** 138 * Clears all genre from the programme 139 */ 140 public void clearGenres() { 141 genres.clear(); 142 } 143 144 /*** 145 * Removes a genre from the programme 146 * @param genre Genre to remove 147 */ 148 public void removeGenre(Genre genre) { 149 genres.remove(genre); 150 } 151 152 /*** 153 * @return Returns the programme genres 154 */ 155 public List<Genre> getGenres() { 156 return genres; 157 } 158 159 /*** 160 * Set the keywords associated with this programme 161 * @param keywords Keywords to use 162 */ 163 public void setKeywords(Keywords keywords) { 164 this.keywords = keywords; 165 } 166 167 /*** 168 * @return Returns the keywords associated with this programme 169 */ 170 public Keywords getKeywords() { 171 return keywords; 172 } 173 174 /*** 175 * @return Returns memberships this programme has 176 */ 177 public Collection<Membership> getMemberships() { 178 return Collections.unmodifiableCollection(memberships); 179 } 180 181 /*** 182 * Add a membership to this programme 183 * @param membership Membership to add 184 */ 185 public void addMembership(Membership membership) { 186 memberships.add(membership); 187 } 188 189 /*** 190 * Removes a membership from this programme 191 * @param membership Membership to remove 192 */ 193 public void removeMembership(Membership membership) { 194 memberships.remove(membership); 195 } 196 197 /*** 198 * Clears all memberships from this programme 199 */ 200 public void clearMemberships() { 201 memberships.clear(); 202 } 203 204 /*** 205 * @return Returns links to additional information or content 206 */ 207 public Collection<Link> getLinks() { 208 return Collections.unmodifiableCollection(links); 209 } 210 211 /*** 212 * Add a link from this programme to additional information or content 213 * @param link Link to add 214 */ 215 public void addLink(Link link) { 216 links.add(link); 217 } 218 219 /*** 220 * Remove a link from this programme 221 * @param link Link to remove 222 */ 223 public void removeLink(Link link) { 224 links.remove(link); 225 } 226 227 /*** 228 * Clear all links from this programme 229 */ 230 public void clearLinks() { 231 links.clear(); 232 } 233 234 /*** 235 * Gets the value of the shortId property. 236 * 237 */ 238 public int getShortId() { 239 return shortId; 240 } 241 242 /*** 243 * Sets the value of the shortId property. 244 * 245 */ 246 public void setShortId(int value) { 247 this.shortId = value; 248 } 249 250 /*** 251 * Sets the programme Content Reference ID (CRID) 252 * @param id CRID to set 253 */ 254 public void setId(Crid id) { 255 this.id = id; 256 } 257 258 /*** 259 * @return Returns the programme Content Reference ID (CRID) 260 */ 261 public Crid getId() { 262 return id; 263 } 264 265 /*** 266 * Sets the version number of this schedule 267 * @param version Schedule version number 268 */ 269 public void setVersion(int version) { 270 this.version = version; 271 } 272 273 /*** 274 * @return Returns the schedule version 275 */ 276 public int getVersion() { 277 return version; 278 } 279 280 /*** 281 * @return Returns the programme group type 282 */ 283 public Type getType() { 284 return type; 285 } 286 287 /*** 288 * Set the programme group type 289 * @param type Programme group type 290 */ 291 public void setType(Type type) { 292 this.type = type; 293 } 294 295 /*** 296 * @return Returns the number of items in the group 297 */ 298 public int getNumberOfItems() { 299 return numOfItems; 300 } 301 302 /*** 303 * Sets the number of items in the group 304 * @param numOfItems Number of items in the group 305 */ 306 public void setNumberOfItems(int numOfItems) { 307 this.numOfItems = numOfItems; 308 } 309 310 /*** 311 * Indicates the type of programme grouping 312 */ 313 public enum Type { 314 315 /*** 316 * An ordered or unordered collection of programmes that is shown 317 * in a sequence (e.g. "The News Quiz" season 1) 318 */ 319 SERIES("series"), 320 321 /*** 322 * A programme theme that is typically associated with a collection 323 * of series (e.g. all episodes of "The News Quiz") 324 */ 325 SHOW("show"), 326 327 /*** 328 * The editorial concept for a programme from which specific 329 * programme versions have been derived (e.g. 330 */ 331 PROGRAM_CONCEPT("programeConcept"), 332 333 /*** 334 * A collection of individual programmes that are shown as a group 335 * because they are editorially coherent (e.g. a general sports 336 * programme with individual sub-programmes covering different 337 * events). 338 */ 339 MAGAZINE("magazine"), 340 341 /*** 342 * A collection of programmes that is used to allow segments from 343 * multiple programmes to be combined in segment groups. 344 */ 345 PROGRAM_COMPILATION("programCompilation"), 346 347 /*** 348 * Can be used for any group not defined in the preceding list 349 * where all memembers of the group should be acquired if the 350 * group is selected. For example, a group of channel highlights 351 * or recommendations. 352 */ 353 OTHER_COLLECTION("otherCollection"), 354 355 /*** 356 * Can be used for any group not defined in the list about where 357 * only one member of the group should be acquired if the group 358 * is selected. 359 */ 360 OTHER_CHOICE("otherChoice"), 361 362 /*** 363 * A collection of programmes on a particular topic or theme. 364 */ 365 TOPIC("topic"); 366 367 private String value; 368 369 /*** 370 * Create a new programme group type 371 */ 372 private Type(String value) { 373 this.value = value; 374 } 375 376 /*** 377 * @return Returns the string value of the enum 378 */ 379 public String value() { 380 return value; 381 } 382 383 /*** 384 * Parse the type from a string value 385 */ 386 public static Type fromValue(String v) { 387 for (Type c: Type.values()) { 388 if (c.value.equals(v)) { 389 return c; 390 } 391 } 392 throw new IllegalArgumentException(v); 393 } 394 395 /*** 396 * @see java.lang.Enum#toString() 397 */ 398 public String toString() { 399 return value; 400 } 401 402 } 403 404 }