1 package org.lsst.ccs.bus;
2
3 import org.lsst.ccs.utilities.beanutils.Optional;
4 import org.lsst.ccs.utilities.logging.Logger;
5
6 import java.io.Serializable;
7 import java.util.Collections;
8 import java.util.List;
9
10
11
12
13
14
15
16
17
18 public class KeyData implements Serializable {
19
20
21
22
23 public static class CodedData implements Serializable {
24
25
26
27 String className;
28
29
30
31 Object content;
32
33
34
35 List<KeyData> listKV;
36
37 public CodedData(String className) {
38 this.className = className;
39 }
40
41 @Override
42 public String toString() {
43 return "CodedData{" +
44 "className='" + className + '\'' +
45 ", content=" + content +
46 ", listKV=" + listKV +
47 '}';
48 }
49 }
50 public static Logger logger = Logger.getLogger("org.lsst.ccs.bus") ;
51
52 private String key;
53 private Object data;
54
55 public KeyData(String key, Object data) {
56 this.key = key;
57 this.data = data;
58 }
59
60 public String getKey() {
61 return this.key;
62 }
63
64 public List<KeyData> getContentAsRawList() {
65 List<KeyData> listRes = null;
66 if (data instanceof CodedData) {
67 listRes = ((CodedData) data).listKV;
68 }
69 if (listRes == null) {
70 return Collections.emptyList();
71 }
72 return listRes;
73 }
74
75
76
77
78
79
80
81
82
83 public List<KeyData> getContentAsList() {
84 return StatusCodec.asSimpleKeyValueList(key, data);
85 }
86
87
88
89
90
91
92 public Optional<Object> getValue() {
93 Object obj = null;
94 try {
95 obj = StatusCodec.decode(data);
96 } catch (Exception e) {
97
98 logger.warn("can't decode " + getKey(),e) ;
99 }
100 if(obj == null) return Optional.empty() ;
101 return Optional.of(obj);
102 }
103
104
105
106
107
108
109
110
111
112 public Optional<byte[]> getCrystallizedData() {
113 byte[] res = null;
114 if (data instanceof CodedData) {
115 CodedData obj = ((CodedData) data);
116 if (obj.content instanceof byte[]) {
117 res = (byte[]) obj.content;
118 }
119 }
120 return Optional.of(res);
121 }
122
123 public String getUpdatedKey(String globalName) {
124 String newKey;
125 if (this.key.length() == 0) {
126 return globalName;
127 } else {
128 return globalName + '/' + this.key;
129 }
130 }
131
132 public Object getRawValue() {
133 return this.data;
134 }
135
136 @Override
137 public String toString() {
138 return "{" +
139 "key='" + key + '\'' +
140 ", data=" + data +
141 '}';
142 }
143 }