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 import org.joda.time.DateTime;
30 import org.joda.time.ReadableInstant;
31
32 /***
33 *
34 */
35 public class Schedule {
36
37 /***
38 * Schedule version number
39 */
40 private int version;
41
42 /***
43 * Schedule creation time
44 */
45 private ReadableInstant created;
46
47 /***
48 * Denotes the originator of the schedule (e.g. BBC)
49 */
50 private String originator;
51
52 /***
53 * Scope is used to indicate the time period covered by this schedule, from
54 * the billed start time of the first programme to the billed end time of
55 * the last programme.
56 */
57 private Scope scope;
58
59 /***
60 * Schedule programmes
61 */
62 private List<Programme> programmes;
63
64 /***
65 * Create a new schedule
66 */
67 public Schedule() {
68 created = new DateTime();
69 programmes = new ArrayList<Programme>();
70 version = 1;
71 }
72
73 /***
74 * Sets the time the schedule was created
75 * @param created Time the schedule was created
76 */
77 public void setCreated(ReadableInstant created) {
78 this.created = created;
79 }
80
81 /***
82 * @return Returns the schedule creation time
83 */
84 public ReadableInstant getCreated() {
85 return created;
86 }
87
88 /***
89 * Sets the version number of this schedule
90 * @param version Schedule version number
91 */
92 public void setVersion(int version) {
93 this.version = version;
94 }
95
96 /***
97 * @return Returns the schedule version
98 */
99 public int getVersion() {
100 return version;
101 }
102
103 /***
104 * Sets the originator for this schedule
105 * @param originator Schedule originator
106 */
107 public void setOriginator(String originator) {
108 if(originator.length() > 128) {
109 throw new IllegalArgumentException("Originator must be less than or equal to 128 characters in length");
110 }
111 this.originator = originator;
112 }
113
114 /***
115 * @return Returns the schedule originator
116 */
117 public String getOriginator() {
118 return originator;
119 }
120
121 /***
122 * Sets the schedule scope
123 * @param scope Schedule scope
124 */
125 public void setScope(Scope scope) {
126 this.scope = scope;
127 }
128
129 /***
130 * @return Returns the schedule scope
131 */
132 public Scope getScope() {
133 return scope;
134 }
135
136 /***
137 * Add a programme to the schedule
138 * @param programme Programme to add
139 */
140 public void addProgramme(Programme programme) {
141 programmes.add(programme);
142 }
143
144 /***
145 * @return Returns all programmes in this schedule
146 */
147 public Collection<Programme> getProgrammes() {
148 return Collections.unmodifiableCollection(programmes);
149 }
150
151 /***
152 * Remove a programme from the schedule
153 * @param programme Programme to remove
154 */
155 public void removeProgramme(Programme programme) {
156 programmes.remove(programme);
157 }
158
159 /***
160 * Clears all programmes from the schedule
161 */
162 public void clearProgrammes() {
163 programmes.clear();
164 }
165
166 /***
167 * @see java.lang.Object#equals(java.lang.Object)
168 */
169 @Override
170 public boolean equals(Object obj) {
171 if(!(obj instanceof Schedule)) {
172 return false;
173 }
174 Schedule that = (Schedule)obj;
175 return this.scope.equals(that.scope) &&
176 this.programmes.equals(that.programmes);
177 }
178
179 /***
180 * @see java.lang.Object#toString()
181 */
182 public String toString() {
183 StringBuilder buf = new StringBuilder();
184 buf.append("Schedule [version=" + version);
185 buf.append(", created=" + created);
186 if(originator != null) {
187 buf.append(", originator=" + originator);
188 }
189 buf.append(", scope=" + scope);
190 buf.append(", progs=" + programmes);
191 buf.append("]");
192 return buf.toString();
193 }
194
195 }