org.activityinfo.server.schedule.ReportMailerServlet.java Source code

Java tutorial

Introduction

Here is the source code for org.activityinfo.server.schedule.ReportMailerServlet.java

Source

package org.activityinfo.server.schedule;

/*
 * #%L
 * ActivityInfo Server
 * %%
 * Copyright (C) 2009 - 2013 UNICEF
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public 
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/gpl-3.0.html>.
 * #L%
 */

import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.base.Strings;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import org.activityinfo.server.database.hibernate.entity.ReportSubscription;

import javax.annotation.Nullable;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Calendar;
import java.util.Date;

@Singleton
public class ReportMailerServlet extends HttpServlet {

    private Provider<ReportMailer> mailerJob;

    @Inject
    public ReportMailerServlet(Provider<ReportMailer> mailerJob) {
        super();
        this.mailerJob = mailerJob;
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {

        Date today = parseDate(request);
        Predicate<ReportSubscription> filter = parseFilter(request);

        mailerJob.get().execute(today, filter);
    }

    private Predicate<ReportSubscription> parseFilter(HttpServletRequest req) {
        // for testing purposes, check for an id parameter that will only
        // dispatch
        // a single report
        if (Strings.isNullOrEmpty(req.getParameter("userId"))) {
            return Predicates.alwaysTrue();
        }

        final int userId = Integer.parseInt(req.getParameter("userId"));

        return new Predicate<ReportSubscription>() {

            @Override
            public boolean apply(@Nullable ReportSubscription input) {
                return input != null && input.getId().getUserId() == userId;
            }
        };
    }

    private Date parseDate(HttpServletRequest req) {
        try {
            if (Strings.isNullOrEmpty(req.getParameter("year"))) {
                return new Date();
            }
            int year = Integer.parseInt(req.getParameter("year"));
            int month = Integer.parseInt(req.getParameter("month"));
            int day = Integer.parseInt(req.getParameter("day"));

            Calendar date = Calendar.getInstance();
            date.set(Calendar.YEAR, year);
            date.set(Calendar.MONTH, month - 1);
            date.set(Calendar.DATE, day);
            return date.getTime();

        } catch (NumberFormatException e) {
            return new Date();
        }
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        doGet(request, response);
    }
}