Subversion Repositories SmartDukaan

Rev

Rev 4817 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.support.controllers;

import in.shop2020.support.services.RegisteredUsersGenerator;
import in.shop2020.support.utils.ReportsUtils;
import in.shop2020.thrift.clients.UserClient;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@InterceptorRefs({
    @InterceptorRef("defaultStack"),
    @InterceptorRef("login")
})
@Results({
    @Result(name="authfail", type="redirectAction", params = {"actionName" , "reports"})
})
public class RegisteredUsersController implements ServletRequestAware, ServletResponseAware, ServletContextAware {
    
    private static Logger logger = LoggerFactory.getLogger(RegisteredUsersController.class);

    private HttpServletRequest request;
    private HttpSession session;
    private HttpServletResponse response;
    private ServletContext context;

    private final String authsuccess = "authsuccess";
    private String message = "";

    private Date endDate;
    private Date startDate;

    private String errorMsg;
    
    public RegisteredUsersController() {

    }

    public String index() {
        if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {
            return "authfail";
        }
        return authsuccess;
    }

    // Handles the POST request (Form Submission)
    public String create() {
        String startDateStr = request.getParameter("startDate");
        String endDateStr = request.getParameter("endDate");

        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
        df.setTimeZone(TimeZone.getTimeZone("IST"));
        try {
            startDate = df.parse(startDateStr);
            endDate = df.parse(endDateStr);
        } catch (ParseException pe) {
            errorMsg = "Please enter start and end dates in format MM/dd/yyyy";
            return authsuccess;
        }

        UserClient usc;
        in.shop2020.model.v1.user.UserContextService.Client uClient;
        
        List<String> emails = new ArrayList<String>();
        
        try {
            usc = new UserClient();
            uClient = usc.getClient();
            
            emails = uClient.getUserEmails(startDate.getTime(), endDate.getTime());
        } catch (Exception e) {
            logger.error("Error initializing connection to user or order service", e);
        }
        
        // Preparing XLS file for output
                response.setContentType("application/vnd.ms-excel");
                response.setHeader("Content-disposition", "attachment; filename=email-addresses.xls");
                
        ServletOutputStream sos;
        try {
                StringBuilder builder = new StringBuilder();
                
                for (String email: emails)      {
                        builder.append(email);
                        builder.append("\n");
                }
                
                        sos = response.getOutputStream();
                        sos.write(builder.toString().getBytes());
                        sos.flush();
                        sos.close();
        } catch (IOException e) {
            logger.error("Error streaming registered users report");
        }
        return authsuccess;
    }

    public String getMessage() {
        return message;
    }

    @Override
    public void setServletRequest(HttpServletRequest req) {
        this.request = req;
        this.session = req.getSession();        
    }

    @Override
    public void setServletResponse(HttpServletResponse res) {
        this.response = res;
    }
    
    @Override
    public void setServletContext(ServletContext context) {
        this.context = context;
    }

    public String getServletContextPath() {
        return context.getContextPath();
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }
}