1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package de.desy.acop.transport;
20
21 import java.io.Serializable;
22 import java.util.ArrayList;
23
24
25
26
27
28
29 public class ConnectionParameters implements Comparable<ConnectionParameters>, Serializable {
30
31
32
33
34
35 public static int ACTUAL_PROPERTY_SIZE = 0;
36
37
38
39
40
41 public static int AUTO_PROPERTY_SIZE = -1;
42
43 private static final long serialVersionUID = -430933461297463309L;
44 private String accessProtocol;
45 private String deviceContext;
46 private String deviceGroup;
47 private String deviceName;
48 private String deviceProperty;
49 private AccessMode accessMode;
50 private int accessRate;
51
52 private int propertySize = AUTO_PROPERTY_SIZE;
53
54 private Object dynamicParameters;
55
56
57
58
59 public ConnectionParameters() {}
60
61
62
63
64
65
66
67
68
69
70
71
72 public ConnectionParameters(String parameters) {
73 String[] p = parameters.split(",");
74 if (p == null) {
75 throw new IllegalArgumentException("Could not construct connection parameters. The provided remote name is null.");
76 }
77
78 if (p.length > 1) {
79 StringBuilder remoteName = new StringBuilder(p[0]);
80 int i = 1;
81 int j = p.length-1;
82
83
84 for (; j > -1; j--) {
85 if (p[j].contains("/")) break;
86 }
87 for (; i < p.length; i++) {
88 if (p[i].contains("/") || i <= j) {
89 remoteName.append(',');
90 remoteName.append(p[i]);
91 } else {
92 try {
93
94 AccessMode.valueOf(p[i]);
95 break;
96 } catch (IllegalArgumentException e) {
97 try {
98
99 Integer.parseInt(p[i]);
100 break;
101 } catch (NumberFormatException ex) {
102 remoteName.append(',');
103 remoteName.append(p[i]);
104 }
105 }
106 }
107 }
108
109 ArrayList<String> param = new ArrayList<String>();
110 param.add(remoteName.toString());
111 for (; i < p.length; i++) {
112 param.add(p[i]);
113 }
114 p = param.toArray(new String[param.size()]);
115 }
116 if (p.length == 4) {
117 setUpRemoteName(p[0]);
118 this.accessMode = AccessMode.valueOf(p[1]);
119 this.accessRate = Integer.parseInt(p[2]);
120 this.propertySize = Integer.parseInt(p[3]);
121 } else if (p.length == 1) {
122 setUpRemoteName(p[0]);
123 this.accessMode = AccessMode.POLL;
124 this.accessRate = 1000;
125 this.propertySize = AUTO_PROPERTY_SIZE;
126 } else if (p.length == 3) {
127 setUpRemoteName(p[0]);
128 this.accessMode = AccessMode.valueOf(p[1]);
129 this.accessRate = Integer.parseInt(p[2]);
130 } else {
131 throw new IllegalArgumentException("Failed to construct connection parameters. The string should contain 1, 3, or 4 elements separated by comma.");
132 }
133 }
134
135
136
137
138
139
140
141 public ConnectionParameters(String parameters, Object dynamicParameters) {
142 this(parameters);
143 this.dynamicParameters = dynamicParameters;
144 }
145
146
147
148
149
150
151
152
153
154
155
156
157 public ConnectionParameters(String accessProtocol, String deviceContext, String deviceGroup, String deviceName, String deviceProperty,
158 AccessMode accessMode, int accessRate) {
159 super();
160 this.accessProtocol = accessProtocol != null ? accessProtocol : "";
161 this.deviceContext = deviceContext != null ? deviceContext : "";
162 this.deviceGroup = deviceGroup != null ? deviceGroup : "";
163 this.deviceName = deviceName != null ? deviceName : "";
164 this.deviceProperty = deviceProperty != null ? deviceProperty : "";
165 this.accessMode = accessMode;
166 this.accessRate = accessRate;
167 }
168
169
170
171
172
173
174
175
176
177
178
179
180
181 public ConnectionParameters(String accessProtocol, String deviceContext, String deviceGroup, String deviceName, String deviceProperty,
182 AccessMode accessMode, int accessRate, Object dynamicParameters) {
183 this(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate);
184 this.dynamicParameters = dynamicParameters;
185 }
186
187
188
189
190
191
192
193
194
195
196
197
198
199 public ConnectionParameters(String accessProtocol, String deviceContext, String deviceGroup, String deviceName, String deviceProperty,
200 AccessMode accessMode, int accessRate, int propertySize) {
201 this(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate);
202 this.propertySize = propertySize;
203 }
204
205
206
207
208
209
210
211
212
213
214
215
216
217 public ConnectionParameters(String accessProtocol, String deviceContext, String deviceGroup, String deviceName, String deviceProperty,
218 AccessMode accessMode, int accessRate, int propertySize, Object dynamicParameters) {
219 this(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate,propertySize);
220 this.dynamicParameters = dynamicParameters;
221 }
222
223
224
225
226
227
228
229
230 public ConnectionParameters(String remoteName, AccessMode accessMode, int accessRate) {
231 super();
232 setUpRemoteName(remoteName);
233 this.accessMode = accessMode;
234 this.accessRate = accessRate;
235 }
236
237
238
239
240
241
242
243
244
245 public ConnectionParameters(String remoteName, AccessMode accessMode, int accessRate, Object dynamicParameters) {
246 this(remoteName,accessMode, accessRate);
247 this.dynamicParameters = dynamicParameters;
248 }
249
250 private void setUpRemoteName(String remoteName) {
251 String[] s = remoteName.split("/");
252
253 this.accessProtocol = (s.length > 0 && s[0] != null) ? s[0] : "";
254 this.deviceContext = (s.length > 1 && s[1] != null) ? s[1] : "";
255 this.deviceGroup = (s.length > 2 && s[2] != null) ? s[2] : "";
256 this.deviceProperty = (s.length > 4 && s[s.length - 1] != null) ? s[s.length - 1] : "";
257
258 StringBuilder sb = new StringBuilder(128);
259
260 if (s.length > 3 && s[3] != null) {
261 sb.append(s[3]);
262 }
263 for (int i = 4; i < s.length - 1; i++) {
264 sb.append('/');
265 if (s[i] != null) sb.append(s[i]);
266 }
267
268 this.deviceName = sb.toString();
269 }
270
271
272
273
274
275
276
277
278
279 public ConnectionParameters(String remoteName, AccessMode accessMode, int accessRate, int arraySize) {
280 this(remoteName,accessMode,accessRate);
281 this.propertySize = arraySize;
282 }
283
284
285
286
287
288
289
290
291
292
293 public ConnectionParameters(String remoteName, AccessMode accessMode, int accessRate, int arraySize, Object dynamicParameters) {
294 this(remoteName, accessMode, accessRate, arraySize);
295 this.dynamicParameters = dynamicParameters;
296 }
297
298
299
300
301
302
303 public AccessMode getAccessMode() {
304 return accessMode;
305 }
306
307
308
309
310
311
312 public String getAccessProtocol() {
313 return accessProtocol;
314 }
315
316
317
318
319
320
321 public int getAccessRate() {
322 return accessRate;
323 }
324
325
326
327
328
329
330 public String getDeviceContext() {
331 return deviceContext;
332 }
333
334
335
336
337
338
339 public String getDeviceGroup() {
340 return deviceGroup;
341 }
342
343
344
345
346
347
348 public String getDeviceName() {
349 return deviceName;
350 }
351
352
353
354
355
356
357 public String getDeviceProperty() {
358 return deviceProperty;
359 }
360
361
362
363
364
365 public String toString() {
366 return getRemoteName() + "," + accessMode + "," + accessRate + "," + propertySize;
367 }
368
369
370
371
372
373
374 public String getRemoteName() {
375 return accessProtocol + "/" + deviceContext + "/" + deviceGroup + "/" + deviceName + "/" + deviceProperty;
376 }
377
378
379
380
381
382
383
384
385 public Object getDynamicParameters() {
386 return dynamicParameters;
387 }
388
389
390
391
392
393
394
395
396
397 public int getPropertySize() {
398 return propertySize;
399 }
400
401
402
403
404
405 public int compareTo(ConnectionParameters o) {
406 if (o == null) return -1;
407 return this.toString().compareTo(o.toString());
408 }
409
410
411
412
413
414 public int hashCode() {
415 return toString().hashCode();
416 }
417
418
419
420
421
422 public boolean equals(Object o) {
423 if (!(o instanceof ConnectionParameters)) return false;
424 return this.toString().equals(o.toString());
425
426
427
428 }
429
430
431
432
433
434
435
436
437 public ConnectionParameters deriveWith(AccessMode mode) {
438 return new ConnectionParameters(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,mode,accessRate,propertySize,dynamicParameters);
439 }
440
441
442
443
444
445
446
447
448
449 public ConnectionParameters deriveWith(AccessMode mode, int rate) {
450 return new ConnectionParameters(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,mode,rate,propertySize,dynamicParameters);
451 }
452
453
454
455
456
457
458
459
460
461 public ConnectionParameters deriveWith(int rate) {
462 return deriveWithAccessRate(rate);
463 }
464
465
466
467
468
469
470
471
472 public ConnectionParameters deriveWithDynamicParameters(Object newDynamicParameters) {
473 return new ConnectionParameters(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate,
474 propertySize,newDynamicParameters);
475 }
476
477
478
479
480
481
482
483
484 public ConnectionParameters deriveWithPropertySize(int propertySize) {
485 return new ConnectionParameters(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate,
486 propertySize,dynamicParameters);
487 }
488
489
490
491
492
493
494
495
496 public ConnectionParameters deriveWithAccessProtocol(String accessProtocol) {
497 return new ConnectionParameters(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate,
498 propertySize, dynamicParameters);
499 }
500
501
502
503
504
505
506
507
508 public ConnectionParameters deriveWithDeviceContext(String deviceContext) {
509 return new ConnectionParameters(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate,
510 propertySize, dynamicParameters);
511 }
512
513
514
515
516
517
518
519
520 public ConnectionParameters deriveWithAccessRate(int accessRate) {
521 return new ConnectionParameters(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate,
522 propertySize, dynamicParameters);
523 }
524
525
526
527
528
529
530
531
532 public ConnectionParameters deriveWithDeviceGroup(String deviceGroup) {
533 return new ConnectionParameters(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate,
534 propertySize, dynamicParameters);
535 }
536
537
538
539
540
541
542
543
544 public ConnectionParameters deriveWithDeviceName(String deviceName) {
545 return new ConnectionParameters(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate,
546 propertySize, dynamicParameters);
547 }
548
549
550
551
552
553
554
555
556 public ConnectionParameters deriveWithDeviceProperty(String deviceProperty) {
557 return new ConnectionParameters(accessProtocol,deviceContext,deviceGroup,deviceName,deviceProperty,accessMode,accessRate,
558 propertySize, dynamicParameters);
559 }
560 }