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
33
34
35
36
37
38 public class LongDataBlock
39 extends DataBlock implements BcdValue {
40
41 private long value;
42 private String bcdError;
43
44 @Override
45 public boolean isBcdError() {
46 return bcdError != null;
47 }
48
49 public LongDataBlock() {
50 super();
51 }
52
53
54
55
56 public long getValue() {
57 if (isBcdError()) {
58 throw new IllegalArgumentException("No value BCD Error: " + bcdError);
59 } else {
60 return value;
61 }
62 }
63
64 @Override
65 public String getValueAsString() {
66 if (bcdError != null) {
67 return bcdError;
68 }
69
70 switch (getDataFieldCode()) {
71 case _48_BIT_INTEGER:
72 case _64_BIT_INTEGER:
73 return Long.toString(value);
74
75 case _12_DIGIT_BCD:
76 return String.format("%012d", value);
77
78 default:
79 throw new RuntimeException("DIF not supported: " + getDataFieldCode());
80 }
81 }
82
83
84
85
86 public void setValue(long value) {
87 this.value = value;
88 this.bcdError = null;
89 }
90
91 @Override
92 protected void accumulateDatatoJSON(JSONObject json) {
93 if (!isBcdError()) {
94 json.accumulate("data",
95 getValue());
96 } else {
97 JSONObject jsonBcdError = new JSONObject();
98 jsonBcdError.accumulate("bcdErrorCode",
99 getBcdError());
100 json.accumulate("data", jsonBcdError);
101 }
102 }
103
104 @Override
105 public void fromJSON(JSONObject json) {
106 super.fromJSON(json);
107
108 if (json.get("data") instanceof JSONObject) {
109 JSONObject data = json.getJSONObject("data");
110
111 if (data.containsKey("bcdErrorCode")) {
112 bcdError = data.getString("bcdErrorCode");
113 } else {
114 throw new IllegalArgumentException("Unknown value at data: " + data.toString(1));
115 }
116 } else {
117 setValue(json.getLong("data"));
118 }
119 }
120
121
122
123
124 @Override
125 public String getBcdError() {
126 return bcdError;
127 }
128
129
130
131
132 @Override
133 public void setBcdError(String bcdError) {
134 this.bcdError = formatBcdError(bcdError);
135 this.value = 0;
136 }
137
138 @Override
139 public void setValue(String text) {
140 try {
141 value = Long.parseLong(text);
142 bcdError = null;
143 } catch (NumberFormatException ex) {
144 value = 0;
145 bcdError = text;
146 }
147 }
148
149 @Override
150 public boolean isBcd() {
151 return DataFieldCode._12_DIGIT_BCD.equals(getDataFieldCode());
152 }
153
154 }