diff --git a/designer-base/src/main/java/com/fr/design/actions/file/LocalePane.java b/designer-base/src/main/java/com/fr/design/actions/file/LocalePane.java index 843b3bf724..634af28b9e 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/LocalePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/LocalePane.java @@ -12,7 +12,6 @@ import com.fr.design.gui.itextfield.UITextField; import com.fr.file.filetree.FileNode; import com.fr.general.GeneralUtils; -import com.fr.general.Inter; import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; @@ -122,7 +121,7 @@ public class LocalePane extends BasicPane { private void initPredefinedProperties() { - Map supportLocaleMap = Inter.getSupportLocaleMap(); + Map supportLocaleMap = InterProviderFactory.getProvider().getSupportLocaleMap(); // richie:暂时去掉设计器中国际化键值对的显示 Map map = new HashMap<>(); diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 840de5867b..46485409bb 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -46,6 +46,7 @@ import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.general.log.Log4jConfig; import com.fr.io.attr.ImageExportAttr; +import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.report.ReportConfigManager; import com.fr.stable.Constants; @@ -633,7 +634,7 @@ public class PreferencePane extends BasicPane { } private UIDictionaryComboBox createLanguageComboBox() { - Map map = Inter.getSupportLocaleMap(); + Map map = InterProviderFactory.getProvider().getSupportLocaleMap(); int size = map.size(); Locale[] keys = new Locale[size]; String[] values = new String[size]; 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 5c2b42c257..4fca1b49f0 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 @@ -83,7 +83,7 @@ public class TableDataPreviewDesensitizeManager implements DesensitizationManage Collection desensitizationItems = ((DesensitizationTableData) tableData).getDesensitizationConfig().getDesensitizationItems(); if (DesentizationUtils.isCollectionNotEmpty(desensitizationItems)) { // 更新规则 - desensitizationItems = TableDataDesensitizeManager.getInstance().dealWithLastedRules(desensitizationItems); + desensitizationItems = TableDataDesensitizeManager.getInstance().dealWithlatestRules(desensitizationItems); // 对脱敏配置项集合做过滤和排序处理 List items = desensitizationItems.stream() .filter(item -> isAvaliableItem4Preview(item, model)) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleChoosePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleChoosePane.java index 3b44c0b187..419299336e 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleChoosePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleChoosePane.java @@ -28,6 +28,7 @@ import java.awt.Component; import java.awt.event.ActionEvent; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -48,7 +49,10 @@ public class DesensitizationRuleChoosePane extends JPanel { private DesensitizationRuleSource currentRuleSource; - public DesensitizationRuleChoosePane() { + private Map> latestRules; + + public DesensitizationRuleChoosePane(Map> latestRules) { + this.latestRules = latestRules; this.cardLayout = new CardLayout(); this.setLayout(cardLayout); serverRuleEditPane = new UITableEditorPane<>(new DesensitizationRuleChooseTableModel(this, true)); @@ -76,8 +80,8 @@ public class DesensitizationRuleChoosePane extends JPanel { * 展示当前规则 */ private void populateDesensitizationRules() { - serverRuleEditPane.populate(DesensitizationRuleManager.getInstance().getRules(DesensitizationRuleSource.SERVER)); - customRuleEditPane.populate(DesensitizationRuleManager.getInstance().getRules(DesensitizationRuleSource.CUSTOM)); + serverRuleEditPane.populate(latestRules.get(DesensitizationRuleSource.SERVER).values().toArray(new DesensitizationRule[0])); + customRuleEditPane.populate(latestRules.get(DesensitizationRuleSource.CUSTOM).values().toArray(new DesensitizationRule[0])); } /** @@ -143,7 +147,7 @@ public class DesensitizationRuleChoosePane extends JPanel { return DesensitizationRule.getDescription(rule); case 3: // 脱敏规则状态 - DesensitizationRuleStatus ruleStatus = DesensitizationRuleManager.getInstance().getRuleStatus(rule); + DesensitizationRuleStatus ruleStatus = DesensitizationRuleManager.getInstance().getRuleStatus(rule, latestRules); // 非正常状态需要标记为异常 return ruleStatus == DesensitizationRuleStatus.NORMAL ? StringUtils.EMPTY : Toolkit.i18nText("Fine-Design_Report_Desensitization_Rule_Status_Abnormal"); default: @@ -192,7 +196,7 @@ public class DesensitizationRuleChoosePane extends JPanel { * @param rule */ public void refreshRuleStatus(DesensitizationRule rule) { - DesensitizationRuleStatus ruleStatus = DesensitizationRuleManager.getInstance().getRuleStatus(rule); + DesensitizationRuleStatus ruleStatus = DesensitizationRuleManager.getInstance().getRuleStatus(rule, latestRules); if (ruleStatus == DesensitizationRuleStatus.NORMAL) { // 正常规则时,重置提示Label this.ruleStatusLabel.setText(StringUtils.EMPTY); diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleEditPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleEditPane.java index b3c0d2615a..5a0515a59e 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleEditPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleEditPane.java @@ -159,15 +159,15 @@ public class DesensitizationRuleEditPane extends BasicBeanPane */ private DesensitizationRuleChoosePane ruleChoosePane; + /** + * 最新的所有规则 + */ + private Map> latestRules; + /** * 内容面板 */ private JPanel contentPane; - public DesensitizationRulePane() { + public DesensitizationRulePane(Map> latestRules) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.latestRules = latestRules; initPane(); } @@ -47,7 +54,7 @@ public class DesensitizationRulePane extends BasicBeanPane // 规则来源选择Pane ruleSourceChoosePane = new DesensitizationRuleSourceChoosePane(this); // 规则选择Pane - ruleChoosePane = new DesensitizationRuleChoosePane(); + ruleChoosePane = new DesensitizationRuleChoosePane(latestRules); contentPane.add(ruleSourceChoosePane, BorderLayout.NORTH); contentPane.add(ruleChoosePane, BorderLayout.CENTER); } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java index e70f5e2cea..f050e4b0cd 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java @@ -4,8 +4,8 @@ import com.fr.data.desensitize.base.DesensitizationTableData; import com.fr.data.desensitize.base.TableDataDesensitizationItem; 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.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; @@ -20,7 +20,6 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import org.jetbrains.annotations.Nullable; @@ -29,7 +28,6 @@ import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.SwingUtilities; -import javax.swing.SwingWorker; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; import javax.swing.table.TableCellEditor; @@ -72,11 +70,16 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter roleMap = new LinkedHashMap<>(); + private Map roleMap = new LinkedHashMap<>(); + + /** + * 当前最新的所有规则 + */ + private Map> latestRules = new LinkedHashMap<>(); private Component parent; - public TableDataDesensitizationTableModel(DesensitizationTableData tableData, Component parent) { + public TableDataDesensitizationTableModel(DesensitizationTableData tableData, Component parent, List columnNames, Map roleMap, Map> latestRules) { // table相关 super(new String[]{ Toolkit.i18nText("Fine-Design_Report_Desensitization_Column"), @@ -86,6 +89,17 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter() { - - @Override - protected Void doInBackground() throws Exception { - // 获取当前数据集的所有列名 - columnNames.addAll(TableDataPreviewDesensitizeManager.getInstance().getColumnNamesByTableData(tableData)); - // 获取当前所有用户组 - roleMap.putAll(TableDataPreviewDesensitizeManager.getInstance().getAllRoles()); - return null; - } - - @Override - protected void done() { - try { - // 更新列名选择框和生效用户组选择框 - columnNamesComboBox.refresh(); - effectedRolesChooser.refresh(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e, "[Desensitization] get column names or all roles failed for {}", e.getMessage()); - } - } - }.execute(); - } @Override @@ -231,14 +220,6 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter iterator = items.iterator(); while (iterator.hasNext()) { TableDataDesensitizationItem item = iterator.next(); - DesensitizationRuleStatus ruleStatus = DesensitizationRuleManager.getInstance().getRuleStatus(item.getRule()); + DesensitizationRuleStatus ruleStatus = DesensitizationRuleManager.getInstance().getRuleStatus(item.getRule(), latestRules); if (ruleStatus == DesensitizationRuleStatus.REMOVED) { // 规则被移除,则删除整条脱敏Item iterator.remove(); } else { // 规则被修改、禁用等,更新一下规则 - item.setRule(DesensitizationRuleManager.getInstance().getLastedDesentizationRule(item.getRule())); + item.setRule(DesensitizationRuleManager.getInstance().getLastedDesentizationRule(item.getRule(), latestRules)); } } fireTableDataChanged(); @@ -629,7 +603,7 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter editorPane; + private static final String LOADING_PANE = "loading"; + private static final String CONTENT_PANE = "content"; + + private CardLayout card; + + private JPanel loadingPane; + + private JPanel contentPane; + public TableDataDesensitizationTablePane(DesensitizationTableData tableData, Component parent) { this.tableData = tableData; this.parent = parent; @@ -41,10 +62,65 @@ public class TableDataDesensitizationTablePane extends JPanel { } private void initComponent() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.editorPane = new UITableEditorPane<>(new TableDataDesensitizationTableModel(tableData, parent)); - this.editorPane.setHeaderResizing(false); - this.add(editorPane, BorderLayout.CENTER); + + card = new CardLayout(); + this.setLayout(card); + // 初始化Loading面板 + loadingPane = new TipsPane(true); + this.add(LOADING_PANE, loadingPane); + switchTo(LOADING_PANE); + + // 在SwingWorker中初始化Content面板并切换 + initContent(); + } + + /** + * 初始化内容面板 + * 考虑到远程设计下的性能,需要限制查询数据库的次数,所以这里查一次,之后子面板内复用 + */ + private void initContent() { + final List columnNames = new ArrayList<>(); + final Map roleMap = new LinkedHashMap<>(); + final Map> latestRules = new LinkedHashMap<>(); + new SwingWorker() { + + @Override + protected Void doInBackground() throws Exception { + // 获取当前数据集的所有列名 + columnNames.addAll(TableDataPreviewDesensitizeManager.getInstance().getColumnNamesByTableData(tableData)); + // 获取当前所有用户组 + roleMap.putAll(TableDataPreviewDesensitizeManager.getInstance().getAllRoles()); + // 获取当前最新的所有规则 + latestRules.putAll(DesensitizationRuleManager.getInstance().getAllRules()); + return null; + } + + @Override + protected void done() { + contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + editorPane = new UITableEditorPane<>(new TableDataDesensitizationTableModel(tableData, parent, columnNames, roleMap, latestRules)); + editorPane.setHeaderResizing(false); + editorPane.populate(tableData.getDesensitizationConfig().getDesensitizationItems().toArray(new TableDataDesensitizationItem[0])); + contentPane.add(editorPane, BorderLayout.CENTER); + add(CONTENT_PANE, contentPane); + switchTo(CONTENT_PANE); + } + }.execute(); + } + + /** + * 切换面板 + * + * @param panelName + */ + public void switchTo(String panelName) { + try { + if (panelName != null) { + card.show(this, panelName); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } } /** @@ -54,13 +130,22 @@ public class TableDataDesensitizationTablePane extends JPanel { */ public void populateDesensitizationSetting(DesensitizationTableData tableData) { this.tableData = tableData; - editorPane.populate(tableData.getDesensitizationConfig().getDesensitizationItems().toArray(new TableDataDesensitizationItem[0])); + if (editorPane != null) { + // editorPane的初始化在SwingWorker中完成,这里做个判空 + editorPane.populate(tableData.getDesensitizationConfig().getDesensitizationItems().toArray(new TableDataDesensitizationItem[0])); + } } /** * 获取当前对TableData的配置脱敏规则信息 */ public List updateDesensitizationSetting() { - return editorPane.update(); + + return editorPane == null ? + new ArrayList<>() : + editorPane.update() + .stream() + .filter(item -> TableDataDesensitizationItem.valid(item)) + .collect(Collectors.toList()); } } diff --git a/designer-base/src/main/java/com/fr/design/record/analyzer/DesignerAnalyzerActivator.java b/designer-base/src/main/java/com/fr/design/record/analyzer/DesignerAnalyzerActivator.java index 8a23e6fe0e..087a656ba6 100644 --- a/designer-base/src/main/java/com/fr/design/record/analyzer/DesignerAnalyzerActivator.java +++ b/designer-base/src/main/java/com/fr/design/record/analyzer/DesignerAnalyzerActivator.java @@ -18,6 +18,7 @@ import com.fr.event.Null; import com.fr.intelli.metrics.Compute; import com.fr.intelli.record.Focus; import com.fr.intelli.record.PerformancePoint; +import com.fr.jvm.assist.FineAssist; import com.fr.module.Activator; import com.fr.module.extension.Prepare; import com.fr.record.analyzer.AnalyzerConfiguration; @@ -57,7 +58,7 @@ public class DesignerAnalyzerActivator extends Activator implements Prepare { List backwardsConfigurations = findMutableBackwards(AnalyzerKey.KEY); if (!CollectionUtils.isEmpty(backwardsConfigurations)) { // 直接初始化,不添加默认值,防止和下面的冲突 - FineAnalyzer.initDirectly(basicFactory, backwardsConfigurations.toArray(new AnalyzerConfiguration[0])); + FineAnalyzer.initDirectly(FineAssist.findInstrumentation(), basicFactory, backwardsConfigurations.toArray(new AnalyzerConfiguration[0])); } // 等页面完全打开后,再进行 retransform, 别影响了启动速度 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 49d32e7b2d..eebb6d0cce 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 @@ -136,7 +136,7 @@ public class DesensitizationCellPane extends BasicBeanPane { @Override public void actionPerformed(ActionEvent e) { CellDesensitizationBean selectBean = model.getSelectedValue(); - DesensitizationRulePane rulePane = new DesensitizationRulePane(); + DesensitizationRulePane rulePane = new DesensitizationRulePane(new HashMap<>()); BasicDialog ruleDialog = rulePane.showWindowWithCustomSize(SwingUtilities.getWindowAncestor(parent), new DialogActionAdapter() { @Override