1 package net.sf.mbus4j.dataframes.datablocks;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 import net.sf.json.JSONObject;
31 import net.sf.mbus4j.dataframes.datablocks.dif.DataFieldCode;
32 import net.sf.mbus4j.dataframes.datablocks.vif.Vif;
33
34
35
36
37
38
39 public class ShortDataBlock extends DataBlock implements BcdValue {
40
41 private short value;
42 private String bcdError;
43
44 @Override
45 public boolean isBcdError() {
46 return bcdError != null;
47 }
48
49 public ShortDataBlock() {
50 super();
51 }
52
53 @Deprecated
54 public ShortDataBlock(DataFieldCode dif, Vif vif) {
55 super(dif, vif);
56 }
57
58
59
60
61 public short getValue() {
62 if (isBcdError()) {
63 throw new IllegalArgumentException("No value BCD Error: " + bcdError);
64 } else {
65 return value;
66 }
67 }
68
69 @Override
70 public String getValueAsString() {
71 if (bcdError != null) {
72 return bcdError;
73 }
74 switch (getDataFieldCode()) {
75 case _16_BIT_INTEGER:
76 return Short.toString(value);
77 case _4_DIGIT_BCD:
78 return String.format("%04d", value);
79 default:
80 throw new RuntimeException("DIF not supported: " + getDataFieldCode());
81 }
82 }
83
84
85
86
87 public void setValue(short value) {
88 this.value = value;
89 this.bcdError = null;
90 }
91
92 @Override
93 protected void accumulateDatatoJSON(JSONObject json) {
94 if (!isBcdError()) {
95 json.accumulate("data", getValue());
96 } else {
97 JSONObject jsonBcdError = new JSONObject();
98 jsonBcdError.accumulate("bcdErrorCode", getBcdError());
99 json.accumulate("data", jsonBcdError);
100 }
101 }
102
103 @Override
104 public void fromJSON(JSONObject json) {
105 super.fromJSON(json);
106 if (json.get("data") instanceof JSONObject) {
107 JSONObject data = json.getJSONObject("data");
108 if (data.containsKey("bcdErrorCode")) {
109 bcdError = data.getString("bcdErrorCode");
110 } else {
111 throw new IllegalArgumentException("Unknown value at data: " + data.toString(1));
112 }
113 } else {
114 setValue((short) json.getInt("data"));
115 }
116 }
117
118
119
120
121 @Override
122 public String getBcdError() {
123 return bcdError;
124 }
125
126
127
128
129 @Override
130 public void setBcdError(String bcdError) {
131 this.bcdError = formatBcdError(bcdError);
132 this.value = 0;
133 }
134
135 @Override
136 public void setValue(String text) {
137 try {
138 value = Short.parseShort(text);
139 bcdError = null;
140 } catch (NumberFormatException ex) {
141 value = 0;
142 bcdError = text;
143 }
144 }
145
146 @Override
147 public boolean isBcd() {
148 return DataFieldCode._4_DIGIT_BCD.equals(getDataFieldCode());
149 }
150 }