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

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

/*
* 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.BufferedReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import cn.edu.zju.acm.onlinejudge.persistence.AuthorizationPersistence;
import cn.edu.zju.acm.onlinejudge.security.RoleSecurity;
import cn.edu.zju.acm.onlinejudge.util.PersistenceManager;
import cn.edu.zju.acm.onlinejudge.util.Utility;

/**
* <p>
* Edit Role Action.
* </p>
*
*
* @author Zhang, Zheng
* @version 2.0
*/
public class ManageRoleUsersAction extends BaseAction {

    /**
     * <p>
     * Default constructor.
     * </p>
     */
    public ManageRoleUsersAction() {
    // empty
    }

    /**
     * Edit Role.
     *
     * <pre>
     * </pre>
     *
     * @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 {

        // check admin
        ActionForward forward = this.checkAdmin(mapping, context);
        if (forward != null) {
            return forward;
        }
        long roleId = Utility.parseLong(context.getRequest().getParameter("roleId"));
        RoleSecurity role = null;
        AuthorizationPersistence authorizationPersistence =
                PersistenceManager.getInstance().getAuthorizationPersistence();
        if (roleId >= 0) {
            role = authorizationPersistence.getRole(roleId);
        }
        if (role == null) {
            return this.handleSuccess(mapping, context, "failure");
        }
        context.setAttribute("importMessage", "");
        context.setAttribute("role", role);
        String users = context.getRequest().getParameter("users");
        if (users == null || users.trim().length() == 0) {
            return this.handleSuccess(mapping, context, "success");
        }
        List<String> userList = new ArrayList<String>();
        BufferedReader reader = new BufferedReader(new StringReader(users));
        for (;;) {
            String line = reader.readLine();
            if (line == null) {
                break;
            }
            if (line.trim().length() > 0) {
                userList.add(line.trim());
            }
        }

        String operation = context.getRequest().getParameter("operation");
        if ("remove".equalsIgnoreCase(operation)) {
            // TODO NOT SAFE HERE, Sql injection is possible.
            Map<String, Boolean> result = authorizationPersistence.removeRoleUsers(userList, roleId);
            String message = this.generateResult(userList, result, true);
            context.setAttribute("importMessage", message);
        } else if ("add".equalsIgnoreCase(operation)) {
            // TODO NOT SAFE HERE, Sql injection is possible.
            Map<String, Boolean> result = authorizationPersistence.addRoleUsers(userList, roleId);
            String message = this.generateResult(userList, result, false);
            context.setAttribute("importMessage", message);
        }

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

    }

    private String generateResult(List<String> userList, Map<String, Boolean> results, boolean remove) {
        List<String> nonexistingUsers = new ArrayList<String>();
        List<String> notUpdatedUsers = new ArrayList<String>();
        for (String user : userList) {
            Boolean result = results.get(user);
            if (result == null) {
                nonexistingUsers.add(user);
            } else if (!result) {
                notUpdatedUsers.add(user);
            }

        }
        StringBuilder sb = new StringBuilder();
        if (nonexistingUsers.size() != 0) {
            sb.append("<font color='red'>Invalid Users: " + nonexistingUsers.size() + "</font><br>\n");
        }
        if (notUpdatedUsers.size() != 0) {
            sb.append("<font color='green'>Not Updated Users: " + notUpdatedUsers.size() + "</font><br>\n");
        }
        sb.append("<font color='green'>Updated Users: " +
            (userList.size() - notUpdatedUsers.size() - nonexistingUsers.size()) + "</font><br>\n");

        if (nonexistingUsers.size() != 0) {
            sb.append("<br>\n");
            sb.append("<font color='red'><b>Following handles are invalid:</b></font><br>\n");
            for (String user : nonexistingUsers) {
                sb.append(user + "<br>\n");
            }

        }

        if (notUpdatedUsers.size() != 0) {
            sb.append("<br>\n");
            if (remove) {
                sb.append("<font color='green'><b>Following users don't belong to this role:</b></font><br>\n");
            } else {
                sb.append("<font color='green'><b>Following users already belong to this role:</b></font><br>\n");
            }
            for (String user : notUpdatedUsers) {
                sb.append(user + "<br>\n");
            }
        }

        return sb.toString();
    }
}
TOP

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

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.