package org.sean.fugao.client.ui.viewer.config;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.sean.fugao.client.util.ApplicationMessages;
import org.sean.fugao.util.table.domain.ColumnEntity;
import org.sean.fugao.util.table.domain.TableEntity;
public class TableViewerFactory{
private static Log logger = LogFactory.getLog(TableViewerFactory.class);
public static final String COLUMN_ATTRIBUTE_NAME = "attribute_name";
public static final String BOOLEAN_CONVERT_TYPE = "boolean_convert_type";
public static final String DATE_CONVERT_PATTERN = "date_convert_pattern";
public static final String DECIMAL_CONVERT_PATTERN = "decimal_convert_pattern";
public static final String TABLEVIEWER_ID = "table_viewer_id";
/*
Spring注入,格式如下
*/
private static Map tableDefinitions = new HashMap();
public static TableViewer getTableViewer(Composite parent, int style, Object layoutData, String className){
TableEntity tableEntity = tableDefinitions.get(className);
TableViewer tableViewer = null;
if (tableEntity != null) {
tableViewer = new TableViewer(parent, style);
tableViewer.setData(TABLEVIEWER_ID, tableViewer.toString());
Table table = tableViewer.getTable();
table.setLayoutData(layoutData);
table.setHeaderVisible(tableEntity.isHeaderVisible());
table.setLinesVisible(tableEntity.isLineVisible());
Field messageField = null;
int size = tableEntity.getColumns().size();
String[] columnProperties = new String[size];
for (int i = 0; i < size; i++){
ColumnEntity column = tableEntity.getColumns().get(i);
TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
TableColumn tableColumn = tableViewerColumn.getColumn();
tableColumn.setWidth(column.getColumnWidth());
tableColumn.setText("");
String label = "";
String columnLabel = column.getColumnLabel();
try {
messageField = ApplicationMessages.class.getDeclaredField(columnLabel);
if (messageField != null){
label = (String) messageField.get(ApplicationMessages.class);
}
} catch (SecurityException e) {
logger.error("SecurityException", e);
} catch (NoSuchFieldException e) {
logger.error("Cannot found field [" + columnLabel + "] in ApplicationMessages", e);
} catch (IllegalArgumentException e) {
logger.error("IllegalArgumentException", e);
} catch (IllegalAccessException e) {
logger.error("IllegalAccessException", e);
}
if ("".equals(label)){
tableColumn.setText(columnLabel);
} else {
tableColumn.setText(label);
}
tableColumn.setData(COLUMN_ATTRIBUTE_NAME, column.getAttributeName());
columnProperties[i] = column.getAttributeName() == null ? "" : column.getAttributeName();
if (column.getBooleanConvertType() != null && !"".equals(column.getBooleanConvertType())){
tableColumn.setData(BOOLEAN_CONVERT_TYPE, column.getBooleanConvertType());
}
if (column.getDateConvertPattern() != null && !"".equals(column.getDateConvertPattern())){
tableColumn.setData(DATE_CONVERT_PATTERN, column.getDateConvertPattern());
}
if (column.getDecimalConvertPattern() != null && !"".equals(column.getDecimalConvertPattern())){
tableColumn.setData(DECIMAL_CONVERT_PATTERN, column.getDecimalConvertPattern());
}
}
tableViewer.setColumnProperties(columnProperties);
}
return tableViewer;
}
public void setTableDefinitions(Map tableDefinition) {
tableDefinitions = tableDefinition;
}
public Map getTableDefinitions() {
return tableDefinitions;
}
}