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