@ -3,39 +3,28 @@
* /
* /
package com.fr.design.data.datapane.preview ;
package com.fr.design.data.datapane.preview ;
import com.fr.base.BaseUtils ;
import com.fr.base.TableData ;
import com.fr.base.TableData ;
import com.fr.base.svg.IconUtils ;
import com.fr.data.TableDataSource ;
import com.fr.data.TableDataSource ;
import com.fr.data.desensitize.base.DesensitizationTableData ;
import com.fr.data.impl.DBTableData ;
import com.fr.data.impl.DBTableData ;
import com.fr.data.impl.EmbeddedTableData ;
import com.fr.data.impl.EmbeddedTableData ;
import com.fr.data.impl.NameDataModel ;
import com.fr.data.impl.NameDataModel ;
import com.fr.data.operator.DataOperator ;
import com.fr.data.operator.DataOperator ;
import com.fr.design.DesignerEnvManager ;
import com.fr.design.DesignerEnvManager ;
import com.fr.design.constants.UIConstants ;
import com.fr.design.data.DesignTableDataManager ;
import com.fr.design.data.DesignTableDataManager ;
import com.fr.design.data.datapane.preview.desensitization.TableDataPreviewDesensitizeManager ;
import com.fr.design.data.datapane.preview.desensitization.model.DesensitizedPreviewTableModel ;
import com.fr.design.data.datapane.preview.desensitization.view.setting.TableDataDesensitizationSettingPane ;
import com.fr.design.dialog.BasicDialog ;
import com.fr.design.dialog.BasicDialog ;
import com.fr.design.dialog.BasicPane ;
import com.fr.design.dialog.BasicPane ;
import com.fr.design.dialog.DialogActionAdapter ;
import com.fr.design.dialog.FineJOptionPane ;
import com.fr.design.dialog.FineJOptionPane ;
import com.fr.design.file.HistoryTemplateListCache ;
import com.fr.design.file.HistoryTemplateListCache ;
import com.fr.design.gui.frpane.UITabbedPane ;
import com.fr.design.gui.frpane.UITabbedPane ;
import com.fr.design.gui.ibutton.UIToggleButton ;
import com.fr.design.gui.ilable.UILabel ;
import com.fr.design.gui.ilable.UILabel ;
import com.fr.design.gui.iprogressbar.AutoProgressBar ;
import com.fr.design.gui.iprogressbar.AutoProgressBar ;
import com.fr.design.gui.itable.SortableJTable ;
import com.fr.design.gui.itable.SortableJTable ;
import com.fr.design.gui.itable.TableSorter ;
import com.fr.design.gui.itable.TableSorter ;
import com.fr.design.gui.itextfield.UINumberField ;
import com.fr.design.gui.itextfield.UINumberField ;
import com.fr.design.gui.itoolbar.UIToolbar ;
import com.fr.design.i18n.Toolkit ;
import com.fr.design.i18n.Toolkit ;
import com.fr.design.layout.FRGUIPaneFactory ;
import com.fr.design.layout.FRGUIPaneFactory ;
import com.fr.design.mainframe.DesignerContext ;
import com.fr.design.mainframe.DesignerContext ;
import com.fr.design.mainframe.JTemplate ;
import com.fr.design.menu.SeparatorDef ;
import com.fr.design.menu.ToolBarDef ;
import com.fr.design.ui.util.UIUtil ;
import com.fr.design.ui.util.UIUtil ;
import com.fr.function.TIME ;
import com.fr.function.TIME ;
import com.fr.general.FRFont ;
import com.fr.general.FRFont ;
@ -50,7 +39,6 @@ import javax.swing.JOptionPane;
import javax.swing.JPanel ;
import javax.swing.JPanel ;
import javax.swing.JScrollPane ;
import javax.swing.JScrollPane ;
import javax.swing.JTable ;
import javax.swing.JTable ;
import javax.swing.SwingUtilities ;
import javax.swing.SwingWorker ;
import javax.swing.SwingWorker ;
import javax.swing.UIManager ;
import javax.swing.UIManager ;
import javax.swing.table.DefaultTableCellRenderer ;
import javax.swing.table.DefaultTableCellRenderer ;
@ -69,19 +57,12 @@ import java.sql.Timestamp;
import java.util.ArrayList ;
import java.util.ArrayList ;
import java.util.Date ;
import java.util.Date ;
import java.util.List ;
import java.util.List ;
import java.util.Objects ;
import java.util.concurrent.CancellationException ;
import java.util.concurrent.CancellationException ;
/ * *
/ * *
* august : PreviewTablePane一共提供5个共有的静态方法 , 用来预览 。
* august : PreviewTablePane一共提供5个共有的静态方法 , 用来预览 。
* /
* /
public class PreviewTablePane extends BasicPane {
public class PreviewTablePane extends BasicPane {
private static final String DATA_DESENSITIZATION_CONFIG = Toolkit . i18nText ( "Fine-Design_Report_Desensitization_Config" ) ;
private static final String LEFT_BRACKET = "(" ;
private static final String RIGHT_BRACKET = ")" ;
private static final String COUNT = Toolkit . i18nText ( "Fine-Design_Report_Desensitization_Count" ) ;
private TableData tableData ;
private TableData tableData ;
private DataModel dataModel ;
private DataModel dataModel ;
private UINumberField maxPreviewNumberField ;
private UINumberField maxPreviewNumberField ;
@ -97,54 +78,6 @@ public class PreviewTablePane extends BasicPane {
private static PreviewTablePane THIS ;
private static PreviewTablePane THIS ;
private EmbeddedTableData previewTableData ;
private EmbeddedTableData previewTableData ;
private UILabel desensitizationLabel ;
/ * *
* 用于refreshLabel的鼠标监听
* /
private final MouseAdapter refreshLabelMouseAdapter = new MouseAdapter ( ) {
boolean mouseEntered = false ;
boolean buttonPressed = false ;
@Override
public void mouseEntered ( MouseEvent e ) { // 当鼠标进入时候调用.
mouseEntered = true ;
if ( ! buttonPressed ) {
refreshLabel . setBackground ( java . awt . Color . WHITE ) ;
refreshLabel . setOpaque ( true ) ;
refreshLabel . setBorder ( BorderFactory . createLineBorder ( java . awt . Color . GRAY ) ) ;
}
}
@Override
public void mouseExited ( MouseEvent e ) {
mouseEntered = false ;
refreshLabel . setOpaque ( false ) ;
refreshLabel . setBorder ( BorderFactory . createEmptyBorder ( ) ) ;
}
@Override
public void mousePressed ( MouseEvent e ) {
buttonPressed = true ;
refreshLabel . setBackground ( java . awt . Color . lightGray ) ;
}
@Override
public void mouseReleased ( MouseEvent e ) {
buttonPressed = false ;
if ( mouseEntered ) {
refreshLabel . setBackground ( java . awt . Color . WHITE ) ;
try {
populate ( tableData ) ;
if ( dataModel ! = null ) {
setRowsLimitTableModel ( ) ;
}
} catch ( Exception ignore ) {
}
}
}
} ;
public static final PreviewTablePane getInstance ( ) {
public static final PreviewTablePane getInstance ( ) {
if ( THIS = = null ) {
if ( THIS = = null ) {
THIS = new PreviewTablePane ( ) ;
THIS = new PreviewTablePane ( ) ;
@ -154,175 +87,91 @@ public class PreviewTablePane extends BasicPane {
private PreviewTablePane ( ) {
private PreviewTablePane ( ) {
this . setLayout ( FRGUIPaneFactory . createBorderLayout ( ) ) ;
this . setLayout ( FRGUIPaneFactory . createBorderLayout ( ) ) ;
// northPane
this . add ( initNorthPane ( ) , BorderLayout . NORTH ) ;
// centerPane
this . add ( initCenterPane ( ) , BorderLayout . CENTER ) ;
// dialog
initDialog ( ) ;
// progressBar
initProgressBar ( ) ;
}
/ * *
// elalke:预览行数
* 初始化northPane
*
* @return
* /
private JComponent initNorthPane ( ) {
JPanel northPane = FRGUIPaneFactory . createBorderLayout_S_Pane ( ) ;
// 预览行数面板
northPane . add ( initPreviewNumberPane ( ) , BorderLayout . CENTER ) ;
// 脱敏预览设置面板
northPane . add ( initDesensitizationPane ( ) , BorderLayout . EAST ) ;
return northPane ;
}
/ * *
* 初始化预览行数面板
*
* @return
* /
private JComponent initPreviewNumberPane ( ) {
JPanel previewNumberPanel = FRGUIPaneFactory . createNormalFlowInnerContainer_S_Pane ( ) ;
JPanel previewNumberPanel = FRGUIPaneFactory . createNormalFlowInnerContainer_S_Pane ( ) ;
// 当前行数
this . add ( previewNumberPanel , BorderLayout . NORTH ) ;
JPanel currentPreviewPanel = FRGUIPaneFactory . createNormalFlowInnerContainer_S_Pane ( ) ;
JPanel currentPreviewPanel = FRGUIPaneFactory . createNormalFlowInnerContainer_S_Pane ( ) ;
previewNumberPanel . add ( currentPreviewPanel ) ;
currentPreviewPanel . add ( new UILabel ( Toolkit . i18nText ( "Fine-Design_Basic_Current_Preview_Rows" ) + ":" ) ) ;
currentPreviewPanel . add ( new UILabel ( Toolkit . i18nText ( "Fine-Design_Basic_Current_Preview_Rows" ) + ":" ) ) ;
currentRowsField = new UINumberField ( ) ;
currentRowsField = new UINumberField ( ) ;
currentPreviewPanel . add ( currentRowsField ) ;
currentPreviewPanel . add ( currentRowsField ) ;
currentRowsField . setEditable ( false ) ;
currentRowsField . setEditable ( false ) ;
currentRowsField . setColumns ( 4 ) ;
currentRowsField . setColumns ( 4 ) ;
currentRowsField . setInteger ( true ) ;
currentRowsField . setInteger ( true ) ;
// 最大行数
JPanel maxPanel = FRGUIPaneFactory . createNormalFlowInnerContainer_S_Pane ( ) ;
JPanel maxPanel = FRGUIPaneFactory . createNormalFlowInnerContainer_S_Pane ( ) ;
previewNumberPanel . add ( maxPanel ) ;
maxPanel . add ( new UILabel ( Toolkit . i18nText ( "Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows" ) + ":" ) ) ;
maxPanel . add ( new UILabel ( Toolkit . i18nText ( "Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows" ) + ":" ) ) ;
maxPreviewNumberField = new UINumberField ( ) ;
maxPreviewNumberField = new UINumberField ( ) ;
maxPanel . add ( maxPreviewNumberField ) ;
maxPanel . add ( maxPreviewNumberField ) ;
maxPreviewNumberField . setColumns ( 4 ) ;
maxPreviewNumberField . setColumns ( 4 ) ;
maxPreviewNumberField . setInteger ( true ) ;
maxPreviewNumberField . setInteger ( true ) ;
maxPreviewNumberField . setValue ( DesignerEnvManager . getEnvManager ( ) . getMaxNumberOrPreviewRow ( ) ) ;
DesignerEnvManager designerEnvManager = DesignerEnvManager . getEnvManager ( ) ;
maxPreviewNumberField . setValue ( designerEnvManager . getMaxNumberOrPreviewRow ( ) ) ;
maxPreviewNumberField . addActionListener ( new ActionListener ( ) {
maxPreviewNumberField . addActionListener ( new ActionListener ( ) {
@Override
public void actionPerformed ( ActionEvent evt ) {
public void actionPerformed ( ActionEvent evt ) {
DesignerEnvManager designerEnvManager = DesignerEnvManager . getEnvManager ( ) ;
DesignerEnvManager designerEnvManager = DesignerEnvManager . getEnvManager ( ) ;
designerEnvManager . setMaxNumberOrPreviewRow ( ( int ) ( ( UINumberField ) evt . getSource ( ) ) . getValue ( ) ) ;
designerEnvManager . setMaxNumberOrPreviewRow ( ( int ) ( ( UINumberField ) evt . getSource ( ) ) . getValue ( ) ) ;
}
}
} ) ;
} ) ;
// 刷新按钮
initRefreshLabel ( ) ;
previewNumberPanel . add ( currentPreviewPanel ) ;
Icon refreshImage = BaseUtils . readIcon ( "/com/fr/design/images/control/refresh.png" ) ;
previewNumberPanel . add ( maxPanel ) ;
previewNumberPanel . add ( refreshLabel ) ;
return previewNumberPanel ;
}
private void initRefreshLabel ( ) {
Icon refreshImage = IconUtils . readIcon ( "/com/fr/design/images/control/refresh" ) ;
refreshLabel = new UILabel ( refreshImage ) ;
refreshLabel = new UILabel ( refreshImage ) ;
refreshLabel . addMouseListener ( refreshLabelMouseAdapter ) ;
previewNumberPanel . add ( refreshLabel ) ;
}
refreshLabel . addMouseListener ( new MouseAdapter ( ) {
boolean mouseEntered = false ;
/ * *
boolean buttonPressed = false ;
* 初始化脱敏设置面板
*
public void mouseEntered ( MouseEvent e ) { // 当鼠标进入时候调用.
* @return
mouseEntered = true ;
* /
if ( ! buttonPressed ) {
private JComponent initDesensitizationPane ( ) {
refreshLabel . setBackground ( java . awt . Color . WHITE ) ;
JPanel desensitizationPane = FRGUIPaneFactory . createNormalFlowInnerContainer_S_Pane ( ) ;
refreshLabel . setOpaque ( true ) ;
// 初始化Label
refreshLabel . setBorder ( BorderFactory . createLineBorder ( java . awt . Color . GRAY ) ) ;
desensitizationLabel = new UILabel ( DATA_DESENSITIZATION_CONFIG ) ;
}
desensitizationLabel . setForeground ( UIConstants . NORMAL_BLUE ) ;
}
desensitizationLabel . addMouseListener ( new MouseAdapter ( ) {
@Override
public void mouseClicked ( MouseEvent e ) {
TableDataDesensitizationSettingPane settingPane = new TableDataDesensitizationSettingPane ( ( DesensitizationTableData ) tableData ) ;
settingPane . populateBean ( ( DesensitizationTableData ) tableData ) ;
BasicDialog dialog = settingPane . showWindowWithCustomSize ( SwingUtilities . getWindowAncestor ( PreviewTablePane . this ) , new DialogActionAdapter ( ) {
@Override
public void doOk ( ) {
// 保存脱敏规则配置
settingPane . updateBean ( ) ;
// 改变模板保存状态
JTemplate < ? , ? > editingTemplate = HistoryTemplateListCache . getInstance ( ) . getCurrentEditingTemplate ( ) ;
if ( Objects . nonNull ( editingTemplate ) ) {
editingTemplate . fireTargetModified ( true ) ;
}
// 刷新预览页面
refreshTable ( ) ;
}
@Override
public void mouseExited ( MouseEvent e ) {
public void doCancel ( ) {
mouseEntered = false ;
refreshLabel . setOpaque ( false ) ;
refreshLabel . setBorder ( BorderFactory . createEmptyBorder ( ) ) ;
}
}
public void mousePressed ( MouseEvent e ) {
} , BasicDialog . DEFAULT ) ;
buttonPressed = true ;
dialog . setVisible ( true ) ;
refreshLabel . setBackground ( java . awt . Color . lightGray ) ;
}
}
} ) ;
// 初始化分隔符
public void mouseReleased ( MouseEvent e ) {
ToolBarDef toolbarDef = new ToolBarDef ( ) ;
buttonPressed = false ;
toolbarDef . addShortCut ( SeparatorDef . DEFAULT ) ;
if ( mouseEntered ) {
UIToolbar toolBar = ToolBarDef . createJToolBar ( ) ;
refreshLabel . setBackground ( java . awt . Color . WHITE ) ;
toolBar . setBorderPainted ( false ) ;
try {
toolbarDef . updateToolBar ( toolBar ) ;
populate ( tableData ) ;
if ( dataModel ! = null ) {
// 初始化预览按钮
setRowsLimitTableModel ( ) ;
UIToggleButton previewToggle = new UIToggleButton ( new Icon [ ] { IconUtils . readIcon ( "/com/fr/design/images/m_file/preview" ) , IconUtils . readIcon ( "/com/fr/design/images/m_file/preview" ) } , true ) ;
}
previewToggle . setToolTipText ( Toolkit . i18nText ( "Fine-Design_Report_Desensitization_Preview" ) ) ;
} catch ( Exception e1 ) {
previewToggle . setSelected ( false ) ;
}
previewToggle . addActionListener ( new ActionListener ( ) {
}
@Override
public void actionPerformed ( ActionEvent e ) {
// 切换TableModel的脱敏状态
togglePreviewTableModelDesensitizeStatus ( ) ;
// 刷新页面,展示
refreshTable ( ) ;
}
}
} ) ;
} ) ;
desensitizationPane . add ( desensitizationLabel ) ;
desensitizationPane . add ( toolBar ) ;
desensitizationPane . add ( previewToggle ) ;
return desensitizationPane ;
}
/ * *
* 设置脱敏设置的个数
*
* @param model
* /
private void setDesensitizationCount ( TableModel model ) {
if ( isDesensitizeOpened ( ) ) {
int count = model instanceof DesensitizedPreviewTableModel ? ( ( DesensitizedPreviewTableModel ) model ) . getDesensitizeColumnsCount ( ) : 0 ;
desensitizationLabel . setText ( DATA_DESENSITIZATION_CONFIG + LEFT_BRACKET + count + RIGHT_BRACKET + COUNT ) ;
} else {
desensitizationLabel . setText ( DATA_DESENSITIZATION_CONFIG ) ;
}
}
/ * *
* 初始化centerPane
*
* @return
* /
private JComponent initCenterPane ( ) {
preveiwTable = new CopyableJTable ( new TableSorter ( ) ) ;
preveiwTable = new CopyableJTable ( new TableSorter ( ) ) ;
preveiwTable . setRowSelectionAllowed ( false ) ;
preveiwTable . setRowSelectionAllowed ( false ) ;
preveiwTable . setAutoResizeMode ( JTable . AUTO_RESIZE_OFF ) ;
preveiwTable . setAutoResizeMode ( JTable . AUTO_RESIZE_OFF ) ;
return new JScrollPane ( preveiwTable ) ;
}
private void initDialog ( ) {
this . add ( new JScrollPane ( preveiwTable ) , BorderLayout . CENTER ) ;
if ( this . dialog = = null ) {
if ( this . dialog = = null ) {
this . dialog = this . showWindow ( new JFrame ( ) ) ;
this . dialog = this . showWindow ( new JFrame ( ) ) ;
}
}
}
private void initProgressBar ( ) {
progressBar = new AutoProgressBar ( this , Toolkit . i18nText ( "Fine-Design_Basic_Loading_Data" ) , "" , 0 , 100 ) {
progressBar = new AutoProgressBar ( this , Toolkit . i18nText ( "Fine-Design_Basic_Loading_Data" ) , "" , 0 , 100 ) {
@Override
public void doMonitorCanceled ( ) {
public void doMonitorCanceled ( ) {
if ( getWorker ( ) ! = null ) {
if ( getWorker ( ) ! = null ) {
getWorker ( ) . cancel ( true ) ;
getWorker ( ) . cancel ( true ) ;
@ -333,7 +182,7 @@ public class PreviewTablePane extends BasicPane {
}
}
public AutoProgressBar getProgressBar ( ) {
public AutoProgressBar getProgressBar ( ) {
return PreviewTablePane . progressBar ;
return this . progressBar ;
}
}
@Override
@Override
@ -374,10 +223,9 @@ public class PreviewTablePane extends BasicPane {
}
}
/ * *
/ * *
* 为预览表的columnIndex列着色 .
* elake : 为预览表的columnIndex列着色 .
*
* @param columnIndex
* @param columnIndex 列索引值
* @param c
* @param c 颜色
* /
* /
private void setPreviewTableColumnColor ( final int columnIndex , final Color c ) {
private void setPreviewTableColumnColor ( final int columnIndex , final Color c ) {
addLoadedListener ( new LoadedEventListener ( ) {
addLoadedListener ( new LoadedEventListener ( ) {
@ -385,7 +233,6 @@ public class PreviewTablePane extends BasicPane {
public void fireLoaded ( ) {
public void fireLoaded ( ) {
TableColumn column = preveiwTable . getColumnModel ( ) . getColumn ( columnIndex ) ;
TableColumn column = preveiwTable . getColumnModel ( ) . getColumn ( columnIndex ) ;
DefaultTableCellRenderer cellRenderer = new DefaultTableCellRenderer ( ) {
DefaultTableCellRenderer cellRenderer = new DefaultTableCellRenderer ( ) {
@Override
public Component getTableCellRendererComponent ( JTable table , Object value , boolean isSelected , boolean hasFocus , int row , int column ) {
public Component getTableCellRendererComponent ( JTable table , Object value , boolean isSelected , boolean hasFocus , int row , int column ) {
JComponent comp = ( JComponent ) super . getTableCellRendererComponent ( table , value , isSelected , hasFocus , row , column ) ;
JComponent comp = ( JComponent ) super . getTableCellRendererComponent ( table , value , isSelected , hasFocus , row , column ) ;
comp . setBackground ( c ) ;
comp . setBackground ( c ) ;
@ -406,7 +253,7 @@ public class PreviewTablePane extends BasicPane {
getInstance ( ) . preveiwTable = new SortableJTable ( new TableSorter ( ) ) ;
getInstance ( ) . preveiwTable = new SortableJTable ( new TableSorter ( ) ) ;
getInstance ( ) . preveiwTable . setRowSelectionAllowed ( false ) ;
getInstance ( ) . preveiwTable . setRowSelectionAllowed ( false ) ;
getInstance ( ) . preveiwTable . setAutoResizeMode ( JTable . AUTO_RESIZE_OFF ) ;
getInstance ( ) . preveiwTable . setAutoResizeMode ( JTable . AUTO_RESIZE_OFF ) ;
PreviewTablePane . progressBar . close ( ) ;
getInstance ( ) . progressBar . close ( ) ;
getInstance ( ) . repaint ( ) ;
getInstance ( ) . repaint ( ) ;
}
}
@ -488,7 +335,6 @@ public class PreviewTablePane extends BasicPane {
private void previewTableDataSQL ( ) throws Exception {
private void previewTableDataSQL ( ) throws Exception {
connectionBar = new AutoProgressBar ( this , Toolkit . i18nText ( "Fine-Design_Basic_Utils_Now_Create_Connection" ) , "" , 0 , 100 ) {
connectionBar = new AutoProgressBar ( this , Toolkit . i18nText ( "Fine-Design_Basic_Utils_Now_Create_Connection" ) , "" , 0 , 100 ) {
@Override
public void doMonitorCanceled ( ) {
public void doMonitorCanceled ( ) {
getWorker ( ) . cancel ( true ) ;
getWorker ( ) . cancel ( true ) ;
getDialog ( ) . setVisible ( false ) ;
getDialog ( ) . setVisible ( false ) ;
@ -503,49 +349,42 @@ public class PreviewTablePane extends BasicPane {
private void setPreviewTableColumnValue ( final Graphics g ) {
private void setPreviewTableColumnValue ( final Graphics g ) {
for ( int i = 0 ; i < preveiwTable . getColumnModel ( ) . getColumnCount ( ) ; i + + ) {
for ( int i = 0 ; i < preveiwTable . getColumnModel ( ) . getColumnCount ( ) ; i + + ) {
TableColumn column = preveiwTable . getColumnModel ( ) . getColumn ( i ) ;
TableColumn column = preveiwTable . getColumnModel ( ) . getColumn ( i ) ;
DefaultTableCellRenderer cellRenderer = getDefaultTableCellRenderer ( ) ;
DefaultTableCellRenderer cellRenderer = new DefaultTableCellRenderer ( ) {
column . setCellRenderer ( cellRenderer ) ;
public Component getTableCellRendererComponent ( JTable table , Object value , boolean isSelected , boolean hasFocus , int row , int column ) {
}
JComponent comp = ( JComponent ) super . getTableCellRendererComponent ( table , value , isSelected , hasFocus , row , column ) ;
}
Font f = table . getFont ( ) ;
/ * *
//默认在系统不支持 无法显示时 如自造的字 ,字体设置为空.
* 默认表格格子渲染器
Font defaultShowFont = FRFont . getInstance ( "" , f . getStyle ( ) , f . getSize ( ) ) ;
*
if ( value instanceof String ) {
* @return
String str = ( String ) value ;
* /
for ( int j = 0 ; j < str . length ( ) ; j + + ) {
private DefaultTableCellRenderer getDefaultTableCellRenderer ( ) {
char c = str . charAt ( j ) ;
return new DefaultTableCellRenderer ( ) {
if ( ! f . canDisplay ( c ) ) {
@Override
table . setFont ( defaultShowFont ) ;
public Component getTableCellRendererComponent ( JTable table , Object value , boolean isSelected , boolean hasFocus , int row , int column ) {
}
JComponent comp = ( JComponent ) super . getTableCellRendererComponent ( table , value , isSelected , hasFocus , row , column ) ;
Font f = table . getFont ( ) ;
//默认在系统不支持 无法显示时 如自造的字 ,字体设置为空.
Font defaultShowFont = FRFont . getInstance ( "" , f . getStyle ( ) , f . getSize ( ) ) ;
if ( value instanceof String ) {
String str = ( String ) value ;
for ( int j = 0 ; j < str . length ( ) ; j + + ) {
char c = str . charAt ( j ) ;
if ( ! f . canDisplay ( c ) ) {
table . setFont ( defaultShowFont ) ;
}
}
}
}
return comp ;
}
}
return comp ;
} ;
}
column . setCellRenderer ( cellRenderer ) ;
} ;
}
}
}
private void setWorker ( ) {
private void setWorker ( ) {
worker = new SwingWorker < TableModel , Void > ( ) {
worker = new SwingWorker < PreviewTableModel , Void > ( ) {
protected PreviewTableModel doInBackground ( ) throws Exception {
@Override
protected TableModel doInBackground ( ) throws Exception {
connectionBar . start ( ) ;
connectionBar . start ( ) ;
try {
try {
testDBTableDataConnection ( tableData ) ;
if ( tableData instanceof DBTableData ) {
boolean status = DataOperator . getInstance ( ) . testConnection ( ( ( DBTableData ) tableData ) . getDatabase ( ) ) ;
if ( ! status ) {
throw new Exception ( Toolkit . i18nText ( "Fine-Design_Basic_Database_Connection_Failed" ) ) ;
}
}
} finally {
} finally {
// 将close操作放到EDT线程中
// 将close操作放到EDT线程中
UIUtil . invokeLaterIfNeeded ( ( ) - > connectionBar . close ( ) ) ;
UIUtil . invokeLaterIfNeeded ( ( ) - > connectionBar . close ( ) ) ;
@ -555,20 +394,22 @@ public class PreviewTablePane extends BasicPane {
// parameterInputDialog
// parameterInputDialog
// update之后的parameters,转成一个parameterMap,用于预览TableData
// update之后的parameters,转成一个parameterMap,用于预览TableData
PreviewTableModel previewModel = new PreviewTableModel ( previewTableData . createDataModel ( null ) , ( int ) maxPreviewNumberField . getValue ( ) ) ;
PreviewTableModel previewModel = new PreviewTableModel ( previewTableData . createDataModel ( null ) , ( int ) maxPreviewNumberField . getValue ( ) ) ;
if ( TableDataPreviewDesensitizeManager . getInstance ( ) . needDesensitize ( tableData ) ) {
for ( int i = 0 ; i < previewTableData . getColumnCount ( ) ; i + + ) {
// 数据集预览脱敏
Class < ? > cls = previewTableData . getColumnClass ( i ) ;
previewModel = TableDataPreviewDesensitizeManager . getInstance ( ) . desensitizeTableModel ( tableData , previewModel ) ;
if ( cls = = Date . class | | cls = = TIME . class | | cls = = Timestamp . class ) {
previewModel . dateIndexs . add ( i ) ;
}
}
}
dealWithPreviewTableModelColumnClass ( previewModel , previewTableData ) ;
return previewModel ;
return previewModel ;
}
}
@Override
public void done ( ) {
public void done ( ) {
try {
try {
TableModel model = get ( ) ;
PreviewTableModel model = get ( ) ;
setPreviewTableModel ( model ) ;
setModel ( model ) ;
setCurrentRows ( model . getRowCount ( ) ) ;
setPreviewTableColumnValue ( getParent ( ) . getGraphics ( ) ) ;
setPreviewTableColumnValue ( getParent ( ) . getGraphics ( ) ) ;
fireLoadedListener ( ) ;
} catch ( Exception e ) {
} catch ( Exception e ) {
if ( ! ( e instanceof CancellationException ) ) {
if ( ! ( e instanceof CancellationException ) ) {
FineLoggerFactory . getLogger ( ) . error ( e . getMessage ( ) , e ) ;
FineLoggerFactory . getLogger ( ) . error ( e . getMessage ( ) , e ) ;
@ -583,36 +424,6 @@ public class PreviewTablePane extends BasicPane {
} ;
} ;
}
}
/ * *
* 检查DBTableData连接
*
* @param tableData
* @throws Exception
* /
private void testDBTableDataConnection ( TableData tableData ) throws Exception {
if ( tableData instanceof DBTableData ) {
boolean status = DataOperator . getInstance ( ) . testConnection ( ( ( DBTableData ) tableData ) . getDatabase ( ) ) ;
if ( ! status ) {
throw new Exception ( Toolkit . i18nText ( "Fine-Design_Basic_Database_Connection_Failed" ) ) ;
}
}
}
/ * *
* 处理预览Model的列类型
*
* @param previewModel
* @param previewTableData
* /
private void dealWithPreviewTableModelColumnClass ( PreviewTableModel previewModel , EmbeddedTableData previewTableData ) {
for ( int i = 0 ; i < previewTableData . getColumnCount ( ) ; i + + ) {
Class < ? > cls = previewTableData . getColumnClass ( i ) ;
if ( cls = = Date . class | | cls = = TIME . class | | cls = = Timestamp . class ) {
previewModel . dateIndexs . add ( i ) ;
}
}
}
/ * *
/ * *
* 直接预览存储过程的一个返回数据集 , 没有实际值和显示值
* 直接预览存储过程的一个返回数据集 , 没有实际值和显示值
*
*
@ -721,61 +532,9 @@ public class PreviewTablePane extends BasicPane {
} catch ( Exception e ) {
} catch ( Exception e ) {
previewModel = new PreviewTableModel ( ( int ) maxPreviewNumberField . getValue ( ) ) ;
previewModel = new PreviewTableModel ( ( int ) maxPreviewNumberField . getValue ( ) ) ;
}
}
setPreviewTableModel ( previewModel ) ;
setModel ( previewModel ) ;
setCurrentRows ( previewModel . getRowCount ( ) ) ;
}
/ * *
* 切换TableModel的展示状态
* /
private void togglePreviewTableModelDesensitizeStatus ( ) {
if ( ! isDesensitizeOpened ( ) ) {
// 未启用数据脱敏时,不需要切换
return ;
}
TableSorter tableSorter = ( TableSorter ) preveiwTable . getModel ( ) ;
TableModel originTableModel = tableSorter . getTableModel ( ) ;
if ( originTableModel instanceof DesensitizedPreviewTableModel ) {
( ( DesensitizedPreviewTableModel ) originTableModel ) . toggleNeedDesensite ( ) ;
}
}
/ * *
* 刷新一下预览页面 , 用于切换脱敏和非脱敏时的显示
* /
private void refreshTable ( ) {
TableModel originTableModel = getCurrentTableModel ( ) ;
setPreviewTableModel ( originTableModel ) ;
}
/ * *
* 获取当前的TableModel , 已经除掉了TableSorter的包装
*
* @return
* /
private TableModel getCurrentTableModel ( ) {
TableSorter tableSorter = ( TableSorter ) preveiwTable . getModel ( ) ;
return tableSorter . getTableModel ( ) ;
}
/ * *
* 设置预览TableModel
*
* @param previewTableModel
* /
private void setPreviewTableModel ( TableModel previewTableModel ) {
setDesensitizationCount ( previewTableModel ) ;
setModel ( previewTableModel ) ;
setCurrentRows ( previewTableModel . getRowCount ( ) ) ;
fireLoadedListener ( ) ;
fireLoadedListener ( ) ;
}
/ * *
* 数据脱敏是否启用
* @return
* /
private boolean isDesensitizeOpened ( ) {
return tableData instanceof DesensitizationTableData & &
( ( DesensitizationTableData ) tableData ) . getDesensitizationConfig ( ) . isDesensitizeOpened ( ) ;
}
}
}
}