From 3b3ac1fc72e2849eb500840fd9d61e9b8f1960e1 Mon Sep 17 00:00:00 2001
From: yuxc <yuxc@vci-tech.com>
Date: 星期四, 17 十月 2024 16:31:45 +0800
Subject: [PATCH] 1、查询所有的action线程变量用于优化,只查一次平台。 2、新增文件柜管理的controller,servicel以及文件管理的分页查询卷、增加卷、修改卷等接口

---
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsPvolumeDTO.java                    |   24 +++
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/RoleRightParamDTOS.java              |   23 +++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsPvolumesController.java     |   86 ++++++++++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java    |   17 ++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPvolumesServiceI.java          |   37 +++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/AllActionThreadLocal.java          |   24 +++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPvolumesServiceImpl.java  |  154 ++++++++++++++++++++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java |   13 +
 8 files changed, 372 insertions(+), 6 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsPvolumeDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsPvolumeDTO.java
new file mode 100644
index 0000000..4995d63
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsPvolumeDTO.java
@@ -0,0 +1,24 @@
+package com.vci.dto;
+
+import lombok.Data;
+
+/**
+ * 鏂囦欢鏌滅鐞嗕紶杈撳璞�
+ * @author yuxc
+ * @date 2024/10/14
+ */
+@Data
+public class OsPvolumeDTO implements java.io.Serializable {
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2492852474710986720L;
+    private String id; //鍗穒d
+    private String name; //鍗峰悕绉�
+    private String host;//鍗锋湇鍔p
+    private String service; // 鏈嶅姟鍚�
+    private short type; //鍗锋湇鍔$被鍨� 0:Unix,1:Win NT
+    private String path; //鍗锋湇鍔¤矾寰�
+    private boolean isvalid; //鏄惁涓洪閫夎矾寰勶紝濡傛灉淇敼浜嗚繖涓�间細鎻愰啋锛氭偍纭疄瑕佷慨鏀瑰嵎鐨勯閫夎矾寰勫悧锛�
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/RoleRightParamDTOS.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/RoleRightParamDTOS.java
new file mode 100644
index 0000000..5fe37e5
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/RoleRightParamDTOS.java
@@ -0,0 +1,23 @@
+package com.vci.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ * 淇濆瓨鏉冮檺浼犺緭瀵硅薄
+ * @author yuxc
+ * @date 2024-09-06
+ */
+@Data
+public class RoleRightParamDTOS implements Serializable {
+
+
+    /**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+    private static final long serialVersionUID = 2492852474710986720L;
+    private ArrayList<RoleRightParamDTO> roleData;
+    private String roleId ;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java
index 0651684..6ea336a 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java
@@ -7,6 +7,7 @@
 import com.vci.dto.RoleInfoDTO;
 import com.vci.dto.RoleRightDTO;
 import com.vci.dto.RoleRightParamDTO;
+import com.vci.dto.RoleRightParamDTOS;
 import com.vci.frameworkcore.compatibility.ISmFunctionQueryService;
 import com.vci.frameworkcore.compatibility.SmHMSysModConfigServiceI;
 import com.vci.pagemodel.AppConfigDetailInfoVO;
@@ -28,9 +29,7 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.IOException;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
 
 /**
  * 棣栭〉绯荤粺妯″潡閰嶇疆鎺у埗鍣�
@@ -135,8 +134,14 @@
      * @throws PLException
      */
     @PostMapping("/saveRoleRight")
-    public BaseResult<List<String>> saveRoleRight(@RequestBody List<RoleRightParamDTO> roleRightDTOS, String roleId) {
+    public BaseResult saveRoleRight(@RequestBody RoleRightParamDTOS roleDto) {
         try {
+
+            ArrayList<RoleRightParamDTO> roleRightDTOS = roleDto.getRoleData();
+            String roleId = roleDto.getRoleId();
+            if(StringUtils.isBlank(roleId)){
+                return BaseResult.fail("璇烽�夋嫨瑙掕壊锛�");
+            }
             return functionQueryService.saveRoleRight(roleRightDTOS, roleId);
         }catch (Exception e){
             e.printStackTrace();
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsPvolumesController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsPvolumesController.java
new file mode 100644
index 0000000..853e3a3
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsPvolumesController.java
@@ -0,0 +1,86 @@
+package com.vci.web.controller;
+
+import com.vci.corba.common.PLException;
+import com.vci.corba.framework.data.PvolumeInfo;
+import com.vci.dto.*;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.service.OsActionServiceI;
+import com.vci.web.service.OsPvolumesServiceI;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 鏂囦欢鏌滅鐞嗙殑鎺у埗鍣�
+ * @author yuxc
+ * @date 2024-10-14
+ */
+@RequestMapping("/pvolumesController")
+@RestController
+public class OsPvolumesController {
+
+    /**
+     * Action鏈嶅姟
+     */
+    @Autowired
+    private OsPvolumesServiceI osPvolumesServiceI;
+
+    /**
+     * 鍒嗛〉鏌ヨ鍗�
+     * @param pageSize 椤垫暟
+     * @param pageIndex 绗嚑椤�
+     * @return 鍒嗛〉鏁版嵁
+     */
+    @GetMapping("/getPvolumesPage")
+    public BaseResult getPvolumesPage(short pageSize, short pageIndex){
+        try {
+            return osPvolumesServiceI.getPvolumesPage(pageSize, pageIndex);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+
+    /**
+     * 澧炲姞鍗�
+     * @param dto 鍗风殑浼犺緭淇℃伅
+     * @return 淇濆瓨缁撴灉
+     */
+    @GetMapping("/savePvolume")
+    public BaseResult savePvolume(@RequestBody OsPvolumeDTO dto){
+        try {
+            return osPvolumesServiceI.savePvolume(dto);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+
+    /**
+     * 淇敼鍗�
+     * @param dto 鍗风殑浼犺緭淇℃伅
+     * @return 淇敼缁撴灉
+     */
+    @GetMapping("/updatePvolume")
+    public BaseResult updatePvolume(@RequestBody OsPvolumeDTO dto){
+        try {
+            return osPvolumesServiceI.updatePvolume(dto);
+        } catch (PLException e) {
+            BaseResult objectBaseResult = new BaseResult<>();
+            objectBaseResult.setCode(Integer.parseInt(e.code));
+            objectBaseResult.setMsg(Arrays.toString(e.messages));
+            return objectBaseResult;
+        }
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/AllActionThreadLocal.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/AllActionThreadLocal.java
new file mode 100644
index 0000000..bd07d53
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/other/AllActionThreadLocal.java
@@ -0,0 +1,24 @@
+package com.vci.web.other;
+
+import com.vci.pagemodel.UIActionVO;
+import java.util.Map;
+
+public class AllActionThreadLocal {
+    //鎶婃瀯閫犲嚱鏁扮鏈夛紝澶栭潰涓嶈兘new锛屽彧鑳介�氳繃涓嬮潰涓や釜鏂规硶鎿嶄綔
+    private AllActionThreadLocal(){
+
+    }
+
+    private static final ThreadLocal<Map<String, UIActionVO>> LOCAL = new ThreadLocal<>();
+
+    public static void set(Map<String, UIActionVO> data){
+        LOCAL.set(data);
+    }
+
+    public static Map<String, UIActionVO> get(){
+        return LOCAL.get();
+    }
+    public static void remove(){
+        LOCAL.remove();
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPvolumesServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPvolumesServiceI.java
new file mode 100644
index 0000000..1967c05
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPvolumesServiceI.java
@@ -0,0 +1,37 @@
+package com.vci.web.service;
+
+import com.vci.corba.common.PLException;
+import com.vci.dto.*;
+import com.vci.starter.web.pagemodel.BaseResult;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 鏂囦欢鏌滅鐞嗙殑鏈嶅姟
+ * @author yuxc
+ * @date 2024-10-14
+ */
+public interface OsPvolumesServiceI {
+    /**
+     * 鍒嗛〉鏌ヨ鍗�
+     * @param pageSize 椤垫暟
+     * @param pageIndex 绗嚑椤�
+     * @return 鍒嗛〉鏁版嵁
+     */
+    BaseResult getPvolumesPage(short pageSize, short pageIndex) throws PLException;
+    /**
+     * 澧炲姞鍗�
+     * @param dto 鍗风殑浼犺緭淇℃伅
+     * @return 淇濆瓨缁撴灉
+     */
+    BaseResult savePvolume(OsPvolumeDTO dto) throws PLException;
+    /**
+     * 淇敼鍗�
+     * @param dto 鍗风殑浼犺緭淇℃伅
+     * @return 淇敼缁撴灉
+     */
+    BaseResult updatePvolume(OsPvolumeDTO dto) throws PLException;
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPvolumesServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPvolumesServiceImpl.java
new file mode 100644
index 0000000..c32a05a
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPvolumesServiceImpl.java
@@ -0,0 +1,154 @@
+package com.vci.web.service.impl;
+
+import cn.hutool.core.io.FileUtil;
+import com.vci.constant.FrameWorkLangCodeConstant;
+import com.vci.corba.common.PLException;
+import com.vci.corba.common.data.UserEntityInfo;
+import com.vci.corba.framework.data.PvolumeInfo;
+import com.vci.corba.portal.data.Constraint;
+import com.vci.corba.portal.data.PLAction;
+import com.vci.corba.portal.data.PLActionCls;
+import com.vci.corba.portal.data.PLActionParam;
+import com.vci.dto.*;
+import com.vci.starter.poi.bo.WriteExcelData;
+import com.vci.starter.poi.bo.WriteExcelOption;
+import com.vci.starter.poi.util.ExcelUtil;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.util.ControllerUtil;
+import com.vci.starter.web.util.LangBaseUtil;
+import com.vci.starter.web.util.LocalFileUtil;
+import com.vci.web.enumpck.ActionEnum;
+import com.vci.web.enumpck.PlTypetypeEnum;
+import com.vci.web.other.ExportActionLogBean;
+import com.vci.web.other.ExportBeans;
+import com.vci.web.service.OsActionServiceI;
+import com.vci.web.service.OsPvolumesServiceI;
+import com.vci.web.util.Func;
+import com.vci.web.util.PinyinCommon;
+import com.vci.web.util.PlatformClientUtil;
+import com.vci.web.util.WebUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 鏂囦欢鏌滅鐞嗙殑鏈嶅姟瀹炵幇绫�
+ * @author yuxc
+ * @date 2024-10-14
+ */
+@Service
+public class OsPvolumesServiceImpl implements OsPvolumesServiceI {
+
+    @Autowired
+    private PlatformClientUtil platformClientUtil;
+
+    /**
+     * 鍒嗛〉鏌ヨ鍗�
+     * @param pageSize 椤垫暟
+     * @param pageIndex 绗嚑椤�
+     * @return 鍒嗛〉鏁版嵁
+     */
+    @Override
+    public BaseResult getPvolumesPage(short pageSize, short pageIndex) throws PLException {
+        PvolumeInfo[] pvolumesPage = platformClientUtil.getFrameworkService().getPvolumesPage(pageSize, pageIndex);
+
+        List<OsPvolumeDTO> pvs = new ArrayList<>();
+        for (PvolumeInfo pvolumeInfo : pvolumesPage) {
+            OsPvolumeDTO osPvolumeDTO = new OsPvolumeDTO();
+            osPvolumeDTO = tranferCorbaObjToPvolume(pvolumeInfo);
+            pvs.add(osPvolumeDTO);
+        }
+        return BaseResult.dataList(pvs);
+    }
+
+    @Override
+    public BaseResult savePvolume(OsPvolumeDTO dto) throws PLException {
+        PvolumeInfo pvoInfo = new PvolumeInfo();
+        pvoInfo.service = dto.getService();
+        pvoInfo.id = dto.getId();
+        pvoInfo.name = dto.getName();
+        pvoInfo.host = dto.getHost();
+        pvoInfo.isvalid = dto.isIsvalid();
+        pvoInfo.path = dto.getPath();
+        //鍗锋湇鍔$被鍨嬶紝鏈哄櫒绫诲瀷
+        pvoInfo.type = dto.getType();
+        UserEntityInfo userInfo = new UserEntityInfo();
+        userInfo.setUserName(WebUtil.getCurrentUserId());
+        userInfo.setModules("com.vci.client.framework.systemConfig.volumn.PvolumePanel");
+        if(pvoInfo.isvalid){
+            PvolumeInfo[] allPvolumes = platformClientUtil.getFrameworkService().getAllPvolumes();
+            if(allPvolumes.length > 0){
+//                灏嗗叾浠栧嵎璁剧疆涓洪潪棣栭�夊嵎 0
+                platformClientUtil.getFrameworkService().updatePvolumeInvalid(userInfo);
+            }
+        }
+        String id= platformClientUtil.getFrameworkService().savePvolume(pvoInfo, userInfo);
+        if(StringUtils.isBlank(id)){
+            return BaseResult.fail("淇濆瓨澶辫触锛�");
+        }
+        return BaseResult.success("淇濆瓨鎴愬姛锛�");
+    }
+
+    @Override
+    public BaseResult updatePvolume(OsPvolumeDTO dto) throws PLException {
+        PvolumeInfo pvoInfo = new PvolumeInfo();
+        pvoInfo.service = StringUtils.isBlank(dto.getService()) ? "" : dto.getService();
+        pvoInfo.id = StringUtils.isBlank(dto.getId()) ? "" : dto.getId();
+        pvoInfo.name = StringUtils.isBlank(dto.getName()) ? "" : dto.getName();
+        pvoInfo.host = StringUtils.isBlank(dto.getHost()) ? "" : dto.getHost();
+        pvoInfo.isvalid = dto.isIsvalid();
+        pvoInfo.path = StringUtils.isBlank(dto.getPath()) ? "" : dto.getPath();
+        //鍗锋湇鍔$被鍨嬶紝鏈哄櫒绫诲瀷
+        pvoInfo.type = dto.getType();
+
+        if(StringUtils.isBlank(pvoInfo.service) || StringUtils.isBlank(pvoInfo.name) || StringUtils.isBlank(pvoInfo.path)){
+            throw new PLException("500", new String[]{"瀛楁鏈嶅姟鍚嶃�佸嵎鍚嶇О銆佸嵎鏈嶅姟璺緞涓嶈兘涓虹┖锛�"});
+        }
+        PvolumeInfo[] allPvo = platformClientUtil.getFrameworkService().getAllPvolumes();
+        Map<String, PvolumeInfo> pvInfoMap = Arrays.stream(allPvo).collect(Collectors.toMap(e -> e.id, e -> e));
+        //濡傛灉鏄杩涜淇敼锛屽悕绉颁笉鍙樼殑鎯呭喌涓嬪彲浠ユ垚鍔熶慨鏀癸紝杩欑鎯呭喌涓嬩笉鏄悕绉伴噸澶嶃��
+        if(pvInfoMap.get(pvoInfo.id) == null){
+            throw new PLException("500", new String[]{"鏈煡璇㈠埌鐩稿叧鏁版嵁璇烽噸鏂版搷浣滐紒"});
+        }
+        if ( allPvo.length == 1 && !pvoInfo.isvalid){
+            throw new PLException("500", new String[]{"浠呬竴鏉℃暟鎹渶璁剧疆涓洪閫夎矾寰�"});
+        }
+        UserEntityInfo userInfo = new UserEntityInfo();
+        userInfo.setUserName(WebUtil.getCurrentUserId());
+        userInfo.setModules("com.vci.client.framework.systemConfig.volumn.PvolumePanel");
+        if(pvoInfo.isvalid && allPvo.length > 0){
+//                灏嗗叾浠栧嵎璁剧疆涓洪潪棣栭�夊嵎 0
+            platformClientUtil.getFrameworkService().updatePvolumeInvalid(userInfo);
+        }
+        boolean b = platformClientUtil.getFrameworkService().updatePvolume(pvoInfo, userInfo);
+        if(!b){
+            return BaseResult.fail("淇敼澶辫触锛�");
+        }
+        return BaseResult.success("淇敼鎴愬姛锛�");
+    }
+
+    /**
+     * 鍗� 浠嶤orba绔浆鍒癏ibernate瀵硅薄绔�
+     * @param pvoInfo
+     * @return
+     */
+    private OsPvolumeDTO tranferCorbaObjToPvolume(PvolumeInfo pvoInfo) {
+        OsPvolumeDTO obj = new OsPvolumeDTO();
+        obj.setId(pvoInfo.id);
+        obj.setName(pvoInfo.name);
+        obj.setHost(pvoInfo.host);
+        obj.setService(pvoInfo.service);
+        obj.setType(pvoInfo.type);
+        obj.setPath(pvoInfo.path);
+        obj.setIsvalid(pvoInfo.isvalid);
+        return obj;
+    }
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java
index f2b6086..a91ac07 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java
@@ -16,6 +16,7 @@
 import com.vci.web.enumpck.UIComponentTypeEnum;
 import com.vci.web.enumpck.UIFieldTypeEnum;
 import com.vci.web.enumpck.UILayoutAreaTypeEnum;
+import com.vci.web.other.AllActionThreadLocal;
 import com.vci.web.service.OsAttributeServiceI;
 import com.vci.web.service.OsBtmServiceI;
 import com.vci.web.service.UIEngineServiceI;
@@ -1080,6 +1081,11 @@
 		Map<String, OsAttributeVO> attributeVOMap;
 		if(pages != null && pages.size() > 0){
 			attributeVOMap = attrService.selectAllAttributeMap();
+			Map<String, UIActionVO> actionVOMap = AllActionThreadLocal.get();
+			if(actionVOMap == null || actionVOMap.isEmpty()){
+				actionVOMap = selectAllActionMap();
+				AllActionThreadLocal.set(actionVOMap);
+			}
 		}else{
 			attributeVOMap = null;
 		}
@@ -1097,6 +1103,7 @@
 				}
 			});
 		}
+		AllActionThreadLocal.remove();
 		return contentVOS;
 	}
 
@@ -1456,9 +1463,15 @@
 	public List<UIButtonDefineVO> buttonDO2VOs(Collection<com.vci.corba.portal.data.PLTabButton> buttons){
 		List<UIButtonDefineVO> buttonDefineVOS = new ArrayList<>();
 		if(buttons != null && buttons.size() > 0){
-			Map<String, UIActionVO> actionVOMap = self.selectAllActionMap();
+//			Map<String, UIActionVO> actionVOMap = self.selectAllActionMap();
+			Map<String, UIActionVO> actionVOMap = null;
+			actionVOMap = AllActionThreadLocal.get();
+			if(actionVOMap == null ){
+				actionVOMap = self.selectAllActionMap();
+			}
+			Map<String, UIActionVO> finalActionVOMap = actionVOMap;
 			Optional.ofNullable(buttons).orElseGet(()->new ArrayList<>()).stream().forEach(button->{
-				buttonDefineVOS.add(buttonDO2VO(button, actionVOMap));
+				buttonDefineVOS.add(buttonDO2VO(button, finalActionVOMap));
 			});
 		}
 

--
Gitblit v1.9.3