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    }