org.openmrs.module.sync.web.controller.EmailConfigController.java Source code

Java tutorial

Introduction

Here is the source code for org.openmrs.module.sync.web.controller.EmailConfigController.java

Source

/**
 * The contents of this file are subject to the OpenMRS Public License
 * Version 1.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://license.openmrs.org
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations
 * under the License.
 *
 * Copyright (C) OpenMRS, LLC.  All Rights Reserved.
 */
package org.openmrs.module.sync.web.controller;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.jackson.map.ObjectMapper;
import org.openmrs.GlobalProperty;
import org.openmrs.api.APIException;
import org.openmrs.api.AdministrationService;
import org.openmrs.api.context.Context;
import org.openmrs.messagesource.MessageSourceService;
import org.openmrs.module.sync.SyncMailUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

/**
 * Controller for viewing, configuring, and testing server email settings
 */
@Controller
public class EmailConfigController {

    protected final Log log = LogFactory.getLog(getClass());

    @Autowired
    @Qualifier(value = "adminService")
    AdministrationService administrationService;

    @RequestMapping("/module/sync/emailConfig")
    public void view(ModelMap model) {
        if (Context.isAuthenticated()) {
            Map<String, String> settings = SyncMailUtil.getCurrentlyConfiguredSettings();
            model.addAttribute("settings", settings);
        }
    }

    @RequestMapping("/module/sync/saveEmailConfiguration")
    public String saveSettings(HttpServletRequest request) {
        if (Context.isAuthenticated()) {
            for (String s : SyncMailUtil.getMailGlobalProperties()) {
                GlobalProperty p = administrationService.getGlobalPropertyObject(s);
                String propertyValue = ServletRequestUtils.getStringParameter(request, s, "");
                p.setPropertyValue(propertyValue);
                administrationService.saveGlobalProperty(p);
            }
        }
        return "redirect:/module/sync/emailConfig.form";
    }

    @RequestMapping("/module/sync/validateEmailSettings")
    public void validateSettings(ModelMap model, HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        Map<String, String> settings = new HashMap<String, String>();
        for (String s : SyncMailUtil.getMailGlobalProperties()) {
            String propertyValue = ServletRequestUtils.getStringParameter(request, s, "");
            settings.put(s, propertyValue);
        }
        String validationMessage = SyncMailUtil.validateSettings(settings);
        response.setContentType("text/json");
        response.getWriter().write(toJson(validationMessage));
    }

    @RequestMapping("/module/sync/sendTestEmail")
    public void sendTestEmail(@RequestParam("recipients") String recipients,
            @RequestParam("subject") String subject, @RequestParam("emailBody") String emailBody,
            HttpServletRequest request, HttpServletResponse response) throws Exception {

        MessageSourceService mss = Context.getMessageSourceService();
        String results = mss.getMessage("sync.emailConfig.messageSendSuccessful");
        try {
            String serverName = request.getServerName();
            SyncMailUtil.sendMessage(recipients, serverName + ": " + subject, emailBody);
        } catch (Exception e) {
            results = mss.getMessage("sync.emailConfig.messageSendFailed") + ": " + e.getMessage();
        }
        response.setContentType("text/json");
        response.getWriter().write(toJson(results));
    }

    /**
     * Utility method to return the json representation of an object
     */
    private static String toJson(Object obj) {
        ObjectMapper mapper = new ObjectMapper();
        StringWriter sw = new StringWriter();
        try {
            mapper.writeValue(sw, obj);
        } catch (Exception e) {
            throw new APIException("Error converting to JSON", e);
        }
        return sw.toString();
    }
}