ProductVersionAction.java

package com.mycim.webapp.actions.product;

import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.prp.ProductVersion;
import com.mycim.webapp.Constants;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.PrpSetupAction;
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.ArrayList;
import java.util.List;
import java.util.Map;


public class ProductVersionAction extends PrpSetupAction {

    @Override
    public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                              HttpServletResponse response) throws Exception {
        return mapping.findForward(Constants.INIT_KEY);
    }

    public ActionForward productVersion(ActionMapping mapping, HttpServletRequest request) {
        Long facilityRrn = LocalContext.getFacilityRrn();
        String productId = WebUtils.getParameterUpperCase("productId", request);
        productId = StringUtils.isBlank(productId) ? WebUtils.getParameterUpperCase("instanceId", request) : productId;
        long productRrn = baseService
                .getNamedObjectRrn(productId, baseService.getNamedSpace(facilityRrn, ObjectList.PRODUCT_KEY),
                                   ObjectList.PRODUCT_KEY);
        Assert.isTrue(productRrn > 0, Errors.create().key(MessageIdList.PRODUCT_VALID_ID).content("未找到该产品").build());
        List<ProductVersion> versions = productService.getProductVersions(productRrn);
        if (CollectionUtils.isNotEmpty(versions)) {
            ProductVersion prodVerion = versions.iterator().next();
            NamedObject object = baseService.getNamedObject(productRrn);
            request.setAttribute("product", object);
            request.setAttribute("productId", productId);
            request.setAttribute("versionId", prodVerion.getVersionId());
            request.setAttribute("versionStatus", prodVerion.getVersionStatus());
            request.setAttribute("currentVersion", prodVerion.getInstanceVersion());
            request.setAttribute("initaction", "/productsave.do");
            return mapping.findForward("versionInfo");
        } else {
            request.setAttribute("productVersions", new ArrayList<ProductVersion>());
            request.setAttribute("productId", productId);
            request.setAttribute("currentVersion", 0);
            request.setAttribute("versionStatus", StringUtils.EMPTY);
            request.setAttribute("initaction", "/productsave.do");
            return mapping.findForward("allVersion");
        }
    }

    public ActionForward allProdVersion(ActionMapping mapping, HttpServletRequest request) {
        Long facilityRrn = LocalContext.getFacilityRrn();
        String productId = WebUtils.getParameterUpperCase("productId", request);
        Integer currentVersion = WebUtils.getParameterInt("currentVersion", request);

        ProductVersion prodVersion = productService.getProductVersion(productId, currentVersion);
        List<ProductVersion> versions = productService.getProductVersions(productId);

        request.setAttribute("productId", productId);
        request.setAttribute("versionId", prodVersion.getVersionId());
        request.setAttribute("versionStatus", prodVersion.getVersionStatus());
        request.setAttribute("currentVersion", prodVersion.getInstanceVersion());
        request.setAttribute("productVersions", versions);
        request.setAttribute("initaction", "/productVersion.do");

        return mapping.findForward("allVersion");

    }

    public ActionForward prodVersionInfo(ActionMapping mapping, HttpServletRequest request) {
        Long facilityRrn = LocalContext.getFacilityRrn();
        String productId = WebUtils.getParameterUpperCase("productId", request);
        Integer currentVersion = WebUtils.getParameterInt("currentVersion", request);
        ProductVersion prodVerion;
        if (currentVersion != null && currentVersion > 0) {
            prodVerion = productService.getProductVersion(productId, currentVersion);
        } else {
            List<ProductVersion> versions = productService.getProductVersions(productId);
            prodVerion = versions.iterator().next();
        }
        NamedObject object = baseService.getNamedObject(baseService.getNamedObjectRrn(productId, baseService
                .getNamedSpace(facilityRrn, ObjectList.PRODUCT_KEY), ObjectList.PRODUCT_KEY));
        request.setAttribute("product", object);
        request.setAttribute("prodVerion", prodVerion);
        request.setAttribute("productId", productId);
        request.setAttribute("versionId", prodVerion.getVersionId());
        request.setAttribute("versionStatus", prodVerion.getVersionStatus());
        request.setAttribute("currentVersion", prodVerion.getInstanceVersion());
        request.setAttribute("initaction", "/productsave.do");
        return mapping.findForward("versionInfo");
    }

    public ActionForward prodVersionHist(ActionMapping mapping, HttpServletRequest request) {
        Long facilityRrn = LocalContext.getFacilityRrn();
        String productId = WebUtils.getParameterUpperCase("productId", request);
        Integer targetVersion = WebUtils.getParameterInt("targetVersion", request);

        ProductVersion prodVersion = productService.getProductVersion(productId, targetVersion);

        List<Map<String, String>> prodVerHist = productService.getProductVersionHist(productId, targetVersion);
        NamedObject prod = baseService.getNamedObject(baseService.getNamedObjectRrn(productId, baseService
                .getNamedSpace(facilityRrn, ObjectList.PRODUCT_KEY), ObjectList.PRODUCT_KEY));
        prodVersion.setEcnId(baseService.getNamedObjectId(prodVersion.getEcnRrn()));
        request.setAttribute("product", prod);
        request.setAttribute("prodVersion", prodVersion);
        request.setAttribute("productId", productId);
        request.setAttribute("versionId", prodVersion.getVersionId());
        request.setAttribute("versionStatus", prodVersion.getVersionStatus());
        request.setAttribute("currentVersion", prodVersion.getInstanceVersion());
        request.setAttribute("historys", prodVerHist);
        return mapping.findForward("versionHist");
    }

}