@Override public void read(JSONObject object) throws JSONException { super.read(object); setValue(JSONDateUtils.toDate(object.getString(VALUE))); }
@Test public void utilsCoverage() { new JSONDateUtils(); }
@SuppressWarnings("ResultOfMethodCallIgnored") @Test(expected = JSONException.class) public void formatNullDate() throws JSONException { JSONDateUtils.toString(null); }
/** * Convert date to string. * * @param date date. * @return string. * @throws JSONException if the date is null. */ public static String toString(Date date) throws JSONException { checkNull(date); return DATE_FORMAT.get().format(date); }
@Override public void write(JSONStringer writer) throws JSONException { super.write(writer); writer.key(VALUE).value(JSONDateUtils.toString(getValue())); }
/** * Convert string to date. * * @param date date. * @return string. * @throws JSONException if string has a wrong format or is null. */ public static Date toDate(String date) throws JSONException { checkNull(date); try { return DATE_FORMAT.get().parse(date); } catch (ParseException e) { throw new JSONException(e.getMessage()); } } }
@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; }
value = doubleTypedProperty.getValue(); } else if (property instanceof DateTimeTypedProperty) { value = JSONDateUtils.toString(((DateTimeTypedProperty) property).getValue()); } else if (property instanceof BooleanTypedProperty) { BooleanTypedProperty booleanTypedProperty = (BooleanTypedProperty) property;
@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); } }
private static void writePropertyValue(JSONStringer writer, Object value) throws JSONException { if (value == null) { JSONUtils.write(writer, PROPERTY_TYPE, PROPERTY_TYPE_CLEAR); } else if (value instanceof Boolean) { JSONUtils.write(writer, PROPERTY_TYPE, PROPERTY_TYPE_BOOLEAN); JSONUtils.write(writer, PROPERTY_VALUE, value); } else if (value instanceof Number) { JSONUtils.write(writer, PROPERTY_TYPE, PROPERTY_TYPE_NUMBER); JSONUtils.write(writer, PROPERTY_VALUE, value); } else if (value instanceof Date) { JSONUtils.write(writer, PROPERTY_TYPE, PROPERTY_TYPE_DATETIME); JSONUtils.write(writer, PROPERTY_VALUE, JSONDateUtils.toString((Date) value)); } else if (value instanceof String) { JSONUtils.write(writer, PROPERTY_TYPE, PROPERTY_TYPE_STRING); JSONUtils.write(writer, PROPERTY_VALUE, value); } else { throw new JSONException("Invalid value type"); } }
@Test(expected = JSONException.class) public void parseInvalidDate() throws JSONException { JSONDateUtils.toDate("Fri Jul 07 17:43:56 PDT 2017"); } }
@Override public void write(JSONStringer writer) throws JSONException { JSONUtils.write(writer, TYPE, getType()); writer.key(TIMESTAMP).value(JSONDateUtils.toString(getTimestamp())); JSONUtils.write(writer, SID, getSid()); JSONUtils.write(writer, DISTRIBUTION_GROUP_ID, getDistributionGroupId()); JSONUtils.write(writer, USER_ID, getUserId()); if (getDevice() != null) { writer.key(DEVICE).object(); getDevice().write(writer); writer.endObject(); } }
@Test(expected = JSONException.class) public void parseNullDate() throws JSONException { JSONDateUtils.toDate(null); }
@Override public void write(JSONStringer writer) throws JSONException { super.write(writer); JSONUtils.write(writer, ID, getId()); JSONUtils.write(writer, PROCESS_ID, getProcessId()); JSONUtils.write(writer, PROCESS_NAME, getProcessName()); JSONUtils.write(writer, PARENT_PROCESS_ID, getParentProcessId()); JSONUtils.write(writer, PARENT_PROCESS_NAME, getParentProcessName()); JSONUtils.write(writer, ERROR_THREAD_ID, getErrorThreadId()); JSONUtils.write(writer, ERROR_THREAD_NAME, getErrorThreadName()); JSONUtils.write(writer, FATAL, getFatal()); JSONUtils.write(writer, APP_LAUNCH_TIMESTAMP, JSONDateUtils.toString(getAppLaunchTimestamp())); JSONUtils.write(writer, ARCHITECTURE, getArchitecture()); }
@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 write(JSONStringer writer) throws JSONException { /* Override abstract log JSON since it's Common Schema and not App Center schema. */ /* Part A. */ writer.key(VER).value(getVer()); writer.key(NAME).value(getName()); writer.key(TIME).value(JSONDateUtils.toString(getTimestamp())); JSONUtils.write(writer, POP_SAMPLE, getPopSample()); JSONUtils.write(writer, IKEY, getIKey()); JSONUtils.write(writer, FLAGS, getFlags()); JSONUtils.write(writer, CV, getCV()); /* Part A extensions. */ if (getExt() != null) { writer.key(EXT).object(); getExt().write(writer); writer.endObject(); } /* Parts B & C. */ if (getData() != null) { writer.key(DATA).object(); getData().write(writer); writer.endObject(); } }
@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 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()); }