blob: c121c9d2b1aeb78d4d9edad4ebb2283533863ccd [file] [log] [blame]
Nils Diewaldc471b182014-11-19 22:51:15 +00001package de.ids_mannheim.korap.response;
2
3import java.util.LinkedList;
4
5import com.fasterxml.jackson.annotation.*;
6import com.fasterxml.jackson.databind.ObjectMapper;
7import com.fasterxml.jackson.databind.JsonNode;
8import com.fasterxml.jackson.databind.node.*;
9
Nils Diewald2f2b0672014-11-25 20:26:22 +000010/**
11 * A message for Notifications.
12 *
13 * <p>
14 * <blockquote><pre>
15 * Message m = new Message();
16 * m.setCode(614);
17 * m.setMessage("This is a new message");
18 * m.addParameter("MyClass");
19 * </pre></blockquote>
20 *
21 * @author Nils Diewald
22 * @see de.ids_mannheim.korap.response.Messages
23 */
Nils Diewaldc471b182014-11-19 22:51:15 +000024public class Message implements Cloneable {
25 // Mapper for JSON serialization
26 ObjectMapper mapper = new ObjectMapper();
27
28 private String msg;
29 private int code = 0;
30 private LinkedList<String> parameters;
31
Nils Diewald44d5fa12015-01-15 21:31:52 +000032
Nils Diewald2f2b0672014-11-25 20:26:22 +000033 /**
34 * Construct a new message object.
35 *
36 * @param code Code number representing the message code
37 * @param msg String representation of the message
38 * @return The new message object
39 */
Nils Diewaldc471b182014-11-19 22:51:15 +000040 public Message (int code, String msg) {
Nils Diewald44d5fa12015-01-15 21:31:52 +000041 this.code = code;
42 this.msg = msg;
Nils Diewaldc471b182014-11-19 22:51:15 +000043 };
44
Nils Diewald2f2b0672014-11-25 20:26:22 +000045 /**
46 * Construct a new message object.
47 *
48 * @return The new empty message object
49 */
Nils Diewaldc471b182014-11-19 22:51:15 +000050 public Message () {};
51
Nils Diewaldc471b182014-11-19 22:51:15 +000052
Nils Diewald2f2b0672014-11-25 20:26:22 +000053 /**
54 * Return the string representation of the message.
55 *
56 * @return String representation of the message
57 */
Nils Diewaldc471b182014-11-19 22:51:15 +000058 @JsonIgnore
59 public String getMessage () {
Nils Diewald44d5fa12015-01-15 21:31:52 +000060 return this.msg;
Nils Diewaldc471b182014-11-19 22:51:15 +000061 };
62
Nils Diewald44d5fa12015-01-15 21:31:52 +000063
64 /**
65 * Set the string representation of the message.
66 *
67 * @param msg String representation of the message
68 * @return Message object for chaining
69 */
70 @JsonIgnore
71 public Message setMessage (String msg) {
72 this.msg = msg;
73 return this;
74 };
75
76
77 /**
78 * Return the integer code representation of the message.
79 *
80 * @return Integer code representation of the message
81 */
82 @JsonIgnore
83 public int getCode () {
84 return this.code;
85 };
86
87
88
Nils Diewald2f2b0672014-11-25 20:26:22 +000089 /**
90 * Set the integer representation of the message.
91 *
92 * @param code Integer code representation of the message
93 * @return Message object for chaining
94 */
Nils Diewaldc471b182014-11-19 22:51:15 +000095 @JsonIgnore
Nils Diewald2f2b0672014-11-25 20:26:22 +000096 public Message setCode (int code) {
Nils Diewald44d5fa12015-01-15 21:31:52 +000097 this.code = code;
98 return this;
Nils Diewaldc471b182014-11-19 22:51:15 +000099 };
100
Nils Diewald2f2b0672014-11-25 20:26:22 +0000101
102 /**
103 * Add additional string parameters to the message.
104 *
105 * @return Message object for chaining
106 */
107 public Message addParameter (String param) {
Nils Diewald44d5fa12015-01-15 21:31:52 +0000108 if (this.parameters == null)
109 this.parameters = new LinkedList<String>();
110 this.parameters.add(param);
111 return this;
Nils Diewaldc471b182014-11-19 22:51:15 +0000112 };
113
Nils Diewald44d5fa12015-01-15 21:31:52 +0000114
Nils Diewald2f2b0672014-11-25 20:26:22 +0000115 /**
116 * Create a clone of the Message.
117 *
118 * @return The cloned message object
119 * @throws CloneNotSupportedException if message can't be cloned
120 */
121 public Object clone () throws CloneNotSupportedException {
Nils Diewald44d5fa12015-01-15 21:31:52 +0000122 Message clone = new Message();
Nils Diewald2f2b0672014-11-25 20:26:22 +0000123
Nils Diewald44d5fa12015-01-15 21:31:52 +0000124 // Copy message string
125 if (this.msg != null)
126 clone.msg = this.msg;
Nils Diewaldc471b182014-11-19 22:51:15 +0000127
Nils Diewald44d5fa12015-01-15 21:31:52 +0000128 // Copy message code
129 clone.code = this.code;
130
131 // Copy parameters
132 if (this.parameters != null) {
133 for (String p : this.parameters) {
134 clone.addParameter(p);
135 };
136 };
Nils Diewaldc471b182014-11-19 22:51:15 +0000137
Nils Diewald44d5fa12015-01-15 21:31:52 +0000138 return clone;
Nils Diewaldc471b182014-11-19 22:51:15 +0000139 };
140
Nils Diewald2f2b0672014-11-25 20:26:22 +0000141 /**
142 * Serialize Message as a JsonNode.
143 *
144 * @return JsonNode representation of the message
145 */
Nils Diewalde1ecd5e2014-11-27 02:17:24 +0000146 public JsonNode toJsonNode () {
Nils Diewald44d5fa12015-01-15 21:31:52 +0000147 ArrayNode message = mapper.createArrayNode();
Nils Diewaldc471b182014-11-19 22:51:15 +0000148
Nils Diewald44d5fa12015-01-15 21:31:52 +0000149 if (this.code != 0)
150 message.add(this.getCode());
151
152 message.add(this.getMessage());
153 if (parameters != null)
154 for (String p : parameters)
155 message.add(p);
156 return (JsonNode) message;
Nils Diewaldc471b182014-11-19 22:51:15 +0000157 };
158
Nils Diewald2f2b0672014-11-25 20:26:22 +0000159
Nils Diewaldc471b182014-11-19 22:51:15 +0000160 /**
Nils Diewald2f2b0672014-11-25 20:26:22 +0000161 * Serialize Message as a JSON string.
162 * <p>
163 * <blockquote><pre>
164 * [123, "You are not allowed to serialize these messages"]
165 * </pre></blockquote>
166 *
167 * @return String representation of the message
Nils Diewaldc471b182014-11-19 22:51:15 +0000168 */
Nils Diewalde1ecd5e2014-11-27 02:17:24 +0000169 public String toJsonString () {
Nils Diewald44d5fa12015-01-15 21:31:52 +0000170 String msg = "";
171 try {
172 return mapper.writeValueAsString(this.toJsonNode());
173 }
174 catch (Exception e) {
175 // Bad in case the message contains quotes!
176 msg = ", \"" + e.getLocalizedMessage() + "\"";
177 };
178 return
179 "[620, " +
180 "\"Unable to generate JSON\"" + msg + "]";
Nils Diewaldc471b182014-11-19 22:51:15 +0000181 };
182};