View Javadoc

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.*;
25  
26  /***
27   * A programme event can be used to break a programme into sections or to
28   * highlight particular sections of the programme.
29   */
30  public class ProgrammeEvent {
31  
32  	/***
33  	 * Programme names
34  	 */
35  	private NameGroup names;
36      
37      /***
38       * Programme locations
39       */
40      private List<Location> locations;
41      
42      /***
43       * Programme media descriptions
44       */
45      private MediaGroup media;
46      
47      /***
48       * Programme genres
49       */
50      private List<Genre> genres;
51      
52      /***
53       * Conditional Access type
54       */
55      private CAType ca = CAType.NONE;
56      
57      /***
58       * Programme keywords
59       */
60      private Keywords keywords;
61      
62      /***
63       * Groups this programme is a member of
64       */
65      private List<Membership> memberships;
66      
67      /***
68       * Used to link to additional information or content
69       */
70      private List<Link> links;
71      
72      /***
73       * <p>An identifier for a programme, programme event. Unlike a full CRID
74       * this is designed to be more appropriate for limited bandwidth data
75       * channels and for basic EPG receivers. The short CRID (sCRID) is a 
76       * 24-bit integer, expressed as a decimal value, with a range of 0 to
77       * 16,777,215 inclusive.</p>
78       * 
79       * <p>The following rules should be applied whenever short CRIDs are used
80       * in an EPG service:
81       * 
82       * <ul>
83       * <li>The sCRID shall only be unique within a single EPG Service, therefore
84       * a receiver must process it in some way on decoding to ensure that it is
85       * globally unique</li>
86       * <li>The sCRID must not be reused within that EPG service for a minimum of
87       * six month</li>
88       * </ul>
89       * </p>
90       */
91      private int shortId;
92      
93      /***
94       * Programme CRID
95       */
96      private Crid id;
97          
98      /***
99       * This is used by the broadcaster to indicate a recommended
100      * programme or programme event.
101      */
102     private Recommendation recommendation = Recommendation.NO;
103     
104     /***
105      * This indicates, for the duration of this programme or event, 
106      * whether the parent service is being broadcast (i.e. "on-air")
107      * or not (i.e. "off-air"). At times when a service is not being 
108      * broadcast the broadcast can use this facility to include "dummy" 
109      * EPG entries that promote the service.
110      */
111     private BroadcastFlag broadcastFlag;
112 
113     /***
114      * Programme locale in order to determine the two letter language
115      * code in ISO 639-1
116      */
117     private Locale locale = Locale.getDefault();
118     
119     /***
120      * Create a new programme
121      */
122     public ProgrammeEvent() {
123     	names = new NameGroup();
124     	media = new MediaGroup();
125     	locations = new ArrayList<Location>();
126     	genres = new ArrayList<Genre>();
127     	memberships = new ArrayList<Membership>();
128     	links = new ArrayList<Link>();
129     }
130     	
131 	/***
132 	 * Sets the broadcast flag.
133 	 * @param By default, this flag is <b>on-air</b> and should not be set. Can be 
134 	 * set to <b>off-air</b> to generate dummy programmes for when a service is not 
135 	 * being broadcast. 
136 	 */
137 	public BroadcastFlag setBroadcastFlag(BroadcastFlag flag) {
138 		return broadcastFlag;
139 	}
140 
141 	/***
142 	 * @return Returns the broadcast flag: Can be set to <b>off-air</b> to generate 
143 	 * dummy programmes for when a service is not being broadcast. By default, this
144 	 * flag is <b>on-air</b> and should not be set.
145 	 */
146 	public BroadcastFlag getBroadcastFlag() {
147 		return broadcastFlag;
148 	}
149 	
150 	/***
151 	 * Sets the Conditional Access (CA) type
152 	 * @param ca CA type to set
153 	 */
154 	public void setCA(CAType ca) {
155 		this.ca = ca;
156 	}
157 
158 	/***
159 	 * @return Returns the Conditional Access (CA) type
160 	 */
161 	public CAType getCA() {
162 		return ca;
163 	}
164 	
165 	/***
166 	 * Adds a genre to the programme
167 	 * @param genre Genre to add
168 	 */
169 	public void addGenre(Genre genre) {
170 		genres.add(genre);
171 	}
172 	
173 	/***
174 	 * Clears all genre from the programme
175 	 */
176 	public void clearGenres() {
177 		genres.clear();
178 	}
179 	
180 	/***
181 	 * Removes a genre from the programme
182 	 * @param genre Genre to remove
183 	 */
184 	public void removeGenre(Genre genre) {
185 		genres.remove(genre);
186 	}
187 
188 	/***
189 	 * @return Returns the programme genres
190 	 */
191 	public List<Genre> getGenres() {
192 		return genres;
193 	}
194 	
195 	/***
196 	 * Sets the programme Content Reference ID (CRID)
197 	 * @param id CRID to set
198 	 */
199 	public void setId(Crid id) {
200 		this.id = id;
201 	}
202 
203 	/***
204 	 * @return Returns the programme Content Reference ID (CRID)
205 	 */
206 	public Crid getId() {
207 		return id;
208 	}
209 
210 	/***
211 	 * Set the keywords associated with this programme
212 	 * @param keywords Keywords to use
213 	 */
214 	public void setKeywords(Keywords keywords) {
215 		this.keywords = keywords;
216 	}
217 	
218 	/***
219 	 * @return Returns the keywords associated with this programme
220 	 */
221 	public Keywords getKeywords() {
222 		return keywords;
223 	}
224 	
225 	/***
226 	 * Sets the locale associated with this programme
227 	 * @param locale Locale associated with this programme
228 	 */
229 	public void setLocale(Locale locale) {
230 		this.locale = locale;
231 	}
232 
233 	/***
234 	 * @return Returns the language code (ISO-639) associated with
235 	 * this programme
236 	 */
237 	public String getLanguage() {
238 		return locale.getLanguage();
239 	}
240 	
241 	/***
242 	 * @return Returns links to additional information or content
243 	 */
244 	public Collection<Link> getLinks() {
245 		return Collections.unmodifiableCollection(links);
246 	}
247 
248 	/***
249 	 * Add a link from this programme to additional information or content
250 	 * @param link Link to add
251 	 */
252 	public void addLink(Link link) {
253 		links.add(link);
254 	}
255 	
256 	/***
257 	 * Remove a link from this programme
258 	 * @param link Link to remove
259 	 */
260 	public void removeLink(Link link) {
261 		links.remove(link);
262 	}
263 	
264 	/***
265 	 * Clear all links from this programme
266 	 */
267 	public void clearLinks() {
268 		links.clear();
269 	}
270 	
271 	/***
272 	 * @return Returns all locations from this programme
273 	 */
274 	public Collection<Location> getLocations() {
275 		return Collections.unmodifiableCollection(locations);
276 	}
277 	
278 	/***
279 	 * Add a location to this programme
280 	 * @param location Location to add
281 	 */
282 	public void addLocation(Location location) {
283 		locations.add(location);
284 	}
285 	
286 	/***
287 	 * Remove a location from this programme
288 	 * @param location Location to remove
289 	 */
290 	public void removeLocation(Location location) {
291 		locations.remove(location);
292 	}
293 	
294 	/***
295 	 * Clear all locations from this programme
296 	 */
297 	public void clearLocations() {
298 		locations.clear();
299 	}
300 
301 	/***
302 	 * @return Returns media descriptions related to this programme
303 	 */
304 	public MediaGroup getMedia() {
305 		return media;
306 	}
307 
308 
309 	/***
310 	 * @return Returns memberships this programme has
311 	 */
312 	public Collection<Membership> getMemberships() {
313 		return Collections.unmodifiableCollection(memberships);
314 	}
315 	
316 	/***
317 	 * Add a membership to this programme
318 	 * @param membership Membership to add
319 	 */
320 	public void addMembership(Membership membership) {
321 		memberships.add(membership);
322 	}
323 	
324 	/***
325 	 * Removes a membership from this programme
326 	 * @param membership Membership to remove
327 	 */
328 	public void removeMembership(Membership membership) {
329 		memberships.remove(membership);
330 	}
331 	
332 	/***
333 	 * Clears all memberships from this programme
334 	 */
335 	public void clearMemberships() {
336 		memberships.clear();
337 	}
338 
339 	/***
340 	 * @return Returns the name group for this programme
341 	 */
342 	public NameGroup getNames() {
343 		return names;
344 	}
345 	
346 	/***
347 	 * Sets the recommendation flag on this programme
348 	 * @param recommendation Recommendation flag to set
349 	 */
350 	public void setRecommendation(Recommendation recommendation) { 
351 		this.recommendation = recommendation;
352 	}
353 
354 	/*** 
355 	 * @return Returns whether this programme is recommended
356 	 */
357 	public Recommendation getRecommendation() {
358 		return recommendation;
359 	}
360 	
361 	/***
362 	 * Sets the programme Short ID
363 	 * @param shortId Programme Short ID
364 	 */
365 	public void setShortId(int shortId) {
366 		this.shortId = shortId;
367 	}
368 
369 	/***
370 	 * @return Returns the programme short ID
371 	 */
372 	public int getShortId() {
373 		return shortId;
374 	}
375 	
376 	/***
377 	 * @see java.lang.Object#toString()
378 	 */
379 	public String toString() {
380 		return "ProgrammeEvent [id=" + id + "]";
381 	}
382 
383 }