diff --git a/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java b/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java index fa1fe545ed..b3c090d549 100644 --- a/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java +++ b/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java @@ -378,12 +378,8 @@ public abstract class BasicTableDataTreePane extends DockingView implements Resp protected boolean isDsNameRepeaded(String name) { allDSNames = DesignTableDataManager.getAllDSNames(tc.getBook()); - for (int i = 0; i < allDSNames.length; i++) { - if (ComparatorUtils.equals(name, allDSNames[i])) { - return true; - } - } - return false; + Set allDSNamesWithoutPermissions = DesignTableDataManager.getAllDSNamesWithoutPermissions(tc.getBook()); + return allDSNamesWithoutPermissions.contains(name); } protected KeyAdapter getTableTreeNodeListener(final UpdateAction editAction, final UpdateAction previewTableDataAction, final UpdateAction removeAction, final TableDataSourceOP op, final TableDataTree dataTree) { diff --git a/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java b/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java index e18b2a47d3..5134e88c8b 100644 --- a/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java +++ b/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java @@ -48,6 +48,7 @@ import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -295,6 +296,27 @@ public abstract class DesignTableDataManager { return list.toArray(new String[0]); } + /** + * 获取所有的数据集名称,无论模板是不是有数据集的权限 + */ + public static Set getAllDSNamesWithoutPermissions(TableDataSource source) { + Set names = new HashSet<>(); + Map resMap = new HashMap<>(); + // 模板数据集 + addTemplateData(resMap, source); + // 存储过程 + addStoreProcedureData(resMap); + for (Map.Entry entry : resMap.entrySet()) { + names.add(entry.getKey()); + } + //服务器数据集 + Map tableDatas = TableDataConfig.getInstance().getTableDatas(); + for (Map.Entry entry : tableDatas.entrySet()) { + names.add(entry.getKey()); + } + return names; + } + /** * 不根据过滤设置,返回当前模板数据集、服务器数据集、存储过程本身,是有顺序的 */ diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java index eaa4c37d8d..0e0a655a08 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java @@ -22,7 +22,6 @@ import com.fr.file.ConnectionConfig; import com.fr.file.ConnectionOperator; import com.fr.general.NameObject; import com.fr.log.FineLoggerFactory; -import com.fr.regist.FRCoreContext; import com.fr.stable.ArrayUtils; import com.fr.stable.Nameable; import com.fr.stable.StringUtils; @@ -30,6 +29,7 @@ import com.fr.stable.core.PropertyChangeAdapter; import com.fr.transaction.Configurations; import com.fr.transaction.WorkerFacade; import com.fr.workspace.WorkContext; +import com.fr.workspace.server.database.DataBaseTypeOperator; import java.awt.Window; import java.sql.SQLException; @@ -115,6 +115,8 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh /** * 创建菜单项 + *

+ * 方法中获取limitDatabaseType使用了远程rpc调用,可能会比较耗时 * * @return 菜单项 */ @@ -132,8 +134,8 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh DatabaseConnectionPane.JNDI.class ); NameableCreator[] creators; - if (FRCoreContext.getLicense().limitDatabaseType()) { - // 不支持JDNI,屏蔽接口 + if (WorkContext.getCurrent().get(DataBaseTypeOperator.class).limitDatabaseType()) { + // 不支持JNDI,屏蔽接口 creators = new NameableCreator[]{jdbc}; } else { creators = new NameableCreator[]{jdbc, jndi}; diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionManagerPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionManagerPane.java index 0c1d88022e..2641452218 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionManagerPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionManagerPane.java @@ -1,14 +1,17 @@ package com.fr.design.data.datapane.connect; import com.fr.data.impl.Connection; +import com.fr.data.impl.JDBCDatabaseConnection; import com.fr.design.gui.frpane.LoadingBasicPane; import com.fr.design.gui.ilist.ListModelElement; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.file.ConnectionConfig; import com.fr.general.NameObject; -import com.fr.license.database.DatabaseTypeValidateUtil; import com.fr.license.exception.DataBaseNotSupportedException; import com.fr.stable.Nameable; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.database.DataBaseTypeOperator; +import com.fr.workspace.server.database.DatabaseResultBean; import javax.swing.JPanel; import java.awt.BorderLayout; @@ -73,14 +76,13 @@ public class ConnectionManagerPane extends LoadingBasicPane implements Connectio ListModelElement selectedValue = this.connectionListPane.getSelectedValue(); if (selectedValue != null) { Nameable wrapper = selectedValue.wrapper; - try { - Connection connection = (Connection) ((NameObject) wrapper).getObject(); - DatabaseTypeValidateUtil.validateDatabaseType(connection.getDriver(), connection.feature()); - } catch (DataBaseNotSupportedException e) { - // 仅抛出数据库类型不支持异常 - throw e; - } catch (Exception e) { - // ignore + Connection connection = (Connection) ((NameObject) wrapper).getObject(); + // 仅校验jdbc连接,其他插件数据连接不进行校验 + if (connection instanceof JDBCDatabaseConnection) { + DatabaseResultBean bean = WorkContext.getCurrent().get(DataBaseTypeOperator.class).validateDatabaseType(connection.getDriver(), connection.feature()); + if (bean.equals(DatabaseResultBean.DefaultBean())) { + throw new DataBaseNotSupportedException(bean.getMsg()); + } } } } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java index 4fca1b49f0..abd5a4d166 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java @@ -124,80 +124,6 @@ public class TableDataPreviewDesensitizeManager implements DesensitizationManage return Collections.EMPTY_LIST; } - /** - * 这个api会返回 部门职位 + 自定义角色 的Map - * 其中 key为 "pid" + "_" + "id",value为 "ptext" + "text" - * - * @return - */ - public Map getAllRoles() { - Map rolesMap = new LinkedHashMap<>(); - // 处理部门职位相关的用户组 - addDepartmentAndPositionRoles2Map(rolesMap); - // 处理自定义角色相关的用户组 - addCustomRoles2Map(rolesMap); - return rolesMap; - } - - /** - * 获取所有的部门职位,按照 key为 "pid" + "_" + "id",value为 "ptext" + "text"的格式添加到参数Map中 - * - * @param rolesMap - */ - private void addDepartmentAndPositionRoles2Map(Map rolesMap) { - try { - List postBeans = PositionService.getInstance().getDepartmentPostNameList(); - for (DepartmentPostBean postBean : postBeans) { - String department = postBean.getpText(); - String position = postBean.getText(); - String departmentId = postBean.getpId(); - String positionId = postBean.getId(); - if (!ComparatorUtils.equals(DecisionServiceConstants.DECISION_DEP_ROOT, postBean.getId()) && StringUtils.isNotEmpty(position)) { - // 只添加部门和职位同时存在的 - rolesMap.put(mergeRoleId(departmentId, positionId), mergeRoleText(department, position)); - } - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e, "[Desensitization] failed to add department and position roles to map for {}", e.getMessage()); - } - } - - /** - * 获取所有的自定义角色,按照 id - name添加到参数map里 - * - * @param rolesMap - */ - private void addCustomRoles2Map(Map rolesMap) { - try { - List allCustomRole = CustomRoleService.getInstance().getAllCustomRoleNameList(null); - allCustomRole.forEach(roleBean -> rolesMap.put(roleBean.getId(), roleBean.getText())); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e, "[Desensitization] failed to add custom role to map for {}", e.getMessage()); - } - } - - /** - * 合并部门 + 职位的名称 - * - * @param departmentName - * @param positionName - * @return - */ - private String mergeRoleText(String departmentName, String positionName) { - return departmentName + positionName; - } - - /** - * 合并部门 + 职位的id - * - * @param departmentId - * @param positionId - * @return - */ - private String mergeRoleId(String departmentId, String positionId) { - return departmentId + CONNECTOR + positionId; - } - /** * 根据列名,从PreviewTableModel中匹配列序号,如果返回-1代表未匹配到 * @param desensitizationItem diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTablePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTablePane.java index a2fe6529c0..6473a02d07 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTablePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTablePane.java @@ -1,5 +1,6 @@ package com.fr.design.data.datapane.preview.desensitization.view.setting; +import com.fr.base.operator.org.OrganizationOperator; import com.fr.data.desensitize.base.DesensitizationTableData; import com.fr.data.desensitize.base.TableDataDesensitizationItem; import com.fr.data.desensitize.rule.DesensitizationRuleManager; @@ -10,6 +11,7 @@ import com.fr.design.data.tabledata.tabledatapane.loading.TipsPane; import com.fr.design.gui.itableeditorpane.UITableEditorPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.log.FineLoggerFactory; +import com.fr.workspace.WorkContext; import javax.swing.JPanel; import javax.swing.SwingWorker; @@ -89,7 +91,7 @@ public class TableDataDesensitizationTablePane extends JPanel { // 获取当前数据集的所有列名 columnNames.addAll(TableDataPreviewDesensitizeManager.getInstance().getColumnNamesByTableData(tableData)); // 获取当前所有用户组 - roleMap.putAll(TableDataPreviewDesensitizeManager.getInstance().getAllRoles()); + roleMap.putAll(WorkContext.getCurrent().get(OrganizationOperator.class).getAllRoles4Desensitization()); // 获取当前最新的所有规则 latestRules.putAll(DesensitizationRuleManager.getInstance().getAllRules()); return null; diff --git a/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java b/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java index feb1e696fd..1bcfe3c622 100644 --- a/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java +++ b/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java @@ -28,6 +28,7 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.collections.CollectionUtils; import com.fr.stable.project.ProjectConstants; +import com.fr.workspace.WorkContext; import javax.swing.BorderFactory; import javax.swing.JDialog; @@ -229,7 +230,13 @@ public class DefaultTemplateTreeDefineProcessor extends AbstractTemplateTreeDefi } //确定目标目录并检查权限 FileOperations selectedOperation = DesignerFrameFileDealerPane.getInstance().getSelectedOperation(); - if (!selectedOperation.access()) { + boolean rootAuthority = true; + if (selectedOperation.getFileNode() == null && selectedOperation instanceof TemplateTreePane) { + //没有选中文件节点时,默认粘贴到根目录下,所以直接检测根目录是否有权限 + ExpandMutableTreeNode root = (ExpandMutableTreeNode) ((TemplateTreePane) selectedOperation).getTemplateFileTree().getModel().getRoot(); + rootAuthority = root.hasFullAuthority(); + } + if (!rootAuthority && !selectedOperation.access()) { FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Template_Permission_Denied"), Toolkit.i18nText("Fine-Design_Basic_Alert"), diff --git a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java index 18abbb7e28..d985595f5f 100644 --- a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java +++ b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java @@ -307,10 +307,11 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (reportletsTree.getSelectionCount() == 0) { //没选中文件刷新根目录 reportletsTree.refresh(); + return; } reportletsTree.refreshParent(Objects.requireNonNull(reportletsTree.getSelectionPath())); DesignerFrameFileDealerPane.getInstance().refreshRightToolBarBy(null); - FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Template_File_Tree_Refresh_Successfully") + "!"); + FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Template_File_Tree_Refresh_Successfully")); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/CellDesensitizationTableModel.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/CellDesensitizationTableModel.java index f73b344a80..dcc1232396 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/CellDesensitizationTableModel.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/CellDesensitizationTableModel.java @@ -99,11 +99,10 @@ public class CellDesensitizationTableModel extends UITableModelAdapter, Void> updateDateWorker = new UpdateDataWorker(); + updateDateWorker.execute(); editPane.populate((CellDesensitizationBean) value, row); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/DesensitizationCellPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/DesensitizationCellPane.java index eebb6d0cce..818a26205d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/DesensitizationCellPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/DesensitizationCellPane.java @@ -1,14 +1,16 @@ package com.fr.design.mainframe.cell.settingpane.desensitization.model; +import com.fr.base.operator.org.OrganizationOperator; import com.fr.data.desensitize.rule.DesensitizationRuleManager; import com.fr.data.desensitize.rule.base.DesensitizationRule; +import com.fr.data.desensitize.rule.base.DesensitizationRuleSource; import com.fr.data.desensitize.rule.base.DesensitizationRuleStatus; import com.fr.design.beans.BasicBeanPane; -import com.fr.design.data.datapane.preview.desensitization.TableDataPreviewDesensitizeManager; import com.fr.design.data.datapane.preview.desensitization.view.rule.DesensitizationRulePane; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.event.UIObserverListener; +import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icombocheckbox.UIComboCheckBox; import com.fr.design.gui.ilable.UILabel; @@ -18,13 +20,17 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.VerticalFlowLayout; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.JTemplateActionListener; import com.fr.report.cell.desensitization.CellDesensitizationBean; import com.fr.stable.StringUtils; import com.fr.third.org.apache.commons.collections4.map.HashedMap; +import com.fr.workspace.WorkContext; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.SwingUtilities; +import javax.swing.SwingWorker; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; @@ -37,6 +43,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.concurrent.ExecutionException; /** * 单元格脱敏规则设置面板 @@ -54,9 +61,11 @@ public class DesensitizationCellPane extends BasicBeanPane { private UITextField ruleTextField; private UIComboCheckBox rolesComboBox; private static final String APOSTROPHE = "..."; - private Map roleMap; private DesensitizationRule rule; + private static Map roleMap; + private static Map> latestRules; private CellDesensitizationTableModel model; + private static final CellDesensitizationBean EMPTY_BEAN = CellDesensitizationBean.createEmptyBean(); DesensitizationCellPane(Component parent, CellDesensitizationTableModel model) { @@ -87,6 +96,7 @@ public class DesensitizationCellPane extends BasicBeanPane { rolesComboBox = new RuleUIComboCheckBox(); rolesComboBox.setPlaceHolder(Toolkit.i18nText("Fine-Design_Report_Desensitization_Role_Place_Holder")); rolesComboBox.setEnabled(true); + latestRules = new HashMap<>(); emptyTextField = new UITextField(); emptyTextField.setEnabled(false); @@ -127,7 +137,7 @@ public class DesensitizationCellPane extends BasicBeanPane { Set roleIds = generateRolesIdsBySelectedValues(); if (Objects.nonNull(selectBean) && !selectBean.getRoleIds().equals(roleIds)) { selectBean.setRoleIds(generateRolesIdsBySelectedValues()); - model.fireAttrChanged(); + model.fireTableDataChanged(); } } }; @@ -135,8 +145,9 @@ public class DesensitizationCellPane extends BasicBeanPane { private final ActionListener chooseRuleListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { + CellDesensitizationBean selectBean = model.getSelectedValue(); - DesensitizationRulePane rulePane = new DesensitizationRulePane(new HashMap<>()); + DesensitizationRulePane rulePane = new DesensitizationRulePane(latestRules); BasicDialog ruleDialog = rulePane.showWindowWithCustomSize(SwingUtilities.getWindowAncestor(parent), new DialogActionAdapter() { @Override @@ -144,12 +155,8 @@ public class DesensitizationCellPane extends BasicBeanPane { rule = rulePane.updateBean(); if (Objects.nonNull(selectBean) && Objects.nonNull(rule) && !selectBean.getDesensitizationRule().equals(rule)) { selectBean.setDesensitizationRule(rule); - ruleTextField.setText(rule.getRuleName()); - - // 非正常状态需要颜色修改为红色 - refreshRuleState(selectBean); - model.fireAttrChanged(); + model.fireTableDataChanged(); } rule = null; } @@ -199,29 +206,41 @@ public class DesensitizationCellPane extends BasicBeanPane { refreshRoles(); - String ruleName = value.getDesensitizationRule().getRuleName(); - ruleTextField.setText(ruleName); - + refreshRuleText(value); // 非正常状态需要颜色修改为红色 refreshRuleState(value); Map map = generateRolesCheckBoxSelectedValues(value); rolesComboBox.setSelectedValues(map); - label.setText(Toolkit.i18nText("Fine-Design_Report_Desensitization_Setting") + row); + label.setText(Toolkit.i18nText("Fine-Design_Report_Desensitization_Setting") + (row + 1)); } - private void refreshRoles() { - Map roles = TableDataPreviewDesensitizeManager.getInstance().getAllRoles(); - if (!roleMap.equals(roles)) { - roleMap = roles; - rolesComboBox.refreshCombo(roles.values().toArray()); + /** + * 刷新规则文本 + * + * @param value + */ + private void refreshRuleText(CellDesensitizationBean value) { + ruleTextField.setText(StringUtils.EMPTY); + DesensitizationRule desensitizationRule = value.getDesensitizationRule(); + if (desensitizationRule != null) { + String ruleName = desensitizationRule.getRuleName(); + ruleTextField.setText(ruleName); } } + /** + * combobox组件刷新用户组信息 + */ + private void refreshRoles() { + rolesComboBox.clearText(); + rolesComboBox.refreshCombo(roleMap.values().toArray()); + } + private void refreshRuleState(CellDesensitizationBean value) { - DesensitizationRuleStatus ruleStatus = DesensitizationRuleManager.getInstance().getRuleStatus(value.getDesensitizationRule()); - if (value.equals(CellDesensitizationBean.createEmptyBean())) { + DesensitizationRuleStatus ruleStatus = DesensitizationRuleManager.getInstance().getRuleStatus(value.getDesensitizationRule(), latestRules); + if (EMPTY_BEAN.equals(value)) { ruleTextField.setForeground(Color.GRAY); } else if (ruleStatus != DesensitizationRuleStatus.NORMAL) { ruleTextField.setForeground(Color.RED); @@ -301,4 +320,13 @@ public class DesensitizationCellPane extends BasicBeanPane { return omitText.equals(StringUtils.EMPTY) ? text : omitText; } } + + /** + * 更新用户组和平台规则 + */ + public static void updateData(Map roleMap, Map> latestRules) { + DesensitizationCellPane.roleMap = roleMap; + DesensitizationCellPane.latestRules = latestRules; + } + } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/UpdateDataWorker.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/UpdateDataWorker.java new file mode 100644 index 0000000000..d60e9a2c82 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/UpdateDataWorker.java @@ -0,0 +1,47 @@ +package com.fr.design.mainframe.cell.settingpane.desensitization.model; + +import com.fr.base.operator.org.OrganizationOperator; +import com.fr.data.desensitize.rule.DesensitizationRuleManager; +import com.fr.data.desensitize.rule.base.DesensitizationRule; +import com.fr.data.desensitize.rule.base.DesensitizationRuleSource; +import com.fr.workspace.WorkContext; + +import javax.swing.SwingWorker; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +/** + * 刷新脱敏设置全局 roles 和 rules SwingWorker + * + * @author Leo.Qin + * @version 11.0 + * Created by Leo.Qin on 2023/1/5 + */ +public class UpdateDataWorker extends SwingWorker, Void> { + + private final String ROLE_KEY = "Roles"; + private final String RULE_KEY = "Rules"; + + @Override + protected Map doInBackground() { + Map result = new HashMap<>(); + Map allRoles = WorkContext.getCurrent().get(OrganizationOperator.class).getAllRoles4Desensitization(); + Map> allRules = DesensitizationRuleManager.getInstance().getAllRules(); + + result.put(ROLE_KEY, allRoles); + result.put(RULE_KEY, allRules); + + return result; + } + + @Override + protected void done() { + try { + Map result = get(); + DesensitizationCellPane.updateData((Map) result.get(ROLE_KEY), (Map>) result.get(RULE_KEY)); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } +}