Package cn.edu.pku.dr.requirement.elicitation.action

Source Code of cn.edu.pku.dr.requirement.elicitation.action.SysUserAction

package cn.edu.pku.dr.requirement.elicitation.action;

import java.util.ArrayList;
import java.util.HashMap;

import cn.edu.pku.dr.requirement.elicitation.system.Context;
import easyJ.common.BeanUtil;
import easyJ.common.EasyJException;
import easyJ.common.validate.GenericValidator;
import easyJ.database.dao.Page;
import easyJ.http.Globals;
import easyJ.http.servlet.SingleDataAction;
import easyJ.system.data.SysUser;

public class SysUserAction extends SingleDataAction{

    public void query() throws EasyJException {
        super.query();
        Page page = (Page)request.getAttribute(Globals.PAGE);
        ArrayList list = page.getPageData();
        int size =  list.size();
        for(int i=0; i<size; i++) {
            SysUser user = (SysUser)list.get(i);
            filterRoles(user,context, true);
        }
    }
   
    public void update() throws EasyJException {
        //首先得到数据库中用户所有的拥有的角色。
        Object o = BeanUtil.getEmptyObject(className);
        Object primaryKey = BeanUtil.getPrimaryKeyValue(object);
        String primaryKeyName = BeanUtil.getPrimaryKeyName(o.getClass());
        BeanUtil.setFieldValue(o, primaryKeyName, primaryKey);

        SysUser user = (SysUser)dp.get(o);
       
        //将此项目中的角色去掉,然后加上从客户端传来的角色。
        filterRoles(user,context, false);      
       
        String userIds = user.getRoleIds();
        String userNames = user.getRoleNames();
       
        SysUser newUser = (SysUser)BeanUtil.getObject(user, properties, errors);
       
        String newIds = newUser.getRoleIds();
        String newNames = newUser.getRoleNames();
       
        if(GenericValidator.isBlankOrNull(newIds)) {
            newUser.setRoleIds(userIds);
            newUser.setRoleNames(userNames);
        } else {
            newUser.setRoleIds(newIds.substring(0,newIds.length()-1)+userIds);
            if(GenericValidator.isBlankOrNull(userNames))
                newUser.setRoleNames(newNames);
            else
                newUser.setRoleNames(newNames + "、"+userNames);
        }
        dp.update(newUser);
        request.setAttribute(Globals.OBJECT, newUser);
        returnMessage = "保存成功<message>";
    }
   
    /**
     * 一个用户可以参与多个项目,可以拥有多个项目的角色,此方法是在一个项目中,过滤出用户属于此项目的角色。
     * @param user      需要被过滤的数据
     * @param context   用来过滤的上下文环境,其中含有此project所包含的所有的角色的编号
     * @param type      标明是需要包含,还是需要排除,true代表需要包括,false代表需要排除
     * @throws EasyJException
     */
    public static void  filterRoles(SysUser user, Context context, boolean type) throws EasyJException {
       
        if(user.getRoleIds() == null)
            return;
       
        String[] ids =  user.getRoleIds().split(",");
        String[] names = user.getRoleNames().split("、");
       
        StringBuffer idBf = new StringBuffer(",");
        StringBuffer nameBf = new StringBuffer("");
       
        if (context == null)
          return;
       
        HashMap<String,String> roleIds = context.getRoles();
       
        boolean hasRoles = false;
       
        //因为id最前面有个逗号,而names没有,所以在取的时候需要取i-1。
       
        for(int i=1; i<ids.length; i++) {
            if(type?roleIds.containsKey(ids[i]):!roleIds.containsKey(ids[i])) {
                idBf.append(ids[i]);
                idBf.append(",");
                nameBf.append(names[i-1]);
                nameBf.append("、");
                hasRoles = true;
            }
        }
        //如果拥有此project的角色,则设置,否则置空
        if (hasRoles) {
            user.setRoleIds(idBf.toString());
            user.setRoleNames(nameBf.substring(0,nameBf.length()-1));
        } else {
            user.setRoleIds("");
            user.setRoleNames("");
        }
    }
}
TOP

Related Classes of cn.edu.pku.dr.requirement.elicitation.action.SysUserAction

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.