/**
* AbstractObjectEntry
* Copyright 26.04.2015 by Michael Peter Christen, @0rb1t3r
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program in the file lgpl21.txt
* If not, see <http://www.gnu.org/licenses/>.
*/
package org.loklak.objects;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedHashSet;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.fasterxml.jackson.core.JsonGenerator;
public abstract class AbstractObjectEntry implements ObjectEntry {
public final static String TIMESTAMP_FIELDNAME = "timestamp";
public final static String CREATED_AT_FIELDNAME = "created_at";
public AbstractObjectEntry() {
}
public String toString() {
return this.toJSON().toString();
}
public byte[] toJSONBytes() {
String s = toString();
return s == null ? null : s.getBytes(StandardCharsets.UTF_8);
}
// helper methods to write json
public final static DateTimeFormatter utcFormatter = ISODateTimeFormat.dateTime().withZoneUTC();
public static void writeDate(JsonGenerator json, String fieldName, long time) throws IOException {
json.writeObjectField(fieldName, utcFormatter.print(time));
}
public static void writeArray(JsonGenerator json, String fieldName, Collection<String> array) throws IOException {
json.writeArrayFieldStart(fieldName);
for (String o: array) json.writeObject(o);
json.writeEndArray();
}
public static void writeArray(JsonGenerator json, String fieldName, String[] array) throws IOException {
json.writeArrayFieldStart(fieldName);
for (String o: array) json.writeObject(o);
json.writeEndArray();
}
public static void writeArray(JsonGenerator json, String fieldName, double[] array) throws IOException {
json.writeArrayFieldStart(fieldName);
for (double o: array) json.writeObject(o);
json.writeEndArray();
}
// helper methods to read json
public static Date parseDate(Object d) {
if (d == null) return new Date();
if (d instanceof Date) return (Date) d;
if (d instanceof Long) return new Date(((Long) d).longValue());
if (d instanceof String) return ISODateTimeFormat.dateOptionalTimeParser().parseDateTime((String) d).toDate();
assert false;
return new Date();
}
public static Date parseDate(Object d, Date dflt) {
if (d == null) return dflt;
if (d instanceof Long) return new Date(((Long) d).longValue());
if (d instanceof String) return ISODateTimeFormat.dateOptionalTimeParser().parseDateTime((String) d).toDate();
if (d instanceof Date) return (Date) d;
assert false;
return dflt;
}
public static String parseString(Object s) {
assert s == null || s instanceof String: "type of object s: " + s.getClass().toString();
return s == null ? "" : (String) s;
}
public static long parseLong(Object n) {
if (n instanceof String) {
return Long.parseLong((String) n);
}
assert n == null || n instanceof Number;
return n == null ? 0 : ((Number) n).longValue();
}
@SuppressWarnings("unchecked")
public static LinkedHashSet<String> parseArrayList(Object l) {
assert l == null || l instanceof String || l instanceof String[] || l instanceof Collection<?> || l instanceof JSONArray : "unexpected class in parseArrayList:" + l.getClass().getName();
if (l == null) return new LinkedHashSet<String>();
if (l instanceof String) {
LinkedHashSet<String> a = new LinkedHashSet<>();
a.add((String) l);
return a;
}
if (l instanceof String[]) {
LinkedHashSet<String> a = new LinkedHashSet<>();
for (String s: ((String[]) l)) if (s != null) a.add(s);
return a;
}
if (l instanceof LinkedHashSet<?>) {
LinkedHashSet<String> a = new LinkedHashSet<>();
for (String s: (LinkedHashSet<String>) l) if (s != null) a.add(s);
return a;
}
if (l instanceof JSONArray) {
LinkedHashSet<String> a = new LinkedHashSet<String>();
JSONArray la = (JSONArray) l;
for (int i = 0; i < la.length(); i++) {
try {
String s = la.getString(i);
if (s != null) a.add(s);
} catch (JSONException e) {}
}
return a;
}
LinkedHashSet<String> a = new LinkedHashSet<>();
for (Object s: ((Collection<?>) l)) if (s != null) a.add((String) s);
return a;
}
public Object lazyGet(JSONObject json, String key) {
try {
Object o = json.get(key);
return o;
} catch (JSONException e) {
return null;
}
}
}