001 package de.deepamehta.plugins.mail;
002
003 import java.util.HashMap;
004 import java.util.HashSet;
005 import java.util.Map;
006 import java.util.Set;
007
008 import org.codehaus.jettison.json.JSONArray;
009 import org.codehaus.jettison.json.JSONObject;
010
011 import de.deepamehta.core.JSONEnabled;
012 import de.deepamehta.core.Topic;
013 import de.deepamehta.core.util.DeepaMehtaUtils;
014
015 public class StatusReport implements JSONEnabled {
016
017 private String message;
018
019 private Topic topic;
020
021 // error code > topic id > topic specific message
022 private Map<MailError, Set<String>> errors = new HashMap<MailError, Set<String>>();
023
024 public StatusReport(Topic topic) {
025 this.topic = topic;
026 }
027
028 public void addError(MailError error, String message) {
029 Set<String> messages = errors.get(error);
030 if (messages == null) {
031 messages = new HashSet<String>();
032 errors.put(error, messages);
033 }
034 messages.add(message);
035 }
036
037 public void setMessage(String message) {
038 this.message = message;
039 }
040
041 public void setTopic(Topic topic) {
042 this.topic = topic;
043 }
044
045 public boolean hasErrors() {
046 return errors.isEmpty() ? false : true;
047 }
048
049 @Override
050 public JSONObject toJSON() {
051 try {
052 JSONObject json = new JSONObject()//
053 .put("message", message)//
054 .put("success", hasErrors() ? false : true)//
055 .put("topic_id", topic.getId());
056 if (errors.isEmpty() == false) { // map error messages
057 JSONArray jsonErrors = new JSONArray();
058 for (MailError mailError : errors.keySet()) {
059 JSONArray stringsToJson = DeepaMehtaUtils.stringsToJson(errors.get(mailError));
060 jsonErrors.put(new JSONObject()//
061 .put("message", mailError.getMessage())//
062 .put("topics", stringsToJson));
063 }
064 json.put("errors", jsonErrors);
065 }
066 return json;
067 } catch (Exception e) {
068 throw new RuntimeException("Serialization failed (" + this + ")", e);
069 }
070 }
071 }