View Javadoc
1   /*
2    * Copyright (C) 2013 4th Line GmbH, Switzerland
3    *
4    * The contents of this file are subject to the terms of either the GNU
5    * Lesser General Public License Version 2 or later ("LGPL") or the
6    * Common Development and Distribution License Version 1 or later
7    * ("CDDL") (collectively, the "License"). You may not use this file
8    * except in compliance with the License. See LICENSE.txt for more
9    * information.
10   *
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14   */
15  
16  package org.fourthline.cling.support.avtransport.lastchange;
17  
18  import org.fourthline.cling.model.types.UnsignedIntegerFourBytes;
19  import org.fourthline.cling.support.model.PlayMode;
20  import org.fourthline.cling.support.model.RecordQualityMode;
21  import org.fourthline.cling.support.model.TransportAction;
22  import org.fourthline.cling.support.model.StorageMedium;
23  import org.fourthline.cling.support.lastchange.EventedValue;
24  import org.fourthline.cling.support.lastchange.EventedValueEnum;
25  import org.fourthline.cling.support.lastchange.EventedValueEnumArray;
26  import org.fourthline.cling.support.lastchange.EventedValueString;
27  import org.fourthline.cling.support.lastchange.EventedValueURI;
28  import org.fourthline.cling.support.lastchange.EventedValueUnsignedIntegerFourBytes;
29  
30  import java.net.URI;
31  import java.util.ArrayList;
32  import java.util.HashSet;
33  import java.util.List;
34  import java.util.Map;
35  import java.util.Set;
36  import java.util.regex.Pattern;
37  import org.fourthline.cling.model.types.InvalidValueException;
38  
39  /**
40   * @author Christian Bauer
41   */
42  public class AVTransportVariable {
43  
44      public static Set<Class<? extends EventedValue>> ALL = new HashSet<Class<? extends EventedValue>>() {{
45          add(TransportState.class);
46          add(TransportStatus.class);
47          add(RecordStorageMedium.class);
48          add(PossibleRecordStorageMedia.class);
49          add(PossiblePlaybackStorageMedia.class);
50          add(CurrentPlayMode.class);
51          add(TransportPlaySpeed.class);
52          add(RecordMediumWriteStatus.class);
53          add(CurrentRecordQualityMode.class);
54          add(PossibleRecordQualityModes.class);
55          add(NumberOfTracks.class);
56          add(CurrentTrack.class);
57          add(CurrentTrackDuration.class);
58          add(CurrentMediaDuration.class);
59          add(CurrentTrackMetaData.class);
60          add(CurrentTrackURI.class);
61          add(AVTransportURI.class);
62          add(NextAVTransportURI.class);
63          add(AVTransportURIMetaData.class);
64          add(NextAVTransportURIMetaData.class);
65          add(CurrentTransportActions.class);
66          add(RelativeTimePosition.class);
67          add(AbsoluteTimePosition.class);
68          add(RelativeCounterPosition.class);
69          add(AbsoluteCounterPosition.class);
70      }};
71  
72      public static class TransportState extends EventedValueEnum<org.fourthline.cling.support.model.TransportState> {
73          public TransportState(org.fourthline.cling.support.model.TransportState avTransportState) {
74              super(avTransportState);
75          }
76  
77          public TransportState(Map.Entry<String, String>[] attributes) {
78              super(attributes);
79          }
80  
81          @Override
82          protected org.fourthline.cling.support.model.TransportState enumValueOf(String s) {
83              return org.fourthline.cling.support.model.TransportState.valueOf(s);
84          }
85      }
86  
87      public static class TransportStatus extends EventedValueEnum<org.fourthline.cling.support.model.TransportStatus> {
88          public TransportStatus(org.fourthline.cling.support.model.TransportStatus transportStatus) {
89              super(transportStatus);
90          }
91  
92          public TransportStatus(Map.Entry<String, String>[] attributes) {
93              super(attributes);
94          }
95  
96          @Override
97          protected org.fourthline.cling.support.model.TransportStatus enumValueOf(String s) {
98              return org.fourthline.cling.support.model.TransportStatus.valueOf(s);
99          }
100     }
101 
102     public static class RecordStorageMedium extends EventedValueEnum<StorageMedium> {
103 
104         public RecordStorageMedium(StorageMedium storageMedium) {
105             super(storageMedium);
106         }
107 
108         public RecordStorageMedium(Map.Entry<String, String>[] attributes) {
109             super(attributes);
110         }
111 
112         @Override
113         protected StorageMedium enumValueOf(String s) {
114             return StorageMedium.valueOf(s);
115         }
116     }
117 
118     public static class PossibleRecordStorageMedia extends EventedValueEnumArray<StorageMedium> {
119         public PossibleRecordStorageMedia(StorageMedium[] e) {
120             super(e);
121         }
122 
123         public PossibleRecordStorageMedia(Map.Entry<String, String>[] attributes) {
124             super(attributes);
125         }
126 
127         @Override
128         protected StorageMedium[] enumValueOf(String[] names) {
129             List<StorageMedium> list = new ArrayList<>();
130             for (String s : names) {
131                 list.add(StorageMedium.valueOf(s));
132             }
133             return list.toArray(new StorageMedium[list.size()]);
134         }
135     }
136 
137     public static class PossiblePlaybackStorageMedia extends PossibleRecordStorageMedia {
138         public PossiblePlaybackStorageMedia(StorageMedium[] e) {
139             super(e);
140         }
141 
142         public PossiblePlaybackStorageMedia(Map.Entry<String, String>[] attributes) {
143             super(attributes);
144         }
145     }
146 
147     public static class CurrentPlayMode extends EventedValueEnum<PlayMode> {
148         public CurrentPlayMode(PlayMode playMode) {
149             super(playMode);
150         }
151 
152         public CurrentPlayMode(Map.Entry<String, String>[] attributes) {
153             super(attributes);
154         }
155 
156         @Override
157         protected PlayMode enumValueOf(String s) {
158             return PlayMode.valueOf(s);
159         }
160     }
161 
162     public static class TransportPlaySpeed extends EventedValueString {
163         final static Pattern pattern = Pattern.compile("^-?\\d+(/\\d+)?$", Pattern.CASE_INSENSITIVE);
164 
165         public TransportPlaySpeed(String value) {
166             super(value);
167             if (!pattern.matcher(value).matches()) {
168                 throw new InvalidValueException("Can't parse TransportPlaySpeed speeds.");
169             }
170         }
171 
172         public TransportPlaySpeed(Map.Entry<String, String>[] attributes) {
173             super(attributes);
174         }
175     }
176 
177     public static class RecordMediumWriteStatus extends EventedValueEnum<org.fourthline.cling.support.model.RecordMediumWriteStatus> {
178         public RecordMediumWriteStatus(org.fourthline.cling.support.model.RecordMediumWriteStatus recordMediumWriteStatus) {
179             super(recordMediumWriteStatus);
180         }
181 
182         public RecordMediumWriteStatus(Map.Entry<String, String>[] attributes) {
183             super(attributes);
184         }
185 
186         @Override
187         protected org.fourthline.cling.support.model.RecordMediumWriteStatus enumValueOf(String s) {
188             return org.fourthline.cling.support.model.RecordMediumWriteStatus.valueOf(s);
189         }
190     }
191 
192     public static class CurrentRecordQualityMode extends EventedValueEnum<RecordQualityMode> {
193         public CurrentRecordQualityMode(RecordQualityMode recordQualityMode) {
194             super(recordQualityMode);
195         }
196 
197         public CurrentRecordQualityMode(Map.Entry<String, String>[] attributes) {
198             super(attributes);
199         }
200 
201         @Override
202         protected RecordQualityMode enumValueOf(String s) {
203             return RecordQualityMode.valueOf(s);
204         }
205     }
206 
207     public static class PossibleRecordQualityModes extends EventedValueEnumArray<RecordQualityMode> {
208         public PossibleRecordQualityModes(RecordQualityMode[] e) {
209             super(e);
210         }
211 
212         public PossibleRecordQualityModes(Map.Entry<String, String>[] attributes) {
213             super(attributes);
214         }
215 
216         @Override
217         protected RecordQualityMode[] enumValueOf(String[] names) {
218             List<RecordQualityMode> list = new ArrayList<>();
219             for (String s : names) {
220                 list.add(RecordQualityMode.valueOf(s));
221             }
222             return list.toArray(new RecordQualityMode[list.size()]);
223         }
224     }
225 
226     public static class NumberOfTracks extends EventedValueUnsignedIntegerFourBytes {
227         public NumberOfTracks(UnsignedIntegerFourBytes value) {
228             super(value);
229         }
230 
231         public NumberOfTracks(Map.Entry<String, String>[] attributes) {
232             super(attributes);
233         }
234     }
235 
236     public static class CurrentTrack extends EventedValueUnsignedIntegerFourBytes {
237         public CurrentTrack(UnsignedIntegerFourBytes value) {
238             super(value);
239         }
240 
241         public CurrentTrack(Map.Entry<String, String>[] attributes) {
242             super(attributes);
243         }
244     }
245 
246     public static class CurrentTrackDuration extends EventedValueString {
247         public CurrentTrackDuration(String value) {
248             super(value);
249         }
250 
251         public CurrentTrackDuration(Map.Entry<String, String>[] attributes) {
252             super(attributes);
253         }
254     }
255 
256     public static class CurrentMediaDuration extends EventedValueString {
257         public CurrentMediaDuration(String value) {
258             super(value);
259         }
260 
261         public CurrentMediaDuration(Map.Entry<String, String>[] attributes) {
262             super(attributes);
263         }
264     }
265 
266     public static class CurrentTrackMetaData extends EventedValueString {
267         public CurrentTrackMetaData(String value) {
268             super(value);
269         }
270 
271         public CurrentTrackMetaData(Map.Entry<String, String>[] attributes) {
272             super(attributes);
273         }
274     }
275 
276     public static class CurrentTrackURI extends EventedValueURI {
277         public CurrentTrackURI(URI value) {
278             super(value);
279         }
280 
281         public CurrentTrackURI(Map.Entry<String, String>[] attributes) {
282             super(attributes);
283         }
284     }
285 
286     public static class AVTransportURI extends EventedValueURI {
287         public AVTransportURI(URI value) {
288             super(value);
289         }
290 
291         public AVTransportURI(Map.Entry<String, String>[] attributes) {
292             super(attributes);
293         }
294     }
295 
296     public static class NextAVTransportURI extends EventedValueURI {
297         public NextAVTransportURI(URI value) {
298             super(value);
299         }
300 
301         public NextAVTransportURI(Map.Entry<String, String>[] attributes) {
302             super(attributes);
303         }
304     }
305 
306     public static class AVTransportURIMetaData extends EventedValueString {
307         public AVTransportURIMetaData(String value) {
308             super(value);
309         }
310 
311         public AVTransportURIMetaData(Map.Entry<String, String>[] attributes) {
312             super(attributes);
313         }
314     }
315 
316     public static class NextAVTransportURIMetaData extends EventedValueString {
317         public NextAVTransportURIMetaData(String value) {
318             super(value);
319         }
320 
321         public NextAVTransportURIMetaData(Map.Entry<String, String>[] attributes) {
322             super(attributes);
323         }
324     }
325 
326     public static class CurrentTransportActions extends EventedValueEnumArray<TransportAction>{
327         public CurrentTransportActions(TransportAction[] e) {
328             super(e);
329         }
330 
331         public CurrentTransportActions(Map.Entry<String, String>[] attributes) {
332             super(attributes);
333         }
334 
335         @Override
336         protected TransportAction[] enumValueOf(String[] names) {
337             if (names == null) return new TransportAction[0];
338             List<TransportAction> list = new ArrayList<>();
339             for (String s : names) {
340                 list.add(TransportAction.valueOf(s));
341             }
342             return list.toArray(new TransportAction[list.size()]);
343         }
344     }
345 
346 	public static class RelativeTimePosition extends EventedValueString {
347         public RelativeTimePosition(String value) {
348             super(value);
349         }
350 
351         public RelativeTimePosition(Map.Entry<String, String>[] attributes) {
352             super(attributes);
353         }
354     }
355 
356     public static class AbsoluteTimePosition extends EventedValueString {
357         public AbsoluteTimePosition(String value) {
358             super(value);
359         }
360 
361         public AbsoluteTimePosition(Map.Entry<String, String>[] attributes) {
362             super(attributes);
363         }
364     }
365 
366     public static class RelativeCounterPosition extends EventedValueString {
367         public RelativeCounterPosition(String value) {
368             super(value);
369         }
370 
371         public RelativeCounterPosition(Map.Entry<String, String>[] attributes) {
372             super(attributes);
373         }
374     }
375 
376     public static class AbsoluteCounterPosition extends EventedValueString {
377         public AbsoluteCounterPosition(String value) {
378             super(value);
379         }
380 
381         public AbsoluteCounterPosition(Map.Entry<String, String>[] attributes) {
382             super(attributes);
383         }
384     }
385 
386 }