Browse Source
【问题原因】rt 【改动思路】rt 顺便过一下开发文档 https://kms.fineres.com/pages/viewpage.action?pageId=576039082feature/x
Leo.Qin
2 years ago
11 changed files with 919 additions and 81 deletions
@ -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