UserDetailSaveAction.java

/*
 *        @ Copyright 2001 FA Software;
 *        All right reserved. No part of this program may be reproduced or
 *        transmitted in any form or by any means, electronic or
 *        mechanical, including photocopying, recording, or by any
 *        information storage or retrieval system without written
 *        permission from FA Software, except for inclusion of brief
 *        quotations in a review.
 */
package com.mycim.webapp.actions.setting.security.user;

import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.beans.PropertyUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.consts.SessionNames;
import com.mycim.valueobject.security.User;
import com.mycim.valueobject.security.UserGroup;
import com.mycim.webapp.Constants;
import com.mycim.webapp.actions.CimSetupAction;
import com.mycim.webapp.forms.RootForm;
import com.mycim.webapp.forms.security.UserInfoForm;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collection;

/**
 * @author Johnson Wang
 **/
public class UserDetailSaveAction extends CimSetupAction {

    @Override
    public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                              HttpServletResponse response) throws Exception {

        UserInfoForm theform = (UserInfoForm) form;
        User user = new User(theform.getInstanceId(), theform.getNamedSpace(), ObjectList.USER_KEY);
        user = (User) getInstance(user);
        user.setTransPerformedby(LocalContext.getUserId());
        Collection userGroups = null;
        userGroups = getUserGroups(user);
        user.setUserGroups(userGroups);
        theform.setTransId(Constants.MODIFY_KEY);
        theform.setPages(new Integer(1));
        request.setAttribute(SessionNames.USERPROFILE_KEY, user);
        return mapping.findForward("modify");
    }

    @Override
    public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                                HttpServletResponse response) throws Exception {
        UserInfoForm theform = (UserInfoForm) form;
        User user = new User(theform.getInstanceId(), theform.getNamedSpace(), ObjectList.USER_KEY);
        user = (User) getInstance(user);

        // Do something according to different action
        user.setTransPerformedby(LocalContext.getUserId());
        UserGroup userGroup = null;
        String userGroupId = theform.getUserGroupId();
        if ((theform.getUserGroupId() != null) && !"".equals(theform.getUserGroupId().trim())) {
            userGroupId = theform.getUserGroupId().trim().toUpperCase();

            long userGroupRrn = 0;

            // translate usergroup id to rrn
            userGroupRrn = getInstanceRrn(userGroupId,
                                          getNamedSpace(ObjectList.USERGROUP_KEY, LocalContext.getFacilityRrn()),
                                          ObjectList.USERGROUP_KEY);

            Assert.isFalse(userGroupRrn <= 0,
                           Errors.create().key(MessageIdList.SYSTEM_INSTANCE_NOT_FOUND).content("{} 没有找到对象!")
                                 .args("user group").build());
            userGroup = new UserGroup(userGroupId,
                                      getNamedSpace(ObjectList.USERGROUP_KEY, LocalContext.getFacilityRrn()),
                                      ObjectList.USERGROUP_KEY);
        }
        PropertyUtils.copyProperties(theform, user);
        theform.setPasswordConfirm(user.getPassword());

        theform.setTransId(Constants.MODIFY_KEY);

        request.setAttribute(SessionNames.USERPROFILE_KEY, user);
        request.setAttribute("oldPassword", theform.getPassword());
        theform.setPasswordConfirm(user.getPassword());
        return (new ActionForward(mapping.getInput()));
    }

    public ActionForward create(ActionMapping mapping, RootForm form, HttpServletRequest request,
                                HttpServletResponse response) {
        UserInfoForm theform = (UserInfoForm) form;
        User user = new User(theform.getInstanceId(), theform.getNamedSpace(), ObjectList.USER_KEY);
        user = (User) getInstance(user);

        // Do something according to different action
        user.setTransPerformedby(LocalContext.getUserId());
        UserGroup userGroup = null;
        String userGroupId = theform.getUserGroupId();
        if ((theform.getUserGroupId() != null) && !"".equals(theform.getUserGroupId().trim())) {
            userGroupId = theform.getUserGroupId().trim().toUpperCase();

            long userGroupRrn = 0;

            // translate usergroup id to rrn
            userGroupRrn = getInstanceRrn(userGroupId,
                                          getNamedSpace(ObjectList.USERGROUP_KEY, LocalContext.getFacilityRrn()),
                                          ObjectList.USERGROUP_KEY);

            Assert.isFalse(userGroupRrn <= 0,
                           Errors.create().key(MessageIdList.SYSTEM_INSTANCE_NOT_FOUND).content("{} 没有找到对象!")
                                 .args("user group").build());
            userGroup = new UserGroup(userGroupId,
                                      getNamedSpace(ObjectList.USERGROUP_KEY, LocalContext.getFacilityRrn()),
                                      ObjectList.USERGROUP_KEY);
        }
        if (userGroup != null) {
            addUserToGroup(user, userGroup);
            user.setUserGroups(this.getUserGroups(user));
        }

        theform.setUserGroupId("");
        theform.setTransId("modify");

        request.setAttribute(SessionNames.USERPROFILE_KEY, user);
        return mapping.findForward("modify");
    }

    public ActionForward delete(ActionMapping mapping, RootForm form, HttpServletRequest request,
                                HttpServletResponse response) {
        UserInfoForm theform = (UserInfoForm) form;
        User user = new User(theform.getInstanceId(), theform.getNamedSpace(), ObjectList.USER_KEY);
        user = (User) getInstance(user);

        // Do something according to different action
        user.setTransPerformedby(LocalContext.getUserId());
        UserGroup userGroup = null;
        String userGroupId = theform.getUserGroupId();
        if ((theform.getUserGroupId() != null) && !"".equals(theform.getUserGroupId().trim())) {
            userGroupId = theform.getUserGroupId().trim().toUpperCase();

            long userGroupRrn = 0;

            // translate usergroup id to rrn
            userGroupRrn = getInstanceRrn(userGroupId,
                                          getNamedSpace(ObjectList.USERGROUP_KEY, LocalContext.getFacilityRrn()),
                                          ObjectList.USERGROUP_KEY);

            Assert.isFalse(userGroupRrn <= 0,
                           Errors.create().key(MessageIdList.SYSTEM_INSTANCE_NOT_FOUND).content("{} 没有找到对象!")
                                 .args("user group").build());
            userGroup = new UserGroup(userGroupId,
                                      getNamedSpace(ObjectList.USERGROUP_KEY, LocalContext.getFacilityRrn()),
                                      ObjectList.USERGROUP_KEY);
        }
        if (userGroup == null) {
            userGroup = new UserGroup();
        }

        userGroup.setInstanceRrn(new Long(request.getParameter(Constants.ITEM_KEY)).longValue());

        this.removeUserFromGroup(user, userGroup);
        user.setUserGroups(this.getUserGroups(user));
        theform.setTransId("modify");

        request.setAttribute(SessionNames.USERPROFILE_KEY, user);
        return mapping.findForward("modify");
    }

}