package com.totvslabs.mdm.client.ui;
import java.awt.Component;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import com.totvslabs.mdm.client.pojo.JDBCFieldVO;
import com.totvslabs.mdm.client.pojo.JDBCTableVO;
import com.totvslabs.mdm.client.pojoTSA.MasterConfigurationData;
import com.totvslabs.mdm.client.ui.events.JDBCConnectionStabilizedDispatcher;
import com.totvslabs.mdm.client.ui.events.JDBCConnectionStabilizedEvent;
import com.totvslabs.mdm.client.ui.events.JDBCConnectionStabilizedListener;
import com.totvslabs.mdm.client.ui.events.JDBCTableSelectedDispatcher;
import com.totvslabs.mdm.client.ui.events.JDBCTableSelectedEvent;
import com.totvslabs.mdm.client.util.JDBCConnectionFactory;
public class JDBCEntities extends PanelAbstract implements JDBCConnectionStabilizedListener {
private static final long serialVersionUID = 1L;
private JLabel labelTable;
private JComboBox<JDBCTableVO> comboTable;
private JTable tableFieldsJDBC;
private JDBCFieldsTableModel tableModel;
private JScrollPane scrollBarEntitiesMDM;
private JLabel labelTemplateName;
private JTextField textTemplateName;
private JLabel labelBatchSize;
private JTextField textBatchSize;
private JLabel labelCompressOption;
private JCheckBox checkBoxCompress;
private JDBCConnectionStabilizedEvent jdbcConnectionStabilizedEvent;
public JDBCEntities(){
super(2, 17, " MDM Entities");
this.labelTable = new JLabel("Table: ");
this.comboTable = new JComboBox<JDBCTableVO>();
this.tableModel = new JDBCFieldsTableModel();
this.tableFieldsJDBC = new JTable(this.tableModel);
this.tableFieldsJDBC.setFillsViewportHeight(true);
this.scrollBarEntitiesMDM = new JScrollPane(this.tableFieldsJDBC);
this.labelTemplateName = new JLabel("Type: ");
this.textTemplateName = new JTextField(20);
this.labelCompressOption = new JLabel("Compress: ");
this.checkBoxCompress = new JCheckBox("Yes!", true);
this.labelBatchSize = new JLabel("Batch Size (records): ");
this.textBatchSize = new JTextField("500", 20);
this.initializeLayout();
}
public void initializeLayout() {
this.add(this.labelTable);
this.add(this.comboTable);
this.add(this.labelTemplateName);
this.add(this.textTemplateName);
this.add(this.labelBatchSize);
this.add(this.textBatchSize);
this.add(this.labelCompressOption);
this.add(this.checkBoxCompress);
this.add(new JLabel());
this.add(this.scrollBarEntitiesMDM, 2, true, 8, 2);
this.initColumnSizes(this.tableFieldsJDBC);
this.comboTable.addItemListener(new JDBCTableSelectClick());
JDBCConnectionStabilizedDispatcher.getInstance().addJDBCConnectionStabilizedListener(this);
}
@Override
public void fillComponents(MasterConfigurationData masterConfigurationData) {
if(masterConfigurationData != null) {
}
}
@Override
public void fillData(MasterConfigurationData masterConfigurationData) {
if(masterConfigurationData != null) {
}
}
private void initColumnSizes(JTable table) {
JDBCFieldsTableModel model = (JDBCFieldsTableModel) table.getModel();
TableColumn column = null;
Component comp = null;
int headerWidth = 0;
int cellWidth = 0;
Object[] longValues = model.getRow(0);
TableCellRenderer headerRenderer = table.getTableHeader().getDefaultRenderer();
for (int i = 0; i < 4; i++) {
column = table.getColumnModel().getColumn(i);
comp = headerRenderer.getTableCellRendererComponent(null, column.getHeaderValue(), false, false, 0, 0);
headerWidth = comp.getPreferredSize().width;
comp = table.getDefaultRenderer(model.getColumnClass(i)).getTableCellRendererComponent(table, longValues[i], false, false, 0, i);
cellWidth = comp.getPreferredSize().width;
column.setPreferredWidth(Math.max(headerWidth, cellWidth));
}
}
class JDBCTableSelectClick implements ItemListener {
@Override
public void itemStateChanged(ItemEvent e) {
JDBCTableVO vo = (JDBCTableVO) e.getItem();
textTemplateName.setText(vo.getName());
JDBCConnectionStabilizedEvent event = jdbcConnectionStabilizedEvent;
JDBCConnectionFactory.loadFisicModelFields(event.getParam().getUrl(), event.getParam().getUser(), event.getParam().getPassword(), vo);
List<JDBCFieldVO> fields = vo.getFields();
tableModel.addRows(fields);
tableFieldsJDBC.updateUI();
JDBCTableSelectedEvent eventTableSelected = new JDBCTableSelectedEvent(vo, event.getParam());
JDBCTableSelectedDispatcher.getInstance().fireJDBCTableSelectedEvent(eventTableSelected);
Integer totalRecords = JDBCConnectionFactory.getTotalRecords(event.getParam(), vo);
vo.setTotalRecords(totalRecords);
}
}
class JDBCFieldsTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private String[] columnNames = {"Field", "Identifier", "Type", "Size"};
private List<JDBCFieldVO> data = new ArrayList<JDBCFieldVO>();
@SuppressWarnings({ "rawtypes", "unchecked" })
public Class getColumnClass(int c) {
Object valueAt = getValueAt(0, c);
if(valueAt != null) {
return valueAt.getClass();
}
return String.class;
}
public void addRows(List<JDBCFieldVO> vos) {
this.data.clear();
this.data.addAll(vos);
}
public void addRow(JDBCFieldVO field) {
this.data.add(field);
}
@Override
public int getRowCount() {
if(data != null) {
return data.size();
}
return 0;
}
public Object[] getRow(int row) {
Object[] rowData = new Object[this.columnNames.length];
for(int i=0; i<columnNames.length; i++) {
rowData[i] = this.getValueAt(row, i);
}
return rowData;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return this.columnNames[column];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if(this.data == null || this.data.size() == 0) {
return null;
}
JDBCFieldVO record = this.data.get(rowIndex);
switch(columnIndex) {
case 0:
return record.getName();
case 1:
return record.getIdentifier();
case 2:
return record.getType();
case 3:
return record.getSize();
}
return null;
}
}
@Override
public void onJDBCConnectionStabilizedEvent(JDBCConnectionStabilizedEvent event) {
this.comboTable.removeAllItems();
this.textTemplateName.setText("");
this.textBatchSize.setText("500");
this.jdbcConnectionStabilizedEvent = event;
this.comboTable.removeAllItems();
for (JDBCTableVO tables : event.getTables()) {
this.comboTable.addItem(tables);
}
}
public JTextField getTextTemplateName() {
return textTemplateName;
}
public JTextField getTextBatchSize() {
return textBatchSize;
}
public JCheckBox getCheckBoxCompress() {
return checkBoxCompress;
}
}