diff options
author | Vitaly Takmazov | 2016-07-07 11:32:44 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2016-07-07 11:32:44 +0300 |
commit | fe8cf8c0093bbbfb053f52a53daea9145705b62e (patch) | |
tree | 3515f5d254016f73287696e2a08ba6e7fd824714 /src/main/java/com/juick/json/MessageSerializer.java | |
parent | a8b38ca23e9b43527e85b0dbf5c9267401fd3c69 (diff) | |
parent | fc46d9c1f8c9967f9c648f09a3714e8c3a4ed75a (diff) |
merge json
Diffstat (limited to 'src/main/java/com/juick/json/MessageSerializer.java')
-rw-r--r-- | src/main/java/com/juick/json/MessageSerializer.java | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/main/java/com/juick/json/MessageSerializer.java b/src/main/java/com/juick/json/MessageSerializer.java new file mode 100644 index 00000000..4818722f --- /dev/null +++ b/src/main/java/com/juick/json/MessageSerializer.java @@ -0,0 +1,139 @@ +/* + * 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 <http://www.gnu.org/licenses/>. + */ +package com.juick.json; + +import com.juick.Message; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * + * @author Ugnich Anton + */ +public class MessageSerializer extends JSONSerializer<Message> { + + private final static Logger LOGGER = Logger.getLogger(MessageSerializer.class.getName()); + + UserSerializer userSerializer = new UserSerializer(); + PlaceSerializer placeSerializer = new PlaceSerializer(); + + 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.ReplyTo = 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.Tags.add(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.ReplyTo > 0) { + json.put("replyto", msg.ReplyTo); + } + 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.Tags != null && msg.Tags.size() > 0) { + json.put("tags", new JSONArray(msg.Tags)); + } + 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(); + photo.put("thumbnail", "http://i.juick.com/ps/" + fname); + photo.put("small", "http://i.juick.com/photos-512/" + fname); + photo.put("medium", "http://i.juick.com/photos-1024/" + fname); + json.put("photo", photo); + } + } catch (JSONException e) { + LOGGER.log(Level.SEVERE, "JSON Exception", e); + } + + return json; + } +} |