1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.fourthline.cling.model.meta;
17
18 import org.fourthline.cling.model.Validatable;
19 import org.fourthline.cling.model.ValidationError;
20 import org.fourthline.cling.model.types.DLNACaps;
21 import org.fourthline.cling.model.types.DLNADoc;
22
23 import java.net.URI;
24 import java.net.URL;
25 import java.util.List;
26 import java.util.ArrayList;
27 import java.util.logging.Logger;
28
29
30
31
32
33
34 public class DeviceDetails implements Validatable {
35
36 final private static Logger log = Logger.getLogger(DeviceDetails.class.getName());
37
38 final private URL baseURL;
39 final private String friendlyName;
40 final private ManufacturerDetails manufacturerDetails;
41 final private ModelDetails modelDetails;
42 final private String serialNumber;
43 final private String upc;
44 final private URI presentationURI;
45 final private DLNADoc[] dlnaDocs;
46 final private DLNACaps dlnaCaps;
47 final private DLNACaps secProductCaps;
48
49 public DeviceDetails(String friendlyName) {
50 this(null, friendlyName, null, null, null, null, null);
51 }
52
53 public DeviceDetails(String friendlyName, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps) {
54 this(null, friendlyName, null, null, null, null, null, dlnaDocs, dlnaCaps);
55 }
56
57 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails) {
58 this(null, friendlyName, manufacturerDetails, null, null, null, null);
59 }
60
61 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps) {
62 this(null, friendlyName, manufacturerDetails, null, null, null, null, dlnaDocs, dlnaCaps);
63 }
64
65 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails,
66 ModelDetails modelDetails) {
67 this(null, friendlyName, manufacturerDetails, modelDetails, null, null, null);
68 }
69
70 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails,
71 ModelDetails modelDetails, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps) {
72 this(null, friendlyName, manufacturerDetails, modelDetails, null, null, null, dlnaDocs, dlnaCaps);
73 }
74
75 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails,
76 ModelDetails modelDetails, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps, DLNACaps secProductCaps) {
77 this(null, friendlyName, manufacturerDetails, modelDetails, null, null, null, dlnaDocs, dlnaCaps, secProductCaps);
78 }
79
80 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails, ModelDetails modelDetails,
81 String serialNumber, String upc) {
82 this(null, friendlyName, manufacturerDetails, modelDetails, serialNumber, upc, null);
83 }
84
85 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails, ModelDetails modelDetails,
86 String serialNumber, String upc, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps) {
87 this(null, friendlyName, manufacturerDetails, modelDetails, serialNumber, upc, null, dlnaDocs, dlnaCaps);
88 }
89
90 public DeviceDetails(String friendlyName, URI presentationURI) {
91 this(null, friendlyName, null, null, null, null, presentationURI);
92 }
93
94 public DeviceDetails(String friendlyName, URI presentationURI, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps) {
95 this(null, friendlyName, null, null, null, null, presentationURI, dlnaDocs, dlnaCaps);
96 }
97
98 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails,
99 ModelDetails modelDetails, URI presentationURI) {
100 this(null, friendlyName, manufacturerDetails, modelDetails, null, null, presentationURI);
101 }
102
103 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails,
104 ModelDetails modelDetails, URI presentationURI, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps) {
105 this(null, friendlyName, manufacturerDetails, modelDetails, null, null, presentationURI, dlnaDocs, dlnaCaps);
106 }
107
108 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails, ModelDetails modelDetails,
109 String serialNumber, String upc, URI presentationURI) {
110 this(null, friendlyName, manufacturerDetails, modelDetails, serialNumber, upc, presentationURI);
111 }
112
113 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails, ModelDetails modelDetails,
114 String serialNumber, String upc, URI presentationURI, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps) {
115 this(null, friendlyName, manufacturerDetails, modelDetails, serialNumber, upc, presentationURI, dlnaDocs, dlnaCaps);
116 }
117
118 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails, ModelDetails modelDetails,
119 String serialNumber, String upc, String presentationURI)
120 throws IllegalArgumentException {
121 this(null, friendlyName, manufacturerDetails, modelDetails, serialNumber, upc, URI.create(presentationURI));
122 }
123
124 public DeviceDetails(String friendlyName, ManufacturerDetails manufacturerDetails, ModelDetails modelDetails,
125 String serialNumber, String upc, String presentationURI, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps)
126 throws IllegalArgumentException {
127 this(null, friendlyName, manufacturerDetails, modelDetails, serialNumber, upc, URI.create(presentationURI), dlnaDocs, dlnaCaps);
128 }
129
130 public DeviceDetails(URL baseURL, String friendlyName,
131 ManufacturerDetails manufacturerDetails, ModelDetails modelDetails,
132 String serialNumber, String upc,
133 URI presentationURI) {
134 this(baseURL, friendlyName, manufacturerDetails, modelDetails, serialNumber, upc, presentationURI, null, null);
135 }
136
137 public DeviceDetails(URL baseURL, String friendlyName,
138 ManufacturerDetails manufacturerDetails, ModelDetails modelDetails,
139 String serialNumber, String upc,
140 URI presentationURI, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps) {
141 this(baseURL, friendlyName, manufacturerDetails, modelDetails, serialNumber, upc, presentationURI, dlnaDocs, dlnaCaps, null);
142 }
143
144 public DeviceDetails(URL baseURL, String friendlyName,
145 ManufacturerDetails manufacturerDetails, ModelDetails modelDetails,
146 String serialNumber, String upc,
147 URI presentationURI, DLNADoc[] dlnaDocs, DLNACaps dlnaCaps, DLNACaps secProductCaps) {
148 this.baseURL = baseURL;
149 this.friendlyName = friendlyName;
150 this.manufacturerDetails = manufacturerDetails == null ? new ManufacturerDetails() : manufacturerDetails;
151 this.modelDetails = modelDetails == null ? new ModelDetails() : modelDetails;
152 this.serialNumber = serialNumber;
153 this.upc = upc;
154 this.presentationURI = presentationURI;
155 this.dlnaDocs = dlnaDocs != null ? dlnaDocs : new DLNADoc[0];
156 this.dlnaCaps = dlnaCaps;
157 this.secProductCaps = secProductCaps;
158 }
159
160 public URL getBaseURL() {
161 return baseURL;
162 }
163
164 public String getFriendlyName() {
165 return friendlyName;
166 }
167
168 public ManufacturerDetails getManufacturerDetails() {
169 return manufacturerDetails;
170 }
171
172 public ModelDetails getModelDetails() {
173 return modelDetails;
174 }
175
176 public String getSerialNumber() {
177 return serialNumber;
178 }
179
180 public String getUpc() {
181 return upc;
182 }
183
184 public URI getPresentationURI() {
185 return presentationURI;
186 }
187
188 public DLNADoc[] getDlnaDocs() {
189 return dlnaDocs;
190 }
191
192 public DLNACaps getDlnaCaps() {
193 return dlnaCaps;
194 }
195
196 public DLNACaps getSecProductCaps() {
197 return secProductCaps;
198 }
199
200 public List<ValidationError> validate() {
201 List<ValidationError> errors = new ArrayList<>();
202
203 if (getUpc() != null) {
204
205 if (getUpc().length() != 12) {
206 log.fine("UPnP specification violation, UPC must be 12 digits: " + getUpc());
207 } else {
208 try {
209 Long.parseLong(getUpc());
210 } catch (NumberFormatException ex) {
211 log.fine("UPnP specification violation, UPC must be 12 digits all-numeric: " + getUpc());
212 }
213 }
214 }
215
216 return errors;
217 }
218 }