PrpGetAttributes.java

package com.mycim.webapp.actions.attribute;

import com.fa.sesa.i18n.I18nUtils;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.security.UserGroup;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.PrpSetupAction;
import com.mycim.webapp.forms.RootForm;
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.List;
import java.util.Map;

/**
 * @author Johnson.Wang
 * @version 6.0.0
 * @date 2019/9/2
 **/
public class PrpGetAttributes extends PrpSetupAction {

    private static final boolean RELEASED = true;

    private static final String GROUP_NAMES_DELIMETER_KEY = ",";

    private static final String USER_GROUPS_KEY = "ADMINISTRATORS,SYSTEM";

    private static final String ISHASANYGROUPS = "isHasAnyGroups";

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

        String objectType = getObjectType(request);

        theform.setObjectType(objectType);

        long instanceRrn = baseService.getNamedObjectRrn(theform.getInstanceId(), getNamedSpace(getObject(request),
                                                                                                LocalContext
                                                                                                        .getFacilityRrn()),
                                                         getObject(request));

        List<Map> attributes = sysService
                .getAllAttributes(instanceRrn, getNamedSpace(getObject(request), LocalContext.getFacilityRrn()),
                                  objectType, I18nUtils.getCurrentLanguage());

        if (CollectionUtils.isEmpty(attributes)) {
            theform.setPages(0);
        }
        request.setAttribute(ISHASANYGROUPS, isHasAnyGroups());
        request.setAttribute("collection", attributes);
        theform.setTransId("modify");

        return (new ActionForward(mapping.getInput()));
    }

    public String getObject(HttpServletRequest request) {
        String object = WebUtils.getParameter("objecttype", request);
        if (object.equalsIgnoreCase("entity")) {
            object = ObjectList.EQP_KEY;
        }
        if (object.equalsIgnoreCase("item")) {
            object = ObjectList.PRODUCT_KEY;
        }
        if (object.equalsIgnoreCase("route")) {
            object = ObjectList.WFL_KEY;
        }
        if (object.equalsIgnoreCase("process")) {
            object = ObjectList.WFL_KEY;
        }
        return object;
    }

    public String getObjectType(HttpServletRequest request) {
        String object = WebUtils.getParameter("objecttype", request);
        if (object.equalsIgnoreCase("entity")) {
            object = "equipment";
        }
        if (object.equalsIgnoreCase("item")) {
            object = "product";
        }
        if (object.equalsIgnoreCase("route")) {
            object = "ROUTE";
        }
        if (object.equalsIgnoreCase("process")) {
            object = "PROCESS";
        }
        return object;
    }

    /**
     * 判断用户是否属于用户组
     */
    private boolean isHasAnyGroups() {
        boolean hasAnyGroup = false;
        String[] groups = USER_GROUPS_KEY.split(GROUP_NAMES_DELIMETER_KEY);
        for (int i = 0; i < groups.length; i++) {
            String groupId = groups[i];
            if (checkUserGroup(groupId)) {
                hasAnyGroup = true;
                break;
            }
        }
        return hasAnyGroup;
    }

    private boolean checkUserGroup(String groupId) {
        boolean existed = false;
        UserGroup userGroup = new UserGroup(groupId, baseService
                .getNamedSpace(LocalContext.getFacilityRrn(), ObjectList.USERGROUP_KEY), ObjectList.USERGROUP_KEY);
        userGroup = securityService.getUserGroup(userGroup);
        if (userGroup != null) {
            Relation relation = new Relation();
            relation.setFromRrn(LocalContext.getUserRrn());
            relation.setToRrn(userGroup.getInstanceRrn());

            if (baseService.getRelation(relation) == null) {
                existed = false;
            } else {
                existed = true;
            }
        }
        return existed;
    }

}