1package eu.siacs.conversations.entities;
 2
 3import java.util.ArrayList;
 4import java.util.List;
 5import java.util.Objects;
 6import org.json.JSONArray;
 7import org.json.JSONException;
 8import org.json.JSONObject;
 9
10public class Edit {
11
12    private final String editedId;
13    private final String serverMsgId;
14
15    Edit(String editedId, String serverMsgId) {
16        this.editedId = editedId;
17        this.serverMsgId = serverMsgId;
18    }
19
20    static String toJson(List<Edit> edits) throws JSONException {
21        JSONArray jsonArray = new JSONArray();
22        for (Edit edit : edits) {
23            jsonArray.put(edit.toJson());
24        }
25        return jsonArray.toString();
26    }
27
28    static boolean wasPreviouslyEditedRemoteMsgId(List<Edit> edits, String remoteMsgId) {
29        for (Edit edit : edits) {
30            if (edit.editedId != null && edit.editedId.equals(remoteMsgId)) {
31                return true;
32            }
33        }
34        return false;
35    }
36
37    static boolean wasPreviouslyEditedServerMsgId(List<Edit> edits, String serverMsgId) {
38        for (Edit edit : edits) {
39            if (edit.serverMsgId != null && edit.serverMsgId.equals(serverMsgId)) {
40                return true;
41            }
42        }
43        return false;
44    }
45
46    private static Edit fromJson(JSONObject jsonObject) throws JSONException {
47        String edited = jsonObject.has("edited_id") ? jsonObject.getString("edited_id") : null;
48        String serverMsgId =
49                jsonObject.has("server_msg_id") ? jsonObject.getString("server_msg_id") : null;
50        return new Edit(edited, serverMsgId);
51    }
52
53    static List<Edit> fromJson(String input) {
54        final ArrayList<Edit> list = new ArrayList<>();
55        if (input == null) {
56            return list;
57        }
58        try {
59            final JSONArray jsonArray = new JSONArray(input);
60            for (int i = 0; i < jsonArray.length(); ++i) {
61                list.add(fromJson(jsonArray.getJSONObject(i)));
62            }
63            return list;
64        } catch (JSONException e) {
65            return list;
66        }
67    }
68
69    private JSONObject toJson() throws JSONException {
70        JSONObject jsonObject = new JSONObject();
71        jsonObject.put("edited_id", editedId);
72        jsonObject.put("server_msg_id", serverMsgId);
73        return jsonObject;
74    }
75
76    String getEditedId() {
77        return editedId;
78    }
79
80    @Override
81    public boolean equals(Object o) {
82        if (this == o) return true;
83        if (o == null || getClass() != o.getClass()) return false;
84
85        Edit edit = (Edit) o;
86
87        if (!Objects.equals(editedId, edit.editedId)) return false;
88        return Objects.equals(serverMsgId, edit.serverMsgId);
89    }
90
91    @Override
92    public int hashCode() {
93        int result = editedId != null ? editedId.hashCode() : 0;
94        result = 31 * result + (serverMsgId != null ? serverMsgId.hashCode() : 0);
95        return result;
96    }
97}