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.binary;
23
24
25 /***
26 * Enumeration for enum types, confusingly enough.
27 * TODO need to work a mechanism for creating and parsing of default values.
28 */
29 public enum EnumType implements Encodable {
30
31 epgSystemDAB(AttributeTag.epgSystem, 0x01),
32 epgSystemDRM(AttributeTag.epgSystem, 0x02),
33
34 programmeGroupTypeSeries(AttributeTag.programmeGroupType, 0x02),
35 programmeGroupTypeShow(AttributeTag.programmeGroupType, 0x03),
36 programmeGroupTypeProgramConcept(AttributeTag.programmeGroupType, 0x04),
37 programmeGroupTypeMagazine(AttributeTag.programmeGroupType, 0x05),
38 programmeGroupTypeProgramCompilation(AttributeTag.programmeGroupType, 0x06),
39 programmeGroupTypeOtherCollection(AttributeTag.programmeGroupType, 0x07),
40 programmeGroupTypeOtherChoice(AttributeTag.programmeGroupType, 0x08),
41 programmeGroupTypeTopic(AttributeTag.programmeGroupType, 0x09),
42
43 alternateSourceProtocolURL(AttributeTag.alternateSourceProtocol, 0x01),
44 alternateSourceProtocolDAB(AttributeTag.alternateSourceProtocol, 0x02),
45 alternateSourceProtocolDRN(AttributeTag.alternateSourceProtocol, 0x03),
46
47 alternateSourceTypeIdentical(AttributeTag.alternateSourceType, 0x01),
48 alternateSourceTypeMore(AttributeTag.alternateSourceType, 0x02),
49 alternateSourceTypeLess(AttributeTag.alternateSourceType, 0x03),
50 alternateSourceTypeSimilar(AttributeTag.alternateSourceType, 0x04),
51
52 frequencyTypePrimary(AttributeTag.frequencyType, 0x01),
53 frequencyTypeSecondary(AttributeTag.frequencyType, 0x02),
54
55 serviceFormatAudio(AttributeTag.serviceFormat, 0x01),
56 serviceFormatDLS(AttributeTag.serviceFormat, 0x02),
57 serviceFormatMOTSlideshow(AttributeTag.serviceFormat, 0x03),
58 serviceFormatMOTBWS(AttributeTag.serviceFormat, 0x04),
59 serviceFormatTPEG(AttributeTag.serviceFormat, 0x05),
60 serviceFormatDGPS(AttributeTag.serviceFormat, 0x06),
61 serviceFormatProprietary(AttributeTag.serviceFormat, 0x07),
62
63 serviceIDTypePrimary(AttributeTag.serviceIdType, 0x01),
64 serviceIDTypeSecondary(AttributeTag.serviceIdType, 0x02),
65
66 CATypeNone(AttributeTag.CAType, 0x01),
67 CATypeUnspecified(AttributeTag.CAType, 0x02),
68
69 programmeBroadcastOnair(AttributeTag.programmeBroadcast, 0x01),
70 programmeBroadcastOffair(AttributeTag.programmeBroadcast, 0x02),
71
72 programmeEventBroadcastOnair(AttributeTag.programmeEventBroadcast, 0x01),
73 programmeEventBroadcastOffair(AttributeTag.programmeEventBroadcast, 0x02),
74
75 programmeRecommendationNo(AttributeTag.programmeRecommendation, 0x01),
76 programmeRecommendationYes(AttributeTag.programmeRecommendation, 0x02),
77
78 programmeEventRecommendationNo(AttributeTag.programmeEventRecommendation, 0x01),
79 programmeEventRecommendationYes(AttributeTag.programmeEventRecommendation, 0x02),
80
81 multimediaTypeLogoUnrestricted(AttributeTag.multimediaType, 0x02),
82 multimediaTypeLogoMonoSquare(AttributeTag.multimediaType, 0x03),
83 multimediaTypeLogoColourSquare(AttributeTag.multimediaType, 0x04),
84 multimediaTypeLogoMonoRectangle(AttributeTag.multimediaType, 0x05),
85 multimediaTypeLogoColourRectangle(AttributeTag.multimediaType, 0x06),
86
87 genreTypeMain(AttributeTag.genreType, 0x01),
88 genreTypeSecondary(AttributeTag.genreType, 0x02),
89 genreTypeOther(AttributeTag.genreType, 0x03);
90
91 /***
92 * Parent attribute tag - this is needed to be able
93 * to parse the tag successfully.
94 */
95 private AttributeTag parent;
96
97 /***
98 * Enum tag value
99 */
100 private byte value;
101
102 private EnumType(AttributeTag parent, int value) {
103 this.parent = parent;
104 this.value = (byte)value;
105 }
106
107 /***
108 * @return Returns the tags parent attribute tag
109 */
110 public AttributeTag getParent() {
111 return parent;
112 }
113
114 /***
115 * @return Returns the tag value
116 */
117 public int getValue() {
118 return value & 0xFF;
119 }
120
121 /***
122 * @see com.gcapmedia.dab.epg.binary.Encodable#getBytes()
123 */
124 public byte[] getBytes() {
125 BitBuilder bits = new BitBuilder(8);
126 bits.put(0, value);
127 return bits.toByteArray();
128 }
129
130 /***
131 * @see com.gcapmedia.dab.epg.binary.Encodable#getLength()
132 */
133 public int getLength() {
134 return 1;
135 }
136
137 /***
138 * Parse an object from its byte array representation
139 * @param parent Tag parent
140 * @param bytes Byte array representation
141 */
142 public static EnumType fromByte(AttributeTag parent, byte value) {
143 EnumType result = null;
144 for(EnumType tag : values()) {
145 if(tag.parent == parent && tag.getValue() == value) {
146 result = tag;
147 break;
148 }
149 }
150 if(result == null) {
151 throw new IllegalArgumentException("EnumType for parent " + parent + " not found: " + value);
152 }
153 return result;
154 }
155 }