/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.dataprocess.gui.launcher.configuration; import net.codjo.dataprocess.common.DataProcessConstants; import net.codjo.dataprocess.common.context.DataProcessContext; import net.codjo.dataprocess.common.model.ArgList; import net.codjo.dataprocess.common.model.ArgModel; import net.codjo.dataprocess.common.model.TreatmentModel; import net.codjo.dataprocess.common.util.CommonUtils; import java.awt.Component; import java.awt.Font; import java.util.ArrayList; import java.util.List; import javax.swing.DefaultListSelectionModel; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.border.EtchedBorder; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; /** * */ public class ConfigurationTable extends JTable { private boolean editable = true; private TreatmentModel treatmentModel; private ConfigTableCellRenderer configTableCellRenderer = new ConfigTableCellRenderer(); public ConfigurationTable() { this(0, 0, false); } public ConfigurationTable(int numRows, int numColumns, boolean editable) { super(numRows, numColumns); this.editable = editable; getTableHeader().setReorderingAllowed(false); getTableHeader().setDefaultRenderer(new ConfigTableHeaderRenderer()); } public TreatmentModel getTreatmentModel() { return treatmentModel; } public void setTrtMod(TreatmentModel trtMod) { this.treatmentModel = trtMod; } public ArgList getArglist() { ArgList argList = new ArgList(); List<ArgModel> args = new ArrayList<ArgModel>(); DefaultTableModel defaultListModel = ((DefaultTableModel)getModel()); for (int i = 0; i < defaultListModel.getRowCount(); i++) { ArgModel argument = new ArgModel((String)defaultListModel.getValueAt(i, 0), (String)defaultListModel.getValueAt(i, 1)); args.add(argument); } argList.setArgs(args); return argList; } @Override public boolean isCellEditable(int row, int col) { if (editable) { return col != 0; } else { return false; } } public void refresh(int repositoryId, String executionListName, DataProcessContext dataProcessContext) { DefaultTableModel defaultTableModel = ((DefaultTableModel)getModel()); for (int i = 0; i < defaultTableModel.getRowCount(); i++) { String key = (String)defaultTableModel.getValueAt(i, 0); if (key.startsWith(DataProcessConstants.LOCAL_VISIBILITY)) { key = CommonUtils.localify(repositoryId, executionListName, key.substring(DataProcessConstants.LOCAL_VISIBILITY.length())); } defaultTableModel.setValueAt(dataProcessContext.getProperty(key), i, 1); } } public void initConfigurationTableModel() { DefaultTableModel execListModel = new DefaultTableModel(new String[]{"Nom", "Valeur"}, 0); setModel(execListModel); setSelectionModel(new DefaultListSelectionModel()); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); EditorAutomaticCloser editorAutomaticCloser = new EditorAutomaticCloser((DefaultTableModel)getModel()); getModel().addTableModelListener(editorAutomaticCloser); } public void removeAllRows() { DefaultTableModel defaultListModel = ((DefaultTableModel)getModel()); while (defaultListModel.getRowCount() != 0) { defaultListModel.removeRow(0); } } @Override public TableCellRenderer getCellRenderer(int row, int column) { return configTableCellRenderer; } private class EditorAutomaticCloser implements TableModelListener { private DefaultTableModel model; EditorAutomaticCloser(DefaultTableModel model) { this.model = model; } public void tableChanged(TableModelEvent event) { model.removeTableModelListener(this); cancelAllEditors(); model.addTableModelListener(this); } private void cancelAllEditors() { for (int i = 0; i < getColumnCount(); i++) { TableCellEditor tce = getColumn(getColumnName(i)).getCellEditor(); if (tce != null) { tce.cancelCellEditing(); } } } } private class ConfigTableHeaderRenderer extends JLabel implements TableCellRenderer { ConfigTableHeaderRenderer() { setOpaque(true); setHorizontalAlignment(SwingConstants.CENTER); setHorizontalTextPosition(SwingConstants.RIGHT); setVerticalTextPosition(SwingConstants.CENTER); setBorder(new EtchedBorder(EtchedBorder.LOWERED)); } public void changeHeaderRenderer(JTable tbl) { int nbColumn = getColumnCount(); for (int i = 0; i < nbColumn; i++) { TableColumn aCol = tbl.getColumn(getColumnName(i)); aCol.setHeaderRenderer(this); } } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText((String)value); return this; } } private class ConfigTableCellRenderer extends JLabel implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setText((String)value); setFont(getFont().deriveFont(Font.PLAIN)); if (treatmentModel != null) { List<ArgModel> arguments = treatmentModel.getArguments().getArgs(); for (ArgModel argument : arguments) { if (argument.isGlobalValue() && argument.getGlobalValue().equals( ConfigurationTable.this.getModel().getValueAt(row, 0))) { setFont(getFont().deriveFont(Font.BOLD)); break; } } } return this; } } }