CimSetupAction.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;

import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.context.spring.SpringContext;
import com.mycim.framework.logging.Logger;
import com.mycim.framework.logging.LoggerFactory;
import com.mycim.framework.utils.beans.PropertyUtils;
import com.mycim.server.ems.service.EmsService;
import com.mycim.server.security.service.SecurityService;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.consts.LinkTypeList;
import com.mycim.valueobject.security.Station;
import com.mycim.valueobject.security.User;
import com.mycim.valueobject.security.UserGroup;
import com.mycim.valueobject.sys.ReferenceFile;
import com.mycim.valueobject.sys.ReferenceFileDetail;
import com.mycim.webapp.Constants;
import com.mycim.webapp.forms.RootForm;
import com.mycim.webapp.forms.security.StationInfoForm;
import com.mycim.webapp.forms.security.UserInfoForm;

import java.util.Collection;
import java.util.List;
import java.util.Map;

public class CimSetupAction extends AbstractAction {

    private static final Logger logger = LoggerFactory.getLogger(CimSetupAction.class);

    protected SecurityService securityService = SpringContext.getBean(SecurityService.class);

    protected EmsService emsService = SpringContext.getBean(EmsService.class);

    protected void process(NamedObject instance) {
        String action = instance.getTransId();

        long instanceRrn = 0;

        if (action.equals(Constants.CREATE_KEY)) {
            if (instance instanceof Station) {
                instanceRrn = securityService.insertStation((Station) instance);
            } else if (instance instanceof User) {
                instanceRrn = securityService.insertUser((User) instance);
            } else if (instance instanceof UserGroup) {
                instanceRrn = securityService.insertUserGroup((UserGroup) instance);
            } else if (instance instanceof ReferenceFile) {
                instanceRrn = sysService.insertReferenceFile((ReferenceFile) instance);
            } else if (instance instanceof ReferenceFileDetail) {
                instanceRrn = sysService.insertReferenceFileDetail((ReferenceFileDetail) instance);
            }

            instance.setInstanceRrn(instanceRrn);
        } else if (action.equals(Constants.DELETE_KEY)) {
            if (instance instanceof Station) {
                securityService.deleteStation((Station) instance);
            } else if (instance instanceof User) {
                securityService.deleteUser((User) instance);
            } else if (instance instanceof UserGroup) {
                securityService.deleteUserGroup((UserGroup) instance);
            } else if (instance instanceof ReferenceFile) {
                sysService.deleteReferenceFile((ReferenceFile) instance);
            } else if (instance instanceof ReferenceFileDetail) {
                sysService.deleteReferenceFileDetail((ReferenceFileDetail) instance);
            }
        } else if (action.equals(Constants.MODIFY_KEY)) {
            if (instance instanceof Station) {
                securityService.updateStation((Station) instance);
            } else if (instance instanceof User) {
                securityService.updateUser((User) instance);
            } else if (instance instanceof UserGroup) {
                securityService.updateUserGroup((UserGroup) instance);
            } else if (instance instanceof ReferenceFile) {
                sysService.updateReferenceFile((ReferenceFile) instance);
            } else if (instance instanceof ReferenceFileDetail) {
                sysService.updateReferenceFileDetail((ReferenceFileDetail) instance);
            }
        }
    }

    protected Collection getUserGroups(User user) {
        return securityService.getUserGroups(user);
    }

    protected List<Relation> getEquipments(Station station) {
        return securityService.getEquipmentOfStation(station.getInstanceRrn());
    }

    protected String getReferValus(String ref, String key_value, String getValue) {
        return sysService.referenceDetailExchangeNull(ref, key_value, getValue);
    }

    protected List<String> getRefFileValues(String ref, String key_value, String getValue) {
        return sysService.getRefFileValues(ref, key_value, getValue);
    }

    protected Collection getReferenceFileValues(ReferenceFile referenceFile) {
        return sysService.getReferenceFileDetails(referenceFile.getInstanceRrn());
    }

    protected List<Relation> getUsers(Station station) {
        return securityService.getUserOfStation(station.getInstanceRrn());
    }

    protected List<Relation> getOperations(Station station) {
        return securityService.getOperationOfStation(station.getInstanceRrn());
    }

    protected Collection getUsers(UserGroup userGroup) {
        return securityService.getUsers(userGroup);
    }

    protected void addUserToGroup(User user, UserGroup userGroup) {

        Relation relation = buildRelation(user, userGroup);

        if (relation != null) {
            relation.setTransId(Constants.MODIFY_KEY);
            relation.setTransPerformedby(LocalContext.getUserId());
            relation.setLinkType(LinkTypeList.USER_USERGROUP_KEY);

            // if this relation exists do nothing
            if (baseService.getRelation(relation) == null) {
                relation.setTransId(Constants.CREATE_KEY);
                securityService.addUserToUsergroup(relation);
            }
        }
    }

    protected Relation buildRelation(NamedObject fromObject, NamedObject toObject) {
        Relation relation = new Relation();

        if (fromObject.getInstanceRrn() <= 0) {
            long fromRrn = baseService.getNamedObjectRrn(fromObject);

            if (fromRrn > 0) {
                relation.setFromRrn(fromRrn);
            } else {
                return null;
            }
        } else {
            relation.setFromRrn(fromObject.getInstanceRrn());
        }

        if (toObject.getInstanceRrn() <= 0) {
            long toRrn = baseService.getNamedObjectRrn(toObject);

            if (toRrn > 0) {
                relation.setToRrn(toRrn);
            } else {
                return null;
            }
        } else {
            relation.setToRrn(toObject.getInstanceRrn());
        }

        return relation;
    }

    protected void addUserToGroup(Long userRrn, Long groupRrn) {
        Relation relation = new Relation(userRrn, groupRrn, LinkTypeList.USER_USERGROUP_KEY);

        // if this relation exists do nothing
        if (baseService.getRelation(relation) == null) {
            securityService.addUserToUsergroup(relation);
        }
    }

    protected void removeUserFromGroup(User user, UserGroup userGroup) {
        Relation relation = buildRelation(user, userGroup);

        if (relation == null) {
            logger.debug("!----error in the remove user form userGroup!---!");
        } else {
            relation.setLinkType(LinkTypeList.USER_USERGROUP_KEY);

            // if this relation is not existed do nothing
            if (baseService.getRelation(relation) != null) {
                logger.info("relation " + relation.getFromRrn() + "   " + relation.getToRrn());
                securityService.removeUserFromGroup(relation);
            }
        }
    }

    @Override
    protected void doCopy(RootForm theform, NamedObject instance) throws Exception {
        String origId = theform.getInstanceId();

        if (instance instanceof User) {
            instance = getInstance(instance);
        } else if (instance instanceof UserGroup) {
            instance = getInstance(instance);
        } else if (instance instanceof ReferenceFile) {
            instance = getInstance(instance);
        } else if (instance instanceof Station) {
            instance = getInstance(instance);
        }

        // populate the new information thru the new instance id
        PropertyUtils.copyProperties(theform, instance);

        // avoid to copy password bugs
        if (instance instanceof User) {
            ((UserInfoForm) theform).setPassword("");
            ((UserInfoForm) theform).setPasswordConfirm("");
        } else if (instance instanceof Station) {
            ((StationInfoForm) theform).setPassword("");
            ((StationInfoForm) theform).setPasswordConfirm("");
            ((StationInfoForm) theform).setPasswordExpiredPeriod(null);
        }

        // and restore the original Id
        theform.setInstanceId(origId);
    }

    @Override
    protected NamedObject getInstance(NamedObject instance) {

        // temp object to store the value object retrived from database
        NamedObject _instance = null;

        if (instance instanceof Station) {
            _instance = securityService.getStation((Station) instance);
        } else if (instance instanceof User) {
            _instance = securityService.getUser((User) instance);
        } else if (instance instanceof UserGroup) {
            _instance = securityService.getUserGroup((UserGroup) instance);
        } else if (instance instanceof ReferenceFile) {
            _instance = sysService.getReferenceFile((ReferenceFile) instance);
        } else if (instance instanceof ReferenceFileDetail) {
            _instance = sysService.getReferenceFileDetail((ReferenceFileDetail) instance);
        }
        if (_instance != null) {
            instance = _instance;
        }

        return instance;
    }

    protected void changeUserPassword(User user) {
        securityService.changeUserPassword(user);
    }

    protected String connectMesSystem(Map objectInfo, long facilityRrn, String user) {
        // todo 接口相关的待完成
        return null;
    }

}