Browse Source
* commit 'ec7d76bc4a425100f6b528e6bc15fdb85e36182d': REPORT-89167 && REPORT-83493 平台脱敏规则变动时的交互问题 【问题原因】与产品沟通修改成更容易理解的交互还有规则变动时的生效逻辑,大致如下: 1. 规则异常的提示放在数据集"数据脱敏设置"页面中,鼠标悬停"异常"文字时,出现气泡提示,气泡无法点击;"数据脱敏设置"页面中的规则表,表上增加刷新按钮,点击刷新后会刷新当前规则,刷新逻辑: 规则被禁用 ---- 原规则不变 规则被删除 ---- 原规则删除 规则被修改 ---- 原规则B被替换成B* 2. 假如模板中存在A、B平台规则,A规则正常,B规则被修改成了B*规则,此时不管是模板预览、数据集脱敏效果预览等计算相关的逻辑里,生效规则为A和B*。即计算场景里会自动替换被修改的规则 3. 上面的替换是临时替换,保存模板时并不会将B*写入模板xml中。仅在"数据脱敏设置"页面里,用户在点击"异常",弹窗提示出现后,再点击确定 + 保存模板时,才会修改模板xml文件 【改动方案】同上 【review建议】 REPORT-88365 决策报表,单元格插入数据列,单元格元素页面有异常 【问题原因】单选时默认将cellDSColumnAdvancedPane的visible设为true,导致显示异常 【改动思路】结合cellDSColumnAdvancedPane的原始visible状态及单元格的单选多选状态再进行设置 REPORT-88826 设计器新增不支持的数据库类型未受到限制 【问题原因】 【改动思路】新增数据连接时,点击确认后校验是否为受限制的数据库类型 REPORT-82899 数据脱敏三期 修改增加单元格脱敏属性的实现方式 REPORT-88365 决策报表,单元格插入数据列,单元格元素页面有异常 【问题原因】单选时默认将cellDSColumnAdvancedPane的visible设为true,导致显示异常 【改动思路】结合cellDSColumnAdvancedPane的原始visible状态及单元格的单选多选状态再进行设置 数据脱敏三期 【问题原因】rt 【改动思路】rt 顺便过一下开发文档 https://kms.fineres.com/pages/viewpage.action?pageId=576039082 REPORT-83773 && REPORT-83838 && REPORT-83716 && REPORT-83738 数据脱敏二期迭代bug 【问题原因】rt 【改动思路】主要是: 1. 添加埋点 2. 设计器端限制服务器数据集中脱敏配置的修改 3. 一些逻辑bug修改 【review建议】 REPORT-84645 lic限制数据库类型-报表配合 【问题原因】rt 【改动思路】设计器中测试数据库连接时,根据lic中数据库类型限制,给出相应的错误提示 REPORT-83316 && REPORT-83320 && REPORT-83488 && REPORT-83493 数据脱敏一期迭代bug 【问题原因】根据review意见,抽出方法 【改动思路】根据review意见,抽出方法 【review建议】 REPORT-83316 && REPORT-83320 && REPORT-83488 && REPORT-83493 数据脱敏一期迭代bug 【问题原因】基本都是UI问题 【改动思路】跟产品沟通后,修改 【review建议】 REPORT-86426-导出excel/pdf 密码支持公式 REPORT-86259 【导出excel&word】仅限预览下限制复制 REPORT-86426-导出excel/pdf 密码支持公式 KERNEL-12978 fix: 适配CBB改动 REPORT-75091 数据脱敏一二期解除功能屏蔽 【问题原因】rt 【改动思路】rt 【review建议】release/11.0
Leo.Qin-覃宇攀
2 years ago
28 changed files with 1501 additions and 202 deletions
@ -0,0 +1,42 @@
|
||||
package com.fr.design.data.datapane.preview.desensitization.view.common; |
||||
|
||||
import com.fr.design.gui.ibutton.UIRadioButton; |
||||
|
||||
import javax.swing.AbstractCellEditor; |
||||
import javax.swing.JTable; |
||||
import javax.swing.table.TableCellEditor; |
||||
import javax.swing.table.TableCellRenderer; |
||||
import java.awt.Component; |
||||
|
||||
/** |
||||
* 标记选中的CellEditor |
||||
* |
||||
* @author Yvan |
||||
* @version 11.0 |
||||
* Created by Yvan on 2022/12/20 |
||||
*/ |
||||
public class ChooseMark extends AbstractCellEditor implements TableCellEditor, TableCellRenderer { |
||||
|
||||
private final UIRadioButton selectedButton; |
||||
|
||||
public ChooseMark() { |
||||
this.selectedButton = new UIRadioButton(); |
||||
} |
||||
|
||||
@Override |
||||
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||
selectedButton.setSelected(isSelected); |
||||
return selectedButton; |
||||
} |
||||
|
||||
@Override |
||||
public Object getCellEditorValue() { |
||||
return selectedButton.isSelected(); |
||||
} |
||||
|
||||
@Override |
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
||||
selectedButton.setSelected(isSelected); |
||||
return selectedButton; |
||||
} |
||||
} |
After Width: | Height: | Size: 1.6 KiB |
@ -0,0 +1,127 @@
|
||||
package com.fr.design.mainframe.cell.settingpane.desensitization; |
||||
|
||||
import com.fr.design.constants.UIConstants; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itableeditorpane.UITableEditAction; |
||||
import com.fr.design.gui.itableeditorpane.UITableEditorPane; |
||||
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.design.layout.VerticalFlowLayout; |
||||
import com.fr.design.mainframe.cell.settingpane.AbstractCellAttrPane; |
||||
import com.fr.design.mainframe.cell.settingpane.desensitization.model.CellDesensitizationTableModel; |
||||
import com.fr.report.cell.desensitization.CellDesensitizationBean; |
||||
|
||||
import javax.swing.JPanel; |
||||
import javax.swing.JTable; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Color; |
||||
import java.awt.Component; |
||||
import java.util.List; |
||||
import java.util.Objects; |
||||
|
||||
/** |
||||
* 数据脱敏规则设置面板 |
||||
* |
||||
* @author Leo.Qin |
||||
* @version 11.0 |
||||
* Created by Leo.Qin on 2022/11/15 |
||||
*/ |
||||
public class CellDesensitizationGroupsPane extends JPanel { |
||||
private final CellDesensitizationTableModel model; |
||||
|
||||
// 规则编辑面板
|
||||
UITableEditorPane<CellDesensitizationBean> editorPane; |
||||
|
||||
// 添加规则按钮面板
|
||||
private JPanel addRulePane; |
||||
|
||||
public CellDesensitizationGroupsPane(AbstractCellAttrPane pane) { |
||||
model = new CellDesensitizationTableModel(pane, this); |
||||
|
||||
initComponent(); |
||||
} |
||||
|
||||
private void initComponent() { |
||||
this.setLayout(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 10, true)); |
||||
|
||||
addRulePane = initAddPane(model); |
||||
editorPane = initEditorPane(model); |
||||
|
||||
this.add(addRulePane); |
||||
this.add(editorPane); |
||||
} |
||||
|
||||
/** |
||||
* 初始化添加脱敏设置面板 |
||||
* |
||||
* @param model |
||||
* @return |
||||
*/ |
||||
private JPanel initAddPane(CellDesensitizationTableModel model) { |
||||
UIButton addButton = new UIButton(model.getAction()); |
||||
UILabel addLabel = new UILabel(Toolkit.i18nText("Fine-Design_Report_Desensitization_Setting")); |
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double f = TableLayout.FILL; |
||||
double[] columnSize = {p, f}; |
||||
double[] rowSize = {p, p}; |
||||
|
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{addLabel, addButton} |
||||
}; |
||||
|
||||
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 20, 0); |
||||
} |
||||
|
||||
/** |
||||
* 初始化脱敏设置编辑面板 |
||||
* |
||||
* @param model |
||||
* @return |
||||
*/ |
||||
private UITableEditorPane<CellDesensitizationBean> initEditorPane(CellDesensitizationTableModel model) { |
||||
UITableEditorPane<CellDesensitizationBean> tableEditorPane = new UITableEditorPane<CellDesensitizationBean>(model) { |
||||
@Override |
||||
protected void initComponent(UITableEditAction[] action) { |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
|
||||
JTable editTable = getTableModel().createTable(); |
||||
editTable.getTableHeader().setBackground(UIConstants.DEFAULT_BG_RULER); |
||||
setEditTable(editTable); |
||||
|
||||
initbuttonPane(action); |
||||
getbuttonPane().setBackground(UIConstants.DEFAULT_BG_RULER); |
||||
|
||||
JPanel controlPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
controlPane.setBackground(Color.WHITE); |
||||
controlPane.add(getbuttonPane(), BorderLayout.WEST); |
||||
|
||||
JPanel pane = new JPanel(new BorderLayout(4, 4)); |
||||
pane.add(editTable, BorderLayout.CENTER); |
||||
pane.add(controlPane, BorderLayout.NORTH); |
||||
|
||||
this.add(pane, BorderLayout.CENTER); |
||||
} |
||||
}; |
||||
return tableEditorPane; |
||||
} |
||||
|
||||
/** |
||||
* 更新数据 |
||||
*/ |
||||
public List<CellDesensitizationBean> update() { |
||||
return editorPane.update(); |
||||
} |
||||
|
||||
/** |
||||
* 填充数据 |
||||
*/ |
||||
public void populate(List<CellDesensitizationBean> desensitizationBeans) { |
||||
if (Objects.nonNull(desensitizationBeans)) { |
||||
editorPane.populate(desensitizationBeans.toArray(new CellDesensitizationBean[]{})); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,109 @@
|
||||
package com.fr.design.mainframe.cell.settingpane.desensitization.model; |
||||
|
||||
import com.fr.design.gui.itableeditorpane.UITableEditAction; |
||||
import com.fr.design.gui.itableeditorpane.UITableModelAdapter; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.mainframe.cell.settingpane.AbstractCellAttrPane; |
||||
import com.fr.report.cell.desensitization.CellDesensitizationBean; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import java.awt.Component; |
||||
import java.awt.event.ActionEvent; |
||||
|
||||
/** |
||||
* 单元格数据脱敏model |
||||
* |
||||
* @author Leo.Qin |
||||
* @version 11.0 |
||||
* Created by Leo.Qin on 2023/1/4 |
||||
*/ |
||||
public class CellDesensitizationTableModel extends UITableModelAdapter<CellDesensitizationBean> { |
||||
private final int ROW_HEIGHT = 60; |
||||
/** |
||||
* 属性面板 |
||||
*/ |
||||
private AbstractCellAttrPane attrPane; |
||||
/** |
||||
* 添加脱敏设置action |
||||
*/ |
||||
private AddDesensitizationAction action; |
||||
|
||||
public CellDesensitizationTableModel(AbstractCellAttrPane attrPane, Component parent) { |
||||
super(new String[]{StringUtils.EMPTY}); |
||||
this.attrPane = attrPane; |
||||
this.action = new AddDesensitizationAction(); |
||||
this.table.getTableHeader().setVisible(false); |
||||
this.table.setRowHeight(ROW_HEIGHT); |
||||
|
||||
setColumnClass(new Class[]{ |
||||
DesensitizationCellEditor.class |
||||
}); |
||||
|
||||
this.setDefaultEditor(DesensitizationCellEditor.class, new DesensitizationCellEditor(parent, this)); |
||||
this.setDefaultRenderer(DesensitizationCellEditor.class, new DesensitizationCellRender(parent, this)); |
||||
} |
||||
|
||||
@Override |
||||
public UITableEditAction[] createAction() { |
||||
|
||||
return new UITableEditAction[]{ |
||||
new MoveUpAction(), |
||||
new MoveDownAction(), |
||||
new DeleteDesensitizationAction() |
||||
}; |
||||
} |
||||
|
||||
public AddDesensitizationAction getAction() { |
||||
return action; |
||||
} |
||||
|
||||
/** |
||||
* 添加脱敏规则action |
||||
*/ |
||||
public class AddDesensitizationAction extends AddTableRowAction { |
||||
|
||||
public AddDesensitizationAction() { |
||||
this.setName(StringUtils.EMPTY); |
||||
} |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
super.actionPerformed(e); |
||||
// 添加一条空白数据
|
||||
addRow(CellDesensitizationBean.createEmptyBean()); |
||||
table.getSelectionModel().setSelectionInterval(table.getRowCount() - 1, table.getRowCount() - 1); |
||||
fireTableDataChanged(); |
||||
} |
||||
|
||||
} |
||||
|
||||
private class DeleteDesensitizationAction extends DeleteAction { |
||||
public DeleteDesensitizationAction() { |
||||
super(); |
||||
this.setDeleteTipText(Toolkit.i18nText("Fine-Design_Report_Desensitization_Remove_Tip")); |
||||
} |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public Object getValueAt(int rowIndex, int columnIndex) { |
||||
CellDesensitizationBean desensitizationBean = getList().get(rowIndex); |
||||
if (desensitizationBean == null) { |
||||
desensitizationBean = CellDesensitizationBean.createEmptyBean(); |
||||
} |
||||
return desensitizationBean; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isCellEditable(int row, int col) { |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* 手动触发模版变化,用于更新单元格脱敏设置属性 |
||||
*/ |
||||
public void fireAttrChanged() { |
||||
attrPane.attributeChanged(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,43 @@
|
||||
package com.fr.design.mainframe.cell.settingpane.desensitization.model; |
||||
|
||||
import com.fr.report.cell.desensitization.CellDesensitizationBean; |
||||
|
||||
import javax.swing.AbstractCellEditor; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.JTable; |
||||
import javax.swing.border.LineBorder; |
||||
import javax.swing.table.TableCellEditor; |
||||
import java.awt.Color; |
||||
import java.awt.Component; |
||||
|
||||
/** |
||||
* 脱敏规则设置cellEditor |
||||
* @author Leo.Qin |
||||
* @version 11.0 |
||||
* Created by Leo.Qin on 2023/1/4 |
||||
*/ |
||||
public class DesensitizationCellEditor extends AbstractCellEditor implements TableCellEditor { |
||||
private final DesensitizationCellPane editPane; |
||||
|
||||
DesensitizationCellEditor(Component parent, CellDesensitizationTableModel model) { |
||||
editPane = new DesensitizationCellPane(parent, model); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||
|
||||
editPane.populate((CellDesensitizationBean) value, row); |
||||
|
||||
JPanel editPanel = editPane.getEditPanel(); |
||||
editPanel.setBorder(new LineBorder(Color.LIGHT_GRAY)); |
||||
|
||||
return editPanel; |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public Object getCellEditorValue() { |
||||
return editPane.getCellEditorValue(); |
||||
} |
||||
} |
@ -0,0 +1,304 @@
|
||||
package com.fr.design.mainframe.cell.settingpane.desensitization.model; |
||||
|
||||
import com.fr.data.desensitize.rule.DesensitizationRuleManager; |
||||
import com.fr.data.desensitize.rule.base.DesensitizationRule; |
||||
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.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.icombocheckbox.UIComboCheckBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
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.design.layout.VerticalFlowLayout; |
||||
import com.fr.report.cell.desensitization.CellDesensitizationBean; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.third.org.apache.commons.collections4.map.HashedMap; |
||||
|
||||
import javax.swing.JComponent; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.SwingUtilities; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Color; |
||||
import java.awt.Component; |
||||
import java.awt.FontMetrics; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.util.HashMap; |
||||
import java.util.LinkedHashSet; |
||||
import java.util.Map; |
||||
import java.util.Objects; |
||||
import java.util.Optional; |
||||
import java.util.Set; |
||||
|
||||
/** |
||||
* 单元格脱敏规则设置面板 |
||||
* |
||||
* @author Leo.Qin |
||||
* @version 11.0 |
||||
* Created by Leo.Qin on 2023/1/5 |
||||
*/ |
||||
public class DesensitizationCellPane extends BasicBeanPane { |
||||
private Component parent; |
||||
private JPanel editPanel; |
||||
private UILabel label; |
||||
private UITextField emptyTextField; |
||||
private UIButton ruleButton; |
||||
private UITextField ruleTextField; |
||||
private UIComboCheckBox rolesComboBox; |
||||
private static final String APOSTROPHE = "..."; |
||||
private Map<String, String> roleMap; |
||||
private DesensitizationRule rule; |
||||
private CellDesensitizationTableModel model; |
||||
|
||||
|
||||
DesensitizationCellPane(Component parent, CellDesensitizationTableModel model) { |
||||
this.parent = parent; |
||||
this.model = model; |
||||
|
||||
initComponent(); |
||||
|
||||
addListener(); |
||||
} |
||||
|
||||
private void initComponent() { |
||||
editPanel = new JPanel(); |
||||
editPanel.setLayout(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 0, true)); |
||||
|
||||
label = new UILabel(); |
||||
label.setEnabled(false); |
||||
editPanel.add(label); |
||||
|
||||
ruleButton = new UIButton(APOSTROPHE); |
||||
|
||||
ruleTextField = new UITextField(); |
||||
ruleTextField.setEnabled(true); |
||||
ruleTextField.setEditable(false); |
||||
ruleTextField.setPlaceholder(Toolkit.i18nText("Fine-Design_Report_Desensitization_Rule_Place_Holder")); |
||||
|
||||
roleMap = new HashedMap<>(); |
||||
rolesComboBox = new RuleUIComboCheckBox(); |
||||
rolesComboBox.setPlaceHolder(Toolkit.i18nText("Fine-Design_Report_Desensitization_Role_Place_Holder")); |
||||
rolesComboBox.setEnabled(true); |
||||
|
||||
emptyTextField = new UITextField(); |
||||
emptyTextField.setEnabled(false); |
||||
emptyTextField.setOpaque(false); |
||||
|
||||
editPanel.add(initTableCellPanel()); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 初始化单元格中的panel |
||||
*/ |
||||
private JPanel initTableCellPanel() { |
||||
double f = TableLayout.FILL; |
||||
double p = TableLayout.PREFERRED; |
||||
|
||||
double[] rowSize = new double[]{f, f}; |
||||
double[] columnSize = new double[]{p, f}; |
||||
|
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{ruleButton, ruleTextField}, |
||||
new Component[]{emptyTextField, rolesComboBox} |
||||
}; |
||||
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 0, 0); |
||||
} |
||||
|
||||
private void addListener() { |
||||
ruleButton.addActionListener(chooseRuleListener); |
||||
|
||||
rolesComboBox.registerChangeListener(uiObserverListener); |
||||
} |
||||
|
||||
|
||||
private final UIObserverListener uiObserverListener = new UIObserverListener() { |
||||
@Override |
||||
public void doChange() { |
||||
CellDesensitizationBean selectBean = model.getSelectedValue(); |
||||
Set<String> roleIds = generateRolesIdsBySelectedValues(); |
||||
if (Objects.nonNull(selectBean) && !selectBean.getRoleIds().equals(roleIds)) { |
||||
selectBean.setRoleIds(generateRolesIdsBySelectedValues()); |
||||
model.fireAttrChanged(); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
private final ActionListener chooseRuleListener = new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
CellDesensitizationBean selectBean = model.getSelectedValue(); |
||||
DesensitizationRulePane rulePane = new DesensitizationRulePane(); |
||||
BasicDialog ruleDialog = rulePane.showWindowWithCustomSize(SwingUtilities.getWindowAncestor(parent), new DialogActionAdapter() { |
||||
|
||||
@Override |
||||
public void doOk() { |
||||
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(); |
||||
} |
||||
rule = null; |
||||
} |
||||
}, BasicDialog.DEFAULT); |
||||
|
||||
ruleDialog.setVisible(true); |
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* 根据当前的规则配置信息,生成选中的rolesMap用来展示 |
||||
*/ |
||||
public Map<Object, Boolean> generateRolesCheckBoxSelectedValues(CellDesensitizationBean bean) { |
||||
Map<Object, Boolean> result = new HashMap<>(roleMap.size()); |
||||
for (Map.Entry<String, String> roleEntry : roleMap.entrySet()) { |
||||
String roleId = roleEntry.getKey(); |
||||
String roleName = roleEntry.getValue(); |
||||
result.put(roleName, bean.getRoleIds().contains(roleId)); |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
/** |
||||
* 根据当前的RoleName选择项,生成其对应的RoleId的set存入规则配置信息 |
||||
*/ |
||||
public Set<String> generateRolesIdsBySelectedValues() { |
||||
Set<String> result = new LinkedHashSet<>(); |
||||
Object[] selectedValues = rolesComboBox.getSelectedValues(); |
||||
for (Object selectedValue : selectedValues) { |
||||
String selectedRoleName = (String) selectedValue; |
||||
if (roleMap.containsValue(selectedRoleName)) { |
||||
Optional<Map.Entry<String, String>> matchedEntry = roleMap.entrySet().stream().filter(entry -> StringUtils.equals(entry.getValue(), selectedRoleName)).findFirst(); |
||||
matchedEntry.ifPresent(stringStringEntry -> result.add(stringStringEntry.getKey())); |
||||
} |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
public JPanel getEditPanel() { |
||||
return editPanel; |
||||
} |
||||
|
||||
/** |
||||
* 填充数据 |
||||
*/ |
||||
public void populate(CellDesensitizationBean value, int row) { |
||||
|
||||
refreshRoles(); |
||||
|
||||
String ruleName = value.getDesensitizationRule().getRuleName(); |
||||
ruleTextField.setText(ruleName); |
||||
|
||||
// 非正常状态需要颜色修改为红色
|
||||
refreshRuleState(value); |
||||
|
||||
Map<Object, Boolean> map = generateRolesCheckBoxSelectedValues(value); |
||||
rolesComboBox.setSelectedValues(map); |
||||
|
||||
label.setText(Toolkit.i18nText("Fine-Design_Report_Desensitization_Setting") + row); |
||||
} |
||||
|
||||
private void refreshRoles() { |
||||
Map<String, String> roles = TableDataPreviewDesensitizeManager.getInstance().getAllRoles(); |
||||
if (!roleMap.equals(roles)) { |
||||
roleMap = roles; |
||||
rolesComboBox.refreshCombo(roles.values().toArray()); |
||||
} |
||||
} |
||||
|
||||
private void refreshRuleState(CellDesensitizationBean value) { |
||||
DesensitizationRuleStatus ruleStatus = DesensitizationRuleManager.getInstance().getRuleStatus(value.getDesensitizationRule()); |
||||
if (value.equals(CellDesensitizationBean.createEmptyBean())) { |
||||
ruleTextField.setForeground(Color.GRAY); |
||||
} else if (ruleStatus != DesensitizationRuleStatus.NORMAL) { |
||||
ruleTextField.setForeground(Color.RED); |
||||
} else { |
||||
ruleTextField.setForeground(Color.BLACK); |
||||
} |
||||
} |
||||
|
||||
@Deprecated |
||||
@Override |
||||
public void populateBean(Object ob) { |
||||
} |
||||
|
||||
@Deprecated |
||||
@Override |
||||
public Object updateBean() { |
||||
return null; |
||||
} |
||||
|
||||
@Deprecated |
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
|
||||
public Object getCellEditorValue() { |
||||
return ruleTextField.getText(); |
||||
} |
||||
|
||||
|
||||
private class RuleUIComboCheckBox extends UIComboCheckBox { |
||||
public RuleUIComboCheckBox() { |
||||
super(DesensitizationCellPane.this.roleMap.values().toArray(), true); |
||||
} |
||||
|
||||
@Override |
||||
protected void setLayoutAndAddComponents() { |
||||
// 使用BorderLayout,否则默认使用的FlowLayout会让整个下拉选框使用最小Size,然后TableCell这边会出现空白
|
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
this.add(getEditor(), BorderLayout.CENTER); |
||||
this.add(getArrowButton(), BorderLayout.EAST); |
||||
} |
||||
|
||||
@Override |
||||
protected void setEditorToolTipText(JComponent editor, String text) { |
||||
// 选项过多时,已选中的值会做省略显示处理,此处添加一个Tooltips,显示完整值
|
||||
if (text != null) { |
||||
editor.setToolTipText(text); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
protected void setEditorPlaceHolder(UITextField editor) { |
||||
editor.setPlaceholder(this.getPlaceHolder()); |
||||
} |
||||
|
||||
@Override |
||||
protected String omitEditorText(UITextField textEditor, String text) { |
||||
char[] omitChars = OMIT_TEXT.toCharArray(); |
||||
//获取字体的大小
|
||||
FontMetrics fontMetrics = textEditor.getFontMetrics(textEditor.getFont()); |
||||
//计算省略号的长度
|
||||
int omitLength = fontMetrics.charsWidth(omitChars, 0, omitChars.length); |
||||
String omitText = StringUtils.EMPTY; |
||||
char[] chars = text.toCharArray(); |
||||
|
||||
for (int i = 1; i <= chars.length; i++) { |
||||
//如果原文本+省略号长度超过文本框
|
||||
int width = textEditor.getWidth(); |
||||
if (width > 0 && fontMetrics.charsWidth(chars, 0, i) + omitLength > width) { |
||||
//从第i-1的位置截断再拼上省略号
|
||||
omitText = text.substring(0, i - 2) + OMIT_TEXT; |
||||
break; |
||||
} |
||||
} |
||||
|
||||
return omitText.equals(StringUtils.EMPTY) ? text : omitText; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,49 @@
|
||||
package com.fr.design.mainframe.cell.settingpane.desensitization.model; |
||||
|
||||
import com.fr.report.cell.desensitization.CellDesensitizationBean; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JTable; |
||||
import javax.swing.border.LineBorder; |
||||
import javax.swing.table.DefaultTableCellRenderer; |
||||
import java.awt.Color; |
||||
import java.awt.Component; |
||||
|
||||
/** |
||||
* 脱敏规则设置cellRenderer |
||||
* |
||||
* @author Leo.Qin |
||||
* @version 11.0 |
||||
* Created by Leo.Qin on 2023/1/4 |
||||
*/ |
||||
public class DesensitizationCellRender extends DefaultTableCellRenderer { |
||||
|
||||
private final DesensitizationCellPane editPane; |
||||
|
||||
|
||||
DesensitizationCellRender(Component parent, CellDesensitizationTableModel model) { |
||||
editPane = new DesensitizationCellPane(parent, model); |
||||
} |
||||
|
||||
|
||||
public Object getCellEditorValue() { |
||||
return editPane.getCellEditorValue(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
||||
|
||||
editPane.populate((CellDesensitizationBean) value, row); |
||||
if (table.isCellSelected(row, column)) { |
||||
// 设置选中框
|
||||
editPane.getEditPanel().setBorder(new LineBorder(Color.LIGHT_GRAY)); |
||||
} else { |
||||
editPane.getEditPanel().setBorder(BorderFactory.createEmptyBorder()); |
||||
} |
||||
|
||||
return editPane.getEditPanel(); |
||||
} |
||||
|
||||
|
||||
} |
Loading…
Reference in new issue