From 5b2bd7f928bbf9d3233ff029ed5c09ac46daf0de Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Mon, 28 Nov 2016 14:37:02 +0300 Subject: all components using jackson now, org.json serializer moved to compatibility tests package --- src/test/java/com/juick/json/JSONSerializer.java | 73 +++++++++++ .../java/com/juick/json/MessageSerializer.java | 145 +++++++++++++++++++++ src/test/java/com/juick/json/PlaceSerializer.java | 73 +++++++++++ src/test/java/com/juick/json/UserSerializer.java | 66 ++++++++++ src/test/java/com/juick/tests/ApiTests.java | 3 +- 5 files changed, 359 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/juick/json/JSONSerializer.java create mode 100644 src/test/java/com/juick/json/MessageSerializer.java create mode 100644 src/test/java/com/juick/json/PlaceSerializer.java create mode 100644 src/test/java/com/juick/json/UserSerializer.java (limited to 'src') diff --git a/src/test/java/com/juick/json/JSONSerializer.java b/src/test/java/com/juick/json/JSONSerializer.java new file mode 100644 index 00000000..3dc9e04e --- /dev/null +++ b/src/test/java/com/juick/json/JSONSerializer.java @@ -0,0 +1,73 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.juick.json; + +import java.text.ParseException; +import java.util.Iterator; +import java.util.List; +import org.json.JSONObject; + +/** + * + * @author vt + * @param + */ +public abstract class JSONSerializer { + + public enum URIScheme { + Plain, + Secure + } + + private URIScheme uriScheme; + + public URIScheme getUriScheme() { + return uriScheme; + } + + public void setUriScheme(URIScheme uriScheme) { + this.uriScheme = uriScheme; + } + + public JSONSerializer() { + this.uriScheme = URIScheme.Plain; + } + + /** + * + * @param json + * @return + */ + public abstract T deserialize(JSONObject json) throws ParseException; + + /** + * + * @param obj + * @return + */ + public abstract JSONObject serialize(T obj); + + /** + * + * @param objs + * @return + */ + public String serializeList(List objs) { + String json = "["; + + Iterator i = objs.iterator(); + while (i.hasNext()) { + T m = i.next(); + if (json.length() > 1) { + json += ","; + } + json += serialize(m).toString(); + } + + json += "]"; + return json; + } +} diff --git a/src/test/java/com/juick/json/MessageSerializer.java b/src/test/java/com/juick/json/MessageSerializer.java new file mode 100644 index 00000000..ebc3b0b0 --- /dev/null +++ b/src/test/java/com/juick/json/MessageSerializer.java @@ -0,0 +1,145 @@ +/* + * Juick + * Copyright (C) 2008-2011, Ugnich Anton + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package com.juick.json; + +import com.juick.Message; +import com.juick.Tag; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.TimeZone; +import java.util.stream.Collectors; + +/** + * + * @author Ugnich Anton + */ +public class MessageSerializer extends JSONSerializer { + + private final static Logger LOGGER = LoggerFactory.getLogger(MessageSerializer.class); + + UserSerializer userSerializer = new UserSerializer(); + PlaceSerializer placeSerializer = new PlaceSerializer(); + + private final SimpleDateFormat df; + + public MessageSerializer() { + df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + df.setTimeZone(TimeZone.getTimeZone("UTC")); + } + + @Override + public Message deserialize(JSONObject json) throws JSONException, ParseException { + com.juick.Message jmsg = new com.juick.Message(); + jmsg.setMid(json.getInt("mid")); + if (json.has("rid")) { + jmsg.setRid(json.getInt("rid")); + } + if (json.has("replyto")) { + jmsg.setReplyto(json.getInt("replyto")); + } + + jmsg.FriendsOnly = json.has("friendsonly"); + jmsg.ReadOnly = json.has("readonly"); + + jmsg.setText(json.getString("body").replace(""", "\"")); + jmsg.setUser(userSerializer.deserialize(json.getJSONObject("user"))); + + jmsg.setDate(df.parse(json.getString("timestamp"))); + + if (json.has("tags")) { + JSONArray tags = json.getJSONArray("tags"); + for (int n = 0; n < tags.length(); n++) { + jmsg.getTags().add(new Tag(tags.getString(n).replace(""", "\""))); + } + } + + if (json.has("replies")) { + jmsg.Replies = json.getInt("replies"); + } + + if (json.has("photo")) { + jmsg.Photo = json.getJSONObject("photo").getString("small"); + } + + return jmsg; + } + + @Override + public JSONObject serialize(Message msg) { + JSONObject json = new JSONObject(); + + try { + if (msg.getMid() > 0) { + json.put("mid", msg.getMid()); + } + if (msg.getRid() > 0) { + json.put("rid", msg.getRid()); + } + if (msg.getReplyto() > 0) { + json.put("replyto", msg.getReplyto()); + } + if (msg.FriendsOnly) { + json.put("friendsonly", 1); + } + if (msg.ReadOnly) { + json.put("readonly", 1); + } + if (msg.getText() != null) { + json.put("body", msg.getText()); + } + if (msg.getDate() != null) { + json.put("timestamp", df.format(msg.getDate())); + } + if (msg.getUser() != null) { + json.put("user", userSerializer.serialize(msg.getUser())); + } + if (msg.getTags() != null && msg.getTags().size() > 0) { + json.put("tags", new JSONArray(msg.getTags().stream().map(Tag::getName).collect(Collectors.toList()))); + } + if (msg.Replies > 0) { + json.put("replies", msg.Replies); + } + if (msg.Place != null) { + json.put("place", placeSerializer.serialize(msg.Place)); + } + if (msg.AttachmentType != null) { + String fname = msg.getMid() + (msg.getRid() > 0 ? "-" + msg.getRid() : "") + "." + msg.AttachmentType; + JSONObject photo = new JSONObject(); + String protocol = getUriScheme() == URIScheme.Plain ? "http:" : "https:"; + photo.put("thumbnail", protocol + "//i.juick.com/ps/" + fname); + photo.put("small", protocol + "//i.juick.com/photos-512/" + fname); + photo.put("medium", protocol + "//i.juick.com/photos-1024/" + fname); + json.put("photo", photo); + } + } catch (JSONException e) { + LOGGER.error("JSON Exception", e); + } + + return json; + } + + public SimpleDateFormat getDf() { + return df; + } +} diff --git a/src/test/java/com/juick/json/PlaceSerializer.java b/src/test/java/com/juick/json/PlaceSerializer.java new file mode 100644 index 00000000..f433f7f0 --- /dev/null +++ b/src/test/java/com/juick/json/PlaceSerializer.java @@ -0,0 +1,73 @@ +/* + * Juick + * Copyright (C) 2008-2011, Ugnich Anton + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package com.juick.json; + +import com.juick.Place; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * + * @author Ugnich Anton + */ +public class PlaceSerializer extends JSONSerializer { + + @Override + public Place deserialize(JSONObject json) throws JSONException { + Place jplace = new Place(); + + jplace.pid = json.getInt("pid"); + jplace.lat = json.getDouble("lat"); + jplace.lon = json.getDouble("lon"); + jplace.name = json.getString("name").replace(""", "\""); + if (json.has("users")) { + jplace.users = json.getInt("users"); + } + if (json.has("messages")) { + jplace.messages = json.getInt("messages"); + } + if (json.has("distance")) { + jplace.distance = json.getInt("distance"); + } + + return jplace; + } + + @Override + public JSONObject serialize(Place place) { + JSONObject json = new JSONObject(); + + try { + if (place.pid > 0) { + json.put("pid", place.pid); + } + if (place.lat >= -90 && place.lat <= 90) { + json.put("lat", place.lat); + } + if (place.lon >= -180 && place.lon <= 180) { + json.put("lon", place.lon); + } + if (place.name != null) { + json.put("name", place.name); + } + } catch (JSONException e) { + } + + return json; + } +} diff --git a/src/test/java/com/juick/json/UserSerializer.java b/src/test/java/com/juick/json/UserSerializer.java new file mode 100644 index 00000000..120645a6 --- /dev/null +++ b/src/test/java/com/juick/json/UserSerializer.java @@ -0,0 +1,66 @@ +/* + * Juick + * Copyright (C) 2008-2011, Ugnich Anton + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package com.juick.json; + +import com.juick.User; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * + * @author Ugnich Anton + */ +public class UserSerializer extends JSONSerializer { + + @Override + public User deserialize(JSONObject json) throws JSONException { + User juser = new User(); + juser.setUid(json.getInt("uid")); + juser.setName(json.getString("uname")); + if (json.has("fullname")) { + juser.setFullName(json.getString("fullname")); + } + return juser; + } + + @Override + public JSONObject serialize(User user) { + JSONObject json = new JSONObject(); + + try { + if (user.getUid() > 0) { + json.put("uid", user.getUid()); + } + if (user.getName() != null) { + json.put("uname", user.getName()); + } + if (user.getFullName() != null) { + json.put("fullname", user.getFullName()); + } + if (user.getJid() != null) { + json.put("jid", user.getJid()); + } + if (user.getUnreadCount() > 0) { + json.put("unreadCount", user.getUnreadCount()); + } + } catch (JSONException e) { + } + + return json; + } +} diff --git a/src/test/java/com/juick/tests/ApiTests.java b/src/test/java/com/juick/tests/ApiTests.java index b80b9eb9..727447e0 100644 --- a/src/test/java/com/juick/tests/ApiTests.java +++ b/src/test/java/com/juick/tests/ApiTests.java @@ -2,6 +2,7 @@ package com.juick.tests; import ch.vorburger.exec.ManagedProcessException; import ch.vorburger.mariadb4j.DB; +import com.fasterxml.jackson.core.JsonProcessingException; import com.juick.Message; import com.juick.Tag; import com.juick.User; @@ -100,7 +101,7 @@ public class ApiTests { } @Test - public void protocolTests() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException { + public void protocolTests() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, ParseException, JsonProcessingException { String baseUri = "http://localhost/"; JuickProtocol protocol = new JuickProtocol(jdbc, baseUri); MessageSerializer json = new MessageSerializer(); -- cgit v1.2.3