@Override public void read(JSONObject object) throws JSONException { super.read(object); setValue(JSONDateUtils.toDate(object.getString(VALUE))); }
@SuppressWarnings("IfCanBeSwitch") private static Object readPropertyValue(JSONObject object) throws JSONException { String type = object.getString(PROPERTY_TYPE); Object value; if (type.equals(PROPERTY_TYPE_CLEAR)) { value = null; } else if (type.equals(PROPERTY_TYPE_BOOLEAN)) { value = object.getBoolean(PROPERTY_VALUE); } else if (type.equals(PROPERTY_TYPE_NUMBER)) { value = object.get(PROPERTY_VALUE); if (!(value instanceof Number)) { throw new JSONException("Invalid value type"); } } else if (type.equals(PROPERTY_TYPE_DATETIME)) { value = JSONDateUtils.toDate(object.getString(PROPERTY_VALUE)); } else if (type.equals(PROPERTY_TYPE_STRING)) { value = object.getString(PROPERTY_VALUE); } else { throw new JSONException("Invalid value type"); } return value; }
@Override public void read(JSONObject object) throws JSONException { if (!object.getString(TYPE).equals(getType())) { throw new JSONException("Invalid type"); } setTimestamp(JSONDateUtils.toDate(object.getString(TIMESTAMP))); if (object.has(SID)) { setSid(UUID.fromString(object.getString(SID))); } setDistributionGroupId(object.optString(DISTRIBUTION_GROUP_ID, null)); setUserId(object.optString(USER_ID, null)); if (object.has(DEVICE)) { Device device = new Device(); device.read(object.getJSONObject(DEVICE)); setDevice(device); } }
@Test(expected = JSONException.class) public void parseInvalidDate() throws JSONException { JSONDateUtils.toDate("Fri Jul 07 17:43:56 PDT 2017"); } }
@Test(expected = JSONException.class) public void parseNullDate() throws JSONException { JSONDateUtils.toDate(null); }
@Override public void read(JSONObject object) throws JSONException { super.read(object); setId(UUID.fromString(object.getString(ID))); setProcessId(JSONUtils.readInteger(object, PROCESS_ID)); setProcessName(object.optString(PROCESS_NAME, null)); setParentProcessId(JSONUtils.readInteger(object, PARENT_PROCESS_ID)); setParentProcessName(object.optString(PARENT_PROCESS_NAME, null)); setErrorThreadId(JSONUtils.readLong(object, ERROR_THREAD_ID)); setErrorThreadName(object.optString(ERROR_THREAD_NAME, null)); setFatal(JSONUtils.readBoolean(object, FATAL)); setAppLaunchTimestamp(JSONDateUtils.toDate(object.getString(APP_LAUNCH_TIMESTAMP))); setArchitecture(object.optString(ARCHITECTURE, null)); }
@Override public void read(JSONObject object) throws JSONException { /* Override abstract log JSON since it's Common Schema and not App Center schema. */ /* Read top level PART A simple fields. */ setVer(object.getString(VER)); setName(object.getString(NAME)); setTimestamp(JSONDateUtils.toDate(object.getString(TIME))); if (object.has(POP_SAMPLE)) { setPopSample(object.getDouble(POP_SAMPLE)); } setIKey(object.optString(IKEY, null)); setFlags(JSONUtils.readLong(object, FLAGS)); setCV(object.optString(CV, null)); /* Read extensions. */ if (object.has(EXT)) { Extensions extensions = new Extensions(); extensions.read(object.getJSONObject(EXT)); setExt(extensions); } /* Read Parts B&C. */ if (object.has(DATA)) { Data data = new Data(); data.read(object.getJSONObject(DATA)); setData(data); } }
@Test public void formatAndParseDate() throws JSONException { Date date = new Date(); String dateString = JSONDateUtils.toString(date); Date dateParsed = JSONDateUtils.toDate(dateString); /* Using equals will also check for millisecond accuracy. */ assertEquals(date, dateParsed); }
@Test public void dateTimeTypedProperty() throws JSONException { MockCommonSchemaLog log = new MockCommonSchemaLog(); List<TypedProperty> properties = new ArrayList<>(); DateTimeTypedProperty property = new DateTimeTypedProperty(); property.setName("a"); property.setValue(new Date(100)); properties.add(property); CommonSchemaDataUtils.addCommonSchemaData(properties, log); /* Check data. */ assertEquals(1, log.getData().getProperties().length()); assertEquals(new Date(100), JSONDateUtils.toDate(log.getData().getProperties().getString("a"))); /* Check metadata. */ JSONObject expectedMetadata = new JSONObject(); JSONObject a = new JSONObject(); a.put("a", DATA_TYPE_DATETIME); expectedMetadata.put(METADATA_FIELDS, a); assertNotNull(log.getExt()); assertNotNull(log.getExt().getMetadata()); assertEquals(expectedMetadata.toString(), log.getExt().getMetadata().getMetadata().toString()); }