ContextRuleSave.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.contextrule;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.beans.PropertyUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.consts.SessionNames;
import com.mycim.valueobject.prp.Context;
import com.mycim.valueobject.prp.ContextRule;
import com.mycim.webapp.Constants;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.CtxAction;
import com.mycim.webapp.forms.ContextInfoForm;
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.Collection;
import java.util.List;
import java.util.ListIterator;
/**
* 配置列表定义 规则页面
*
* @author yanbing.chen
* @date 2019/8/20
* @since 1.8
**/
public class ContextRuleSave extends CtxAction {
private static final int PAGE_SIZE = 100;
private static final String UP = "up";
private static final String DOWN = "down";
private static final String YES = "YES";
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
ContextInfoForm theform = (ContextInfoForm) form;
Context context = new Context(theform.getInstanceId(), theform.getNamedSpace(), ObjectList.CONTEXT_KEY);
context = (Context) getInstance(context);
context.setTransPerformedby(LocalContext.getUserId());
// Copy value object properties to form bean.
PropertyUtils.copyProperties(context, theform);
context.setRules(this.getContextRules(context.getInstanceRrn()));
theform.setTransId(Constants.MODIFY_KEY);
request.setAttribute(SessionNames.CONTEXT_KEY, context);
return mapping.findForward(Constants.RULES_KEY);
}
@Override
public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
ContextInfoForm theform = (ContextInfoForm) form;
Context context = new Context(theform.getInstanceId(), theform.getNamedSpace(), ObjectList.CONTEXT_KEY);
context = (Context) getInstance(context);
List<ContextRule> ruleList = getContextRules(context.getInstanceRrn());
context.setRules(ruleList);
// Copy value object properties to form bean.
PropertyUtils.copyProperties(theform, context);
// if user click the Cancel button
theform.setTransId(Constants.MODIFY_KEY);
request.setAttribute(SessionNames.CONTEXT_KEY, context);
return new ActionForward(mapping.getInput());
}
public ActionForward members(ActionMapping mapping, ContextInfoForm theform,
HttpServletRequest request) throws Exception {
Context context = new Context(theform.getInstanceId(), theform.getNamedSpace(), ObjectList.CONTEXT_KEY);
context = (Context) getInstance(context);
List<ContextRule> ruleList = getContextRules(context.getInstanceRrn());
context.setRules(ruleList);
String members = WebUtils.getParameter("members", request);
String item = WebUtils.getParameter("item", request);
ContextRule object;
if (!StringUtils.isEmpty(item)) {
int index = this.getTheIndex(ruleList, item);
object = ruleList.get(index);
if (StringUtils.equals(members, UP)) {
if (index > 0) {
ruleList.set(index, ruleList.get(index - 1));
ruleList.set(index - 1, object);
}
} else if (StringUtils.equals(members, DOWN)) {
if (index < (ruleList.size() - 1)) {
ruleList.set(index, ruleList.get(index + 1));
ruleList.set(index + 1, object);
}
}
object.setSequenceNumber(Integer.parseInt(item));
}
context.setRules(ruleList);
// 上下移动, 即时存储
saveMoveRules(context);
context.setRules(getContextRules(context.getInstanceRrn()));
request.setAttribute(SessionNames.CONTEXT_KEY, context);
return mapping.findForward(Constants.MODIFY_KEY);
}
public ActionForward create(ActionMapping mapping, ContextInfoForm theform,
HttpServletRequest request) throws Exception {
Context context = new Context(theform.getInstanceId(), theform.getNamedSpace(), ObjectList.CONTEXT_KEY);
context = (Context) getInstance(context);
List<ContextRule> ruleList = getContextRules(context.getInstanceRrn());
context.setRules(ruleList);
// current page number
String pagevalue = request.getParameter("pagevalue");
// defautl page number is the 1st page.
if (pagevalue == null) {
pagevalue = "1";
}
int page = Integer.parseInt(pagevalue);
// Copy value object properties to form bean.
PropertyUtils.copyProperties(theform, context);
// who operate this object?
context.setTransPerformedby(LocalContext.getUserId());
saveAllRules(context, request, page);
addRule(context.getInstanceRrn());
theform.setPages(new Integer(1));
context.setRules(getContextRules(context.getInstanceRrn()));
// reload the rules!
theform.setTransId(Constants.MODIFY_KEY);
request.setAttribute(SessionNames.CONTEXT_KEY, context);
return mapping.findForward(Constants.MODIFY_KEY);
}
public ActionForward delete(ActionMapping mapping, ContextInfoForm theform,
HttpServletRequest request) throws Exception {
Context context = new Context(theform.getInstanceId(), theform.getNamedSpace(), ObjectList.CONTEXT_KEY);
context = (Context) getInstance(context);
List<ContextRule> ruleList = getContextRules(context.getInstanceRrn());
context.setRules(ruleList);
// current page number
String pagevalue = request.getParameter("pagevalue");
// defautl page number is the 1st page.
if (pagevalue == null) {
pagevalue = "1";
}
int page = Integer.parseInt(pagevalue);
// Copy value object properties to form bean.
PropertyUtils.copyProperties(theform, context);
// who operate this object?
context.setTransPerformedby(LocalContext.getUserId());
String itemvalue = request.getParameter(Constants.ITEM_KEY);
Assert.isFalse(itemvalue == null,
Errors.create().key(MessageIdList.CONTEXT_WEB_PAGE_ERROR).content("网页错误").build());
int sequenceNumber = Integer.valueOf(itemvalue).intValue();
removeRule(context.getInstanceRrn(), sequenceNumber);
context.setRules(this.getContextRules(context.getInstanceRrn()));
context.setRules(getContextRules(context.getInstanceRrn()));
// reload the rules!
theform.setTransId(Constants.MODIFY_KEY);
request.setAttribute(SessionNames.CONTEXT_KEY, context);
return mapping.findForward(Constants.MODIFY_KEY);
}
public ActionForward modify(ActionMapping mapping, ContextInfoForm theform,
HttpServletRequest request) throws Exception {
Context context = new Context(theform.getInstanceId(), theform.getNamedSpace(), ObjectList.CONTEXT_KEY);
context = (Context) getInstance(context);
List<ContextRule> ruleList = getContextRules(context.getInstanceRrn());
context.setRules(ruleList);
// current page number
String pagevalue = request.getParameter("pagevalue");
// defautl page number is the 1st page.
if (pagevalue == null) {
pagevalue = "1";
}
int page = Integer.parseInt(pagevalue);
// Copy value object properties to form bean.
PropertyUtils.copyProperties(theform, context);
// who operate this object?
context.setTransPerformedby(LocalContext.getUserId());
theform.setPages(new Integer(page));
this.processItemAction(request, theform);
saveAllRules(context, request, page);
context.setRules(getContextRules(context.getInstanceRrn()));
theform.setTransId(Constants.MODIFY_KEY);
request.setAttribute(SessionNames.CONTEXT_KEY, context);
return new ActionForward(mapping.getInput());
}
private void saveMoveRules(Context context) {
List<ContextRule> rules = (List<ContextRule>) context.getRules();
List<ContextRule> datas = new ArrayList<>();
for (int i = 0; i < rules.size(); i++) {
ContextRule rule = rules.get(i);
ContextRule data = new ContextRule();
data.setSequenceNumber(i + 1);
data.setContextRrn(context.getInstanceRrn());
if (StringUtils.isNotEmpty(context.getContextField1())) {
data.setContextCheckFlag1(conversionCheckBox(rule.getContextCheckFlag1()));
}
if (StringUtils.isNotEmpty(context.getContextField2())) {
data.setContextCheckFlag2(conversionCheckBox(rule.getContextCheckFlag2()));
}
if (StringUtils.isNotEmpty(context.getContextField3())) {
data.setContextCheckFlag3(conversionCheckBox(rule.getContextCheckFlag3()));
}
if (StringUtils.isNotEmpty(context.getContextField4())) {
data.setContextCheckFlag4(conversionCheckBox(rule.getContextCheckFlag4()));
}
if (StringUtils.isNotEmpty(context.getContextField5())) {
data.setContextCheckFlag5(conversionCheckBox(rule.getContextCheckFlag5()));
}
if (StringUtils.isNotEmpty(context.getContextField6())) {
data.setContextCheckFlag6(conversionCheckBox(rule.getContextCheckFlag6()));
}
if (StringUtils.isNotEmpty(context.getContextField7())) {
data.setContextCheckFlag7(conversionCheckBox(rule.getContextCheckFlag7()));
}
if (StringUtils.isNotEmpty(context.getContextField8())) {
data.setContextCheckFlag8(conversionCheckBox(rule.getContextCheckFlag8()));
}
if (StringUtils.isNotEmpty(context.getContextField9())) {
data.setContextCheckFlag9(conversionCheckBox(rule.getContextCheckFlag9()));
}
if (StringUtils.isNotEmpty(context.getContextField10())) {
data.setContextCheckFlag10(conversionCheckBox(rule.getContextCheckFlag10()));
}
if (StringUtils.isNotEmpty(context.getContextField11())) {
data.setContextCheckFlag11(conversionCheckBox(rule.getContextCheckFlag11()));
}
if (StringUtils.isNotEmpty(context.getContextField12())) {
data.setContextCheckFlag12(conversionCheckBox(rule.getContextCheckFlag12()));
}
if (StringUtils.isNotEmpty(context.getContextField13())) {
data.setContextCheckFlag13(conversionCheckBox(rule.getContextCheckFlag13()));
}
if (StringUtils.isNotEmpty(context.getContextField14())) {
data.setContextCheckFlag14(conversionCheckBox(rule.getContextCheckFlag14()));
}
if (StringUtils.isNotEmpty(context.getContextField15())) {
data.setContextCheckFlag15(conversionCheckBox(rule.getContextCheckFlag15()));
}
datas.add(data);
}
this.updateRules(datas);
}
private String conversionCheckBox(String s) {
if (StringUtils.isEmpty(s)) {
return "off";
}
if (StringUtils.equalsIgnoreCase(s, YES)) {
return "on";
} else {
return "off";
}
}
private void updateRules(List<ContextRule> rules) {
ctxService.updateContextRules(rules);
}
private void addRule(long contextRrn) {
ContextRule contextRule = new ContextRule();
contextRule.setContextRrn(contextRrn);
ctxService.insertContextRule(contextRule);
}
private void removeRule(long contextRrn, int sequenceNumber) {
ctxService.deleteContextRule(contextRrn, sequenceNumber);
}
private int getTheIndex(List list, String menuId) {
ListIterator it = list.listIterator();
int index = 0;
while (it.hasNext()) {
ContextRule ContextRule = (ContextRule) it.next();
String temp = String.valueOf(ContextRule.getSequenceNumber());
if (StringUtils.equals(temp, menuId)) {
return index;
}
index++;
}
return -1;
}
private void saveAllRules(Context context, HttpServletRequest request, int page) {
String[] contextCheckFlag1 = request.getParameterValues("contextCheckFlag1");
String[] contextCheckFlag2 = request.getParameterValues("contextCheckFlag2");
String[] contextCheckFlag3 = request.getParameterValues("contextCheckFlag3");
String[] contextCheckFlag4 = request.getParameterValues("contextCheckFlag4");
String[] contextCheckFlag5 = request.getParameterValues("contextCheckFlag5");
String[] contextCheckFlag6 = request.getParameterValues("contextCheckFlag6");
String[] contextCheckFlag7 = request.getParameterValues("contextCheckFlag7");
String[] contextCheckFlag8 = request.getParameterValues("contextCheckFlag8");
String[] contextCheckFlag9 = request.getParameterValues("contextCheckFlag9");
String[] contextCheckFlag10 = request.getParameterValues("contextCheckFlag10");
String[] contextCheckFlag11 = request.getParameterValues("contextCheckFlag11");
String[] contextCheckFlag12 = request.getParameterValues("contextCheckFlag12");
String[] contextCheckFlag13 = request.getParameterValues("contextCheckFlag13");
String[] contextCheckFlag14 = request.getParameterValues("contextCheckFlag14");
String[] contextCheckFlag15 = request.getParameterValues("contextCheckFlag15");
Collection modifyCollection = new ArrayList();
int startSeq = ((page - 1) * PAGE_SIZE) + 1;
int endIndex = context.getRules().size() - ((page - 1) * PAGE_SIZE);
if (endIndex > PAGE_SIZE) {
endIndex = PAGE_SIZE;
}
int i = 0;
while (i < endIndex) {
ContextRule temp = new ContextRule();
temp.setContextRrn(context.getInstanceRrn());
temp.setSequenceNumber(startSeq + i);
if (StringUtils.isNotEmpty(context.getContextField1())) {
temp.setContextCheckFlag1(contextCheckFlag1[i]);
}
if (StringUtils.isNotEmpty(context.getContextField2())) {
temp.setContextCheckFlag2(contextCheckFlag2[i]);
}
if (StringUtils.isNotEmpty(context.getContextField3())) {
temp.setContextCheckFlag3(contextCheckFlag3[i]);
}
if (StringUtils.isNotEmpty(context.getContextField4())) {
temp.setContextCheckFlag4(contextCheckFlag4[i]);
}
if (StringUtils.isNotEmpty(context.getContextField5())) {
temp.setContextCheckFlag5(contextCheckFlag5[i]);
}
if (StringUtils.isNotEmpty(context.getContextField6())) {
temp.setContextCheckFlag6(contextCheckFlag6[i]);
}
if (StringUtils.isNotEmpty(context.getContextField7())) {
temp.setContextCheckFlag7(contextCheckFlag7[i]);
}
if (StringUtils.isNotEmpty(context.getContextField8())) {
temp.setContextCheckFlag8(contextCheckFlag8[i]);
}
if (StringUtils.isNotEmpty(context.getContextField9())) {
temp.setContextCheckFlag9(contextCheckFlag9[i]);
}
if (StringUtils.isNotEmpty(context.getContextField10())) {
temp.setContextCheckFlag10(contextCheckFlag10[i]);
}
if (StringUtils.isNotEmpty(context.getContextField11())) {
temp.setContextCheckFlag11(contextCheckFlag11[i]);
}
if (StringUtils.isNotEmpty(context.getContextField12())) {
temp.setContextCheckFlag12(contextCheckFlag12[i]);
}
if (StringUtils.isNotEmpty(context.getContextField13())) {
temp.setContextCheckFlag13(contextCheckFlag13[i]);
}
if (StringUtils.isNotEmpty(context.getContextField14())) {
temp.setContextCheckFlag14(contextCheckFlag14[i]);
}
if (StringUtils.isNotEmpty(context.getContextField15())) {
temp.setContextCheckFlag15(contextCheckFlag15[i]);
}
modifyCollection.add(temp);
i++;
}
this.updateRules((List<ContextRule>) modifyCollection);
}
}