Package cn.edu.zju.acm.onlinejudge.action

Source Code of cn.edu.zju.acm.onlinejudge.action.UserSearchAction

/*
* Copyright 2007 Zhang, Zheng <oldbig@gmail.com>
*
* This file is part of ZOJ.
*
* ZOJ 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 revision 3 of the License, or (at your option) any later revision.
*
* ZOJ 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 ZOJ. if not, see
* <http://www.gnu.org/licenses/>.
*/

package cn.edu.zju.acm.onlinejudge.action;

import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import cn.edu.zju.acm.onlinejudge.bean.UserProfile;
import cn.edu.zju.acm.onlinejudge.bean.request.UserCriteria;
import cn.edu.zju.acm.onlinejudge.form.UserSearchForm;
import cn.edu.zju.acm.onlinejudge.util.PersistenceManager;
import cn.edu.zju.acm.onlinejudge.util.Utility;

/**
* <p>
* UserSearchAction
* </p>
*
*
* @author Zhang, Zheng
* @version 2.0
*/
public class UserSearchAction extends BaseAction {

    /**
     * <p>
     * Default constructor.
     * </p>
     */
    public UserSearchAction() {

    }

    /**
     * ShowRunsAction.
     *
     * @param mapping
     *            action mapping
     * @param form
     *            action form
     * @param request
     *            http servlet request
     * @param response
     *            http servlet response
     *
     * @return action forward instance
     *
     * @throws Exception
     *             any errors happened
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, ContextAdapter context) throws Exception {

        ActionForward forward = this.checkAdmin(mapping, context);
        if (forward != null) {
            return forward;
        }

        context.setAttribute("UserSearchForm", form);

        context.getRequest().setAttribute("Countries",
                                          PersistenceManager.getInstance().getUserPersistence().getAllCountries());
        context.getRequest().setAttribute("Roles",
                                          PersistenceManager.getInstance().getAuthorizationPersistence().getAllRoles());

        UserSearchForm userForm = (UserSearchForm) form;

        if (this.empty(userForm.getCountryId()) && this.empty(userForm.getEmail()) &&
            this.empty(userForm.getFirstName()) && this.empty(userForm.getHandle()) &&
            this.empty(userForm.getLastName()) && this.empty(userForm.getRoleId()) && this.empty(userForm.getSchool())) {

            return this.handleSuccess(mapping, context, "success");

        }

        UserCriteria criteria = userForm.toUserCriteria();
        String export = context.getRequest().getParameter("exportFormat");

        if ("txt".equalsIgnoreCase(export)) {
            List<UserProfile> users =
                    PersistenceManager.getInstance().getUserPersistence().searchUserProfiles(criteria, 0,
                                                                                             Integer.MAX_VALUE);
            return this.export(context, criteria, users, export);
        } else if ("xls".equalsIgnoreCase(export)) {
            List<UserProfile> users =
                    PersistenceManager.getInstance().getUserPersistence().searchUserProfiles(criteria, 0,
                                                                                             Integer.MAX_VALUE);
            return this.export(context, criteria, users, export);
        }
        long paging = Utility.parseLong(userForm.getPaging(), 10, 50);;

        long usersNumber = PersistenceManager.getInstance().getUserPersistence().searchUserProfilesCount(criteria);
        if (usersNumber == 0) {
            context.setAttribute("users", new ArrayList<UserProfile>());
            context.setAttribute("pageNumber", new Long(0));
            context.setAttribute("totalPages", new Long(0));
            context.setAttribute("paging", new Long(paging));
            context.setAttribute("total", new Long(0));
            return this.handleSuccess(mapping, context, "success");
        }

        long totalPages = (usersNumber - 1) / paging + 1;
        long pageNumber = Utility.parseLong(userForm.getPageNumber(), 1, totalPages);
        long startIndex = paging * (pageNumber - 1);

        List<UserProfile> users =
                PersistenceManager.getInstance().getUserPersistence().searchUserProfiles(criteria, (int) startIndex,
                                                                                         (int) paging);

        context.setAttribute("users", users);
        context.setAttribute("pageNumber", new Long(pageNumber));
        context.setAttribute("totalPages", new Long(totalPages));
        context.setAttribute("paging", new Long(paging));
        context.setAttribute("total", new Long(usersNumber));

        return this.handleSuccess(mapping, context, "success");

    }

    private boolean empty(String value) {
        return value == null || value.trim().length() == 0;
    }

    private ActionForward export(ContextAdapter context, UserCriteria criteria, List<UserProfile> users, String export) throws Exception {

        byte[] out;
        String fileName = "userlist";
        HttpServletResponse response = context.getResponse();
        if ("xls".equalsIgnoreCase(export)) {
            out = this.exportToExcel(criteria, users);
            response.setContentType("application/doc");
            response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls");
        } else {
            boolean windows = true;
            String userAgentHeader = context.getRequest().getHeader("user-agent");
            if (userAgentHeader != null && userAgentHeader.length() > 0) {
                windows = userAgentHeader.indexOf("Windows") != -1;
            }
            out = this.exportToText(criteria, users, windows);
            response.setContentType("text/plain");
            response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".txt");
        }
        response.getOutputStream().write(out);
        response.getOutputStream().close();
        return null;
    }

    private byte[] exportToText(UserCriteria criteria, List<UserProfile> users, boolean windows) throws Exception {
        String lineHolder = windows ? "\r\n" : "\n";

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
        for (Object user : users) {
            writer.write(((UserProfile) user).getHandle());
            writer.write(lineHolder);
        }
        writer.close();

        return out.toByteArray();
    }

    private byte[] exportToExcel(UserCriteria criteria, List<UserProfile> users) throws Exception {

        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet();
        short rowId = 0;
        for (Object user : users) {
            HSSFRow row = sheet.createRow(rowId);
            rowId++;
            HSSFCell cell = row.createCell((short) 0);
            cell.setCellValue(((UserProfile) user).getHandle());
        }

        // output to stream
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            wb.write(out);
            return out.toByteArray();
        } finally {
            out.close();
        }
    }
}
TOP

Related Classes of cn.edu.zju.acm.onlinejudge.action.UserSearchAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.