FieldDetailSaveAction.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.system.field;

import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.consts.LinkTypeList;
import com.mycim.valueobject.consts.SessionNames;
import com.mycim.valueobject.sys.Field;
import com.mycim.webapp.Constants;
import com.mycim.webapp.actions.SystemSetupAction;
import com.mycim.webapp.forms.system.FieldInfoForm;
import org.apache.commons.beanutils.PropertyUtils;
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 weike li
 * @version 0.0.1
 * @since 2019/8/19 9:30
 **/
public class FieldDetailSaveAction extends SystemSetupAction {

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

        FieldInfoForm theform = (FieldInfoForm) form;
        Field field = new Field(theform.getInstanceId(),
                                getNamedSpace(ObjectList.FIELD_KEY, LocalContext.getFacilityRrn()),
                                ObjectList.FIELD_KEY);
        field = (Field) getInstance(field);

        field.setTransPerformedby(LocalContext.getUserId());

        request.setAttribute(SessionNames.FIELD_KEY, field);
        theform.setTransId(Constants.MODIFY_KEY);
        return mapping.findForward(Constants.MEMBERS_KEY);
    }

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

        Field field = new Field(theform.getInstanceId(),
                                getNamedSpace(ObjectList.FIELD_KEY, LocalContext.getFacilityRrn()),
                                ObjectList.FIELD_KEY);
        field = (Field) getInstance(field);

        PropertyUtils.copyProperties(theform, field);
        theform.setTransId(Constants.MODIFY_KEY);

        field.setCheckRules(getCheckRules(field));
        request.setAttribute(SessionNames.FIELD_KEY, field);
        return new ActionForward(mapping.getInput());
    }

    public ActionForward delete(ActionMapping mapping, FieldInfoForm form,
                                HttpServletRequest request) throws Exception {

        Field field = new Field(form.getInstanceId(),
                                getNamedSpace(ObjectList.FIELD_KEY, LocalContext.getFacilityRrn()),
                                ObjectList.FIELD_KEY);
        field = (Field) getInstance(field);

        Relation relation = new Relation();
        relation.setFromRrn(new Long(field.getInstanceRrn()));
        relation.setToRrn(form.getRuleNum());
        relation.setAttributedata1(form.getParameter1());
        relation.setAttributedata2(form.getParameter2());
        relation.setAttributedata3(form.getGroupNum());
        relation.setLinkType(LinkTypeList.FIELD_RULE_KEY);
        relation.setTransId(Constants.DELETE_KEY);

        processDetails(relation);

        processScreens(field.getInstanceRrn(), getCheckRules(field));

        field.setCheckRules(getCheckRules(field));

        PropertyUtils.copyProperties(form, field);

        form.setTransId(Constants.MODIFY_KEY);

        request.setAttribute(SessionNames.FIELD_KEY, field);
        return new ActionForward(mapping.getInput());
    }

    private void processDetails(Relation relation) {
        String action = relation.getTransId();

        if (action.equals(Constants.CREATE_KEY)) {
            if (baseService.getRelation(relation) == null) {
                baseService.insertRelation(relation);
            }
        } else if (action.equals(Constants.DELETE_KEY)) {
            baseService.deleteRelation(relation);
        } else if (action.equals(Constants.MODIFY_KEY)) {
            baseService.updateRelationForAttribute(relation);
        }
    }

    private void processScreens(long fieldRrn, Collection validators) {
        sysService.batchUpdateScreensForField(fieldRrn, validators);
    }

    public ActionForward create(ActionMapping mapping, FieldInfoForm form,
                                HttpServletRequest request) throws Exception {

        Field field = new Field(form.getInstanceId(),
                                getNamedSpace(ObjectList.FIELD_KEY, LocalContext.getFacilityRrn()),
                                ObjectList.FIELD_KEY);
        field = (Field) getInstance(field);

        Relation relation = new Relation();
        relation.setFromRrn(new Long(field.getInstanceRrn()));
        relation.setToRrn(form.getRuleNum());
        relation.setAttributedata1(form.getParameter1());
        relation.setAttributedata2(form.getParameter2());
        relation.setAttributedata3(form.getGroupNum());
        relation.setLinkType(LinkTypeList.FIELD_RULE_KEY);
        relation.setTransId(Constants.CREATE_KEY);

        processDetails(relation);

        processScreens(field.getInstanceRrn(), getCheckRules(field));

        field.setCheckRules(getCheckRules(field));

        PropertyUtils.copyProperties(form, field);

        form.setTransId(Constants.MODIFY_KEY);

        request.setAttribute(SessionNames.FIELD_KEY, field);
        return new ActionForward(mapping.getInput());
    }

    public ActionForward modify(ActionMapping mapping, FieldInfoForm form,
                                HttpServletRequest request) throws Exception {

        Field field = new Field(form.getInstanceId(),
                                getNamedSpace(ObjectList.FIELD_KEY, LocalContext.getFacilityRrn()),
                                ObjectList.FIELD_KEY);
        field = (Field) getInstance(field);

        Relation relation = new Relation();
        relation.setFromRrn(new Long(field.getInstanceRrn()));
        relation.setToRrn(form.getRuleNum());
        relation.setAttributedata1(form.getParameter1());
        relation.setAttributedata2(form.getParameter2());
        relation.setAttributedata3(form.getGroupNum());
        relation.setLinkType(LinkTypeList.FIELD_RULE_KEY);
        relation.setTransId(Constants.MODIFY_KEY);

        processDetails(relation);

        processScreens(field.getInstanceRrn(), getCheckRules(field));

        field.setCheckRules(getCheckRules(field));

        PropertyUtils.copyProperties(form, field);

        form.setTransId(Constants.MODIFY_KEY);

        request.setAttribute(SessionNames.FIELD_KEY, field);
        return new ActionForward(mapping.getInput());
    }

}