BORVersionSaveAction.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.bor;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.exception.SystemIllegalArgumentException;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.beans.BeanUtils;
import com.mycim.framework.utils.beans.PropertyUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.bas.ObjectVersion;
import com.mycim.valueobject.consts.SessionNames;
import com.mycim.valueobject.prp.BOR;
import com.mycim.valueobject.prp.BORResource;
import com.mycim.valueobject.prp.BORVersion;
import com.mycim.webapp.Constants;
import com.mycim.webapp.actions.PrpSetupAction;
import com.mycim.webapp.forms.BorVersionInfoForm;
import com.mycim.webapp.forms.VersionForm;
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;
/**
* 资源清单的版本管理相关
*
* @author
*/
public class BORVersionSaveAction extends PrpSetupAction {
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
request.setAttribute(SessionNames.FACILITY_INFO_KEY, sysService.getFacility(LocalContext.getFacilityRrn()));
VersionForm versionForm = (VersionForm) form;
BOR bor = new BOR(versionForm.getInstanceId(), getNamedSpace(ObjectList.BOR_KEY, LocalContext.getFacilityRrn()),
ObjectList.BOR_KEY);
bor.setObjectType(ObjectList.BOM_KEY);
NamedObject namedObject = baseService.getNamedObject(bor);
BeanUtils.copyProperties(namedObject, bor);
List<ObjectVersion> versions = baseService.getObjectVersions(bor);
if (CollectionUtils.isEmpty(versions)) {
request.setAttribute("editaction", "/borversionsave.do");
request.setAttribute("initaction", "/borSetup.do");
return mapping.findForward("showVersions");
}
ObjectVersion currentVersion = versions.get(0);
currentVersion.copyNamedObject(bor);
BORVersion borVersion = new BORVersion(bor.getInstanceRrn(), currentVersion.getCurrentVersion());
borVersion = prpService.getBORVersion(borVersion);
PropertyUtils.copyProperties(versionForm, currentVersion);
versionForm.setEcnFlag(getEcnFlag());
versionForm.setTransId(Constants.MODIFY_KEY);
versionForm.setVersionEditEnable(String.valueOf(checkVersionEditEnable(currentVersion)));
versionForm.setObjectDeleteEnable(checkObjectDeleteEnabled(versions));
request.setAttribute(SessionNames.BORVERSION_KEY, borVersion);
return mapping.findForward(Constants.MODIFY_KEY);
}
/**
* 添加,修改
*
* @param mapping
* @param request
* @param theform
* @return
*/
public ActionForward memberInitView(ActionMapping mapping, HttpServletRequest request, BorVersionInfoForm theform) {
if (StringUtils.isEqual(theform.getTransId(), "create")) {
} else if (StringUtils.isEqual(theform.getTransId(), "modify")) {
Integer sequenceNumber = theform.getSequenceNumber();
BOR bor = prpService.getBOR(LocalContext.getFacilityRrn(), theform.getInstanceId());
BORVersion borVersion = new BORVersion(bor.getInstanceRrn(), Integer.valueOf(theform.getVersionId()));
borVersion = prpService.getBORVersion(borVersion);
BORResource borResource = prpService
.getBorResource(bor.getInstanceRrn(), Integer.valueOf(theform.getVersionId()),
theform.getSequenceNumber());
PropertyUtils.copyProperties(theform, borResource);
theform.setExpirationDateStr(
DateUtils.formatDate(borResource.getExpirationDate(), DateUtils.DATE_FORMAT4DAY));
theform.setInstanceId(bor.getInstanceId());
theform.setObjectSubtype(bor.getObjectSubtype());
theform.setVersionId(borVersion.getVersionId());
theform.setNamedSpace(bor.getNamedSpace());
theform.setTransId("modify");
theform.setSequenceNumber(sequenceNumber);
if (StringUtils.equals(borVersion.getVersionStatus(), "ACTIVE")) {
theform.setVersionEditEnable("false");
} else {
theform.setVersionEditEnable("true");
}
}
return mapping.findForward("members");
}
public ActionForward cancel(ActionMapping mapping, HttpServletRequest request, BorVersionInfoForm theform) {
BOR bor = prpService.getBOR(LocalContext.getFacilityRrn(), theform.getInstanceId());
PropertyUtils.copyProperties(theform, bor);
List<BORVersion> versions = prpService.getBORVersions(bor);
theform.setVersionEditEnable(String.valueOf(checkVersionEditEnable(versions)));
theform.setObjectDeleteEnable(checkObjectDeleteEnabled(versions));
theform.setTransId(Constants.MODIFY_KEY);
return mapping.findForward(Constants.BACK_KEY);
}
public ActionForward submitResource(ActionMapping mapping, HttpServletRequest request, HttpServletResponse response,
BorVersionInfoForm theform) {
BOR bor = prpService.getBOR(LocalContext.getFacilityRrn(), theform.getInstanceId());
BORVersion borVersion = new BORVersion(bor.getInstanceRrn(), Integer.valueOf(theform.getVersionId()));
borVersion = prpService.getBORVersion(borVersion);
List<BORResource> borResources = prpService.getBorResources(borVersion);
if (borResources == null || borResources.size() <= 0) {
theform.setChildResourceCount(String.valueOf(borVersion.getResources().size()));
throw new SystemIllegalArgumentException(Errors.create().content("Please add Bor Resource!").build());
}
ecnService.activateEcn(borVersion.getEcnRrn(), LocalContext.getUserId());
borVersion = prpService.getBORVersion(borVersion);
borVersion.setResources(borResources);
borVersion.copyNamedObject(bor);
PropertyUtils.copyProperties(theform, borVersion);
theform.setChildResourceCount(String.valueOf(borVersion.getResources().size()));
theform.setVersionEditEnable(String.valueOf(checkVersionEditEnable(borVersion)));
List<BORVersion> borVersions = prpService.getBORVersions(bor);
theform.setObjectDeleteEnable(checkObjectDeleteEnabled(borVersions));
request.setAttribute(SessionNames.BORVERSION_KEY, borVersion);
theform.setTransId(Constants.MODIFY_KEY);
return mapping.findForward(Constants.MODIFY_KEY);
}
public ActionForward showVersions(ActionMapping mapping, HttpServletRequest request, BorVersionInfoForm theform) {
request.setAttribute(SessionNames.FACILITY_INFO_KEY, sysService.getFacility(LocalContext.getFacilityRrn()));
BOR bor = prpService.getBOR(LocalContext.getFacilityRrn(), theform.getInstanceId());
List<BORVersion> versions = prpService.getBORVersions(bor);
request.setAttribute("version", versions);
request.setAttribute("editaction", "/borversionsave.do");
request.setAttribute("initaction", "/borSetup.do");
request.setAttribute("versionedit", checkVersionEditEnable(versions) + "");
request.setAttribute("objectform", "versionForm");
return mapping.findForward(Constants.VERSION_KEY);
}
public ActionForward addVersionWithEcn(ActionMapping mapping, HttpServletRequest request,
BorVersionInfoForm theform) {
request.setAttribute(SessionNames.FACILITY_INFO_KEY, sysService.getFacility(LocalContext.getFacilityRrn()));
BOR bor = prpService.getBOR(LocalContext.getFacilityRrn(), theform.getInstanceId());
BORVersion borVersion;
borVersion = new BORVersion();
borVersion.copyNamedObject(bor);
int newVersionId = bor.getCurrentVersion().intValue() + 1;
borVersion.setVersionStatus("UNFROZEN");
borVersion.setInstanceVersion(newVersionId);
borVersion.setVersionId(Integer.toString(newVersionId));
borVersion.setVersionDesc("Automatic schema generation");
borVersion.setTransId(Constants.CREATE_KEY);
borVersion.setTransPerformedby(LocalContext.getUserId());
baseService.insertObjectVersionWithEcn(borVersion);
borVersion = prpService.getBORVersion(borVersion);
borVersion.copyNamedObject(bor);
borVersion.setResources(prpService.getBorResources(borVersion));
List<BORVersion> borVersions = prpService.getBORVersions(bor);
bor.setVersions(borVersions);
PropertyUtils.copyProperties(theform, borVersion);
request.setAttribute(SessionNames.BORVERSION_KEY, borVersion);
theform.setChildResourceCount(String.valueOf(borVersion.getResources().size()));
theform.setVersionEditEnable(String.valueOf(checkVersionEditEnable(borVersion)));
theform.setObjectDeleteEnable(checkObjectDeleteEnabled(borVersions));
theform.setTransId(Constants.MODIFY_KEY);
return mapping.findForward("showversion");
}
public ActionForward versionInfo(ActionMapping mapping, BorVersionInfoForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String rrn = request.getParameter("versionRrn");
String version = request.getParameter("version");
int ver = Integer.parseInt(version);
long versionRrn = Long.parseLong(rrn);
NamedObject namedObject = new NamedObject();
namedObject.setInstanceRrn(versionRrn);
namedObject = baseService.getNamedObject(namedObject);
ObjectVersion pv = baseService.getObjectVersion(versionRrn, ver);
pv.copyNamedObject(namedObject);
request.setAttribute("historys",
baseService.getObjectVersionHistoryList(pv.getInstanceRrn(), pv.getInstanceVersion()));
PropertyUtils.copyProperties(form, pv);
form.setTransId(Constants.MODIFY_KEY);
return (mapping.findForward("detail"));
}
public ActionForward deleteVersion(ActionMapping mapping, BorVersionInfoForm theform, HttpServletRequest request,
HttpServletResponse response) throws Exception {
BOR bor = prpService.getBOR(LocalContext.getFacilityRrn(), theform.getInstanceId());
BORVersion borVersion = new BORVersion(bor.getInstanceRrn(), Integer.valueOf(theform.getVersionId()));
borVersion.setTransId(Constants.DELETE_KEY);
borVersion.setTransPerformedby(LocalContext.getUserId());
prpService.deleteBORVersion(borVersion);
//删除版本后重新初始化一次bor
bor = prpService.getBOR(LocalContext.getFacilityRrn(), bor.getInstanceId());
List<BORVersion> versions = prpService.getBORVersions(bor);
borVersion = null;
if (versions.isEmpty()) {
borVersion = new BORVersion();
borVersion.copyNamedObject(bor);
int newVersionId = bor.getCurrentVersion().intValue() + 1;
borVersion.setInstanceVersion(newVersionId);
borVersion.setVersionId(Integer.toString(newVersionId));
borVersion.setVersionDesc("Automatic schema generation");
borVersion.setTransId(Constants.CREATE_KEY);
borVersion.setVersionStatus("UNFROZEN");
borVersion.setTransPerformedby(LocalContext.getUserId());
baseService.insertObjectVersionWithEcn(borVersion);
versions = prpService.getBORVersions(bor);
ObjectVersion objectVersion = (ObjectVersion) versions.iterator().next();
borVersion.setVersionStatus(objectVersion.getVersionStatus());
borVersion.setObjectSubtype(ObjectList.ITEM_KEY);
bor.setVersions(versions);
} else {
borVersion = new BORVersion();
borVersion.copyObjectVersion(versions.get(0));
borVersion.setResources(prpService.getBorResources(borVersion));
borVersion.copyNamedObject(bor);
if (ObjectList.BOE_KEY.equals(borVersion.getObjectType())) {
borVersion.setObjectSubtype(ObjectList.ENTITYGROUP_KEY);
} else {
borVersion.setObjectSubtype(ObjectList.ITEM_KEY);
}
bor.setVersions(versions);
}
request.setAttribute(SessionNames.BORVERSION_KEY, borVersion);
PropertyUtils.copyProperties(theform, borVersion);
theform.setTransId(Constants.MODIFY_KEY);
theform.setChildResourceCount(String.valueOf(borVersion.getResources().size()));
theform.setVersionEditEnable(String.valueOf(checkVersionEditEnable(borVersion)));
theform.setObjectDeleteEnable(checkObjectDeleteEnabled(versions));
return mapping.findForward("showversion");
}
public ActionForward version(ActionMapping mapping, HttpServletRequest request, BorVersionInfoForm theform,
HttpServletResponse response) {
BOR bor = prpService.getBOR(LocalContext.getFacilityRrn(), theform.getInstanceId());
BORVersion borVersion = new BORVersion(bor.getInstanceRrn(), Integer.valueOf(theform.getInstanceVersion()));
borVersion = prpService.getBORVersion(borVersion);
borVersion.setResources(prpService.getBorResources(borVersion));
borVersion.copyNamedObject(bor);
if (ObjectList.BOE_KEY.equals(borVersion.getObjectType())) {
borVersion.setObjectSubtype(ObjectList.ENTITYGROUP_KEY);
} else {
borVersion.setObjectSubtype(ObjectList.ITEM_KEY);
}
request.setAttribute(SessionNames.BORVERSION_KEY, borVersion);
PropertyUtils.copyProperties(theform, borVersion);
theform.setChildResourceCount(String.valueOf(borVersion.getResources().size()));
theform.setVersionEditEnable(String.valueOf(checkVersionEditEnable(borVersion)));
theform.setObjectDeleteEnable(checkObjectDeleteEnabled(prpService.getBORVersions(bor)));
theform.setTransId(Constants.MODIFY_KEY);
return mapping.findForward("showversion");
}
/**
* 修改版本信息(实际没啥用,加了一条事物历史而已)
*
* @param mapping
* @param request
* @param theform
* @param response
* @return
*/
public ActionForward modifyBORVersion(ActionMapping mapping, HttpServletRequest request, BorVersionInfoForm theform,
HttpServletResponse response) {
BOR bor = prpService.getBOR(LocalContext.getFacilityRrn(), theform.getInstanceId());
BORVersion borVersion = new BORVersion(bor.getInstanceRrn(), Integer.valueOf(theform.getVersionId()));
borVersion = prpService.getBORVersion(borVersion);
borVersion.setTransPerformedby(LocalContext.getUserId());
prpService.updateBORVersion(borVersion);
borVersion.setResources(prpService.getBorResources(borVersion));
request.setAttribute(SessionNames.BORVERSION_KEY, borVersion);
theform.setTransId(Constants.MODIFY_KEY);
theform.setChildResourceCount(String.valueOf(borVersion.getResources().size()));
theform.setVersionEditEnable(String.valueOf(checkVersionEditEnable(borVersion)));
theform.setObjectDeleteEnable(checkObjectDeleteEnabled(bor.getVersions()));
return mapping.findForward(Constants.MODIFY_KEY);
}
/**
* 复制上一版本
*
* @param mapping
* @param request
* @param theform
* @return
*/
public ActionForward copyLastVersion(ActionMapping mapping, HttpServletRequest request,
HttpServletResponse response, BorVersionInfoForm theform) {
BOR bor = prpService.getBOR(LocalContext.getFacilityRrn(), theform.getInstanceId());
prpService
.copyLastBORVersionResourceInfoForCurrent(bor.getInstanceRrn(), bor.getCurrentVersion().intValue() - 1);
List<BORVersion> versions = prpService.getBORVersions(bor);
if (versions != null && versions.size() > 0) {
bor.setVersions(versions);
BORVersion borVersion = getBORVersionByVersions(bor, (ObjectVersion) versions.iterator().next());
PropertyUtils.copyProperties(theform, borVersion);
request.setAttribute(SessionNames.BORVERSION_KEY, borVersion);
theform.setChildResourceCount(String.valueOf(borVersion.getResources().size()));
theform.setTransId(Constants.MODIFY_KEY);
return mapping.findForward(Constants.MODIFY_KEY);
} else {
return cancel(mapping, request, theform);
}
}
private BORVersion getBORVersionByVersions(BOR bor, ObjectVersion objectVersion) {
BORVersion borVersion = new BORVersion();
borVersion.copyObjectVersion(objectVersion);
borVersion = prpService.getBORVersion(borVersion);
borVersion.copyNamedObject(bor);
borVersion.setResources(prpService.getBorResources(borVersion));
if (ObjectList.BOE_KEY.equals(borVersion.getObjectType())) {
borVersion.setObjectSubtype(ObjectList.ENTITYGROUP_KEY);
} else {
borVersion.setObjectSubtype(ObjectList.ITEM_KEY);
}
return borVersion;
}
private String checkObjectDeleteEnabled(List<? extends ObjectVersion> versionObjects) {
String checked = "true";
if (CollectionUtils.isNotEmpty(versionObjects)) {
// 判断所有版本中是否有激活的版本,有则不能删除,无则能删除
for (Object version : versionObjects) {
ObjectVersion versionObject = (ObjectVersion) version;
if ((versionObject.getVersionStatus() != null) &&
versionObject.getVersionStatus().equalsIgnoreCase("ACTIVE")) {
checked = "false";
break;
}
}
}
return checked;
}
}