| 604 | } |
| 605 | |
| 606 | @Override |
| 607 | @SuppressWarnings("unchecked") |
| 608 | public void fromJSON(JSONObject object) throws JSONException { |
| 609 | if (object.has(Members.KEEP_ZERO_ENTRIES.name())) { |
| 610 | this.setKeepZeroEntries(object.getBoolean(Members.KEEP_ZERO_ENTRIES.name())); |
| 611 | } |
| 612 | Class<?> value_type = null; |
| 613 | if (object.has(Members.VALUE_TYPE.name())) { |
| 614 | String className = object.getString(Members.VALUE_TYPE.name()); |
| 615 | value_type = ClassUtil.getClass(className); |
| 616 | } |
| 617 | |
| 618 | // This code sucks ass... |
| 619 | for (Members element : Histogram.Members.values()) { |
| 620 | if (element == Members.KEEP_ZERO_ENTRIES || element == Members.VALUE_TYPE) { |
| 621 | continue; |
| 622 | } |
| 623 | try { |
| 624 | String field_name = element.toString().toLowerCase(); |
| 625 | Field field = Histogram.class.getDeclaredField(field_name); |
| 626 | if (element == Members.HISTOGRAM) { |
| 627 | JSONObject jsonObject = object.getJSONObject(Members.HISTOGRAM.name()); |
| 628 | Iterator<String> keys = jsonObject.keys(); |
| 629 | while (keys.hasNext()) { |
| 630 | String key_name = keys.next(); |
| 631 | |
| 632 | X key_value = (X) JSONUtil.getPrimitiveValue(key_name, value_type); |
| 633 | int count = jsonObject.getInt(key_name); |
| 634 | this.histogram.put(key_value, count); |
| 635 | } |
| 636 | } else { |
| 637 | field.set(this, object.getInt(element.name())); |
| 638 | } |
| 639 | } catch (Exception e) { |
| 640 | LOG.error(e.getMessage(), e); |
| 641 | System.exit(1); |
| 642 | } |
| 643 | } |
| 644 | |
| 645 | this.dirty = true; |
| 646 | this.calculateInternalValues(); |
| 647 | } |
| 648 | } |