package net.codjo.segmentation.gui.importParam; import net.codjo.gui.toolkit.path.FilePathField; import net.codjo.gui.toolkit.swing.CheckBoxRenderer; import net.codjo.gui.toolkit.util.ErrorDialog; import net.codjo.gui.toolkit.waiting.WaitingPanel; import net.codjo.mad.client.request.Field; import net.codjo.mad.client.request.RequestException; import net.codjo.mad.client.request.Row; import net.codjo.mad.gui.framework.GuiContext; import net.codjo.mad.gui.request.ListDataSource; import net.codjo.mad.gui.request.Position; import net.codjo.mad.gui.request.Preference; import net.codjo.mad.gui.request.RequestTable; import net.codjo.mad.gui.request.RequestToolBar; import net.codjo.mad.gui.request.util.RequestTableRendererSorter; import net.codjo.segmentation.gui.ImportExportProgresListener; import net.codjo.util.string.StringUtil; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JInternalFrame; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; import javax.swing.event.DocumentListener; public class ImportParametersGui extends JInternalFrame implements ImportExportProgresListener { private JButton importButton; private JButton cancelButton; private FilePathField importFileName; private RequestToolBar requestToolbar; private JPanel mainPanel; private JRadioButton classificationRadio; private JRadioButton sleeveRadio; private JPanel cardPanel; private RequestTable axeImportAnomaly = new RequestTable(new NoLoadListDataSource()); private RequestTable sleeveImportAnomaly = new RequestTable(new NoLoadListDataSource()); private CardLayout cardLayout; private GuiContext guiContext; private WaitingPanel waitingPanel = new WaitingPanel(); private JButton clearActionButton; public ImportParametersGui(GuiContext guiContext, Preference classificationLogPreference, Preference sleevePreference) { super("Import de param�trage", true, true, true, true); this.guiContext = guiContext; initNames(); initTables(classificationLogPreference, sleevePreference); initToolbar(axeImportAnomaly); initListeners(); initCardLayout(); importFileName.getFileNameField().setEditable(true); setContentPane(mainPanel); setGlassPane(waitingPanel); setPreferredSize(new Dimension(900, 600)); } public void handleInform(String infoMessage) { ; } public void handleInform(String[][] quarantine) { getWaitingPanel().stopAnimation(); if (quarantine == null || quarantine.length == 0) { return; } int rowCount = quarantine.length; int colCount = quarantine[0].length; ListDataSource dataSource; if (classificationRadio.isSelected()) { dataSource = axeImportAnomaly.getDataSource(); } else { dataSource = sleeveImportAnomaly.getDataSource(); } for (int row = 1; row < rowCount; row++) { List<Field> columns = initHeader(quarantine); Row currentRow = new Row(); currentRow.setFields(columns); for (int col = 0; col < colCount; col++) { String name = columns.get(col).getName(); String value = quarantine[row][col]; if ("sleeveDustbin".equals(name) || "terminalElement".equals(name)) { value = "1".equals(value) ? "true" : "false"; } currentRow.setFieldValue(name, value); } dataSource.addRow(currentRow); } dataSource.cancelEditMode(); if (sleeveRadio.isSelected()) { RequestTableRendererSorter model = (RequestTableRendererSorter)sleeveImportAnomaly.getModel(); model.sortByColumn(0, false); } } public void handleError(String errorMessage) { getWaitingPanel().stopAnimation(); ErrorDialog.show(this, errorMessage, errorMessage); } private void initNames() { importFileName.setName("AxeFileName"); cancelButton.setName("cancelButton"); importButton.setName("importButton"); classificationRadio.setName("classificationRadio"); sleeveRadio.setName("sleeveRadio"); } private void initListeners() { importFileName.addPropertyChangeListener("fileName", new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { importButton.setEnabled(!("".equals(evt.getNewValue()))); } }); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { dispose(); } }); classificationRadio.addActionListener(new TableListenerEvent("axeImportAnomaly", axeImportAnomaly)); sleeveRadio.addActionListener(new TableListenerEvent("sleeveImportAnomaly", sleeveImportAnomaly)); ClearLogButtonUpdater actionUpdater = new ClearLogButtonUpdater(); axeImportAnomaly.getDataSource().addPropertyChangeListener(actionUpdater); sleeveImportAnomaly.getDataSource().addPropertyChangeListener(actionUpdater); } private void initTables(Preference classificationPreference, Preference sleevePreference) { axeImportAnomaly.setPreference(classificationPreference); sleeveImportAnomaly.setPreference(sleevePreference); sleeveImportAnomaly.setCellRenderer("sleeveDustbin", new CheckBoxRenderer()); sleeveImportAnomaly.setCellRenderer("terminalElement", new CheckBoxRenderer()); } private void initCardLayout() { cardPanel.add("axeImportAnomaly", new JScrollPane(axeImportAnomaly)); cardPanel.add("sleeveImportAnomaly", new JScrollPane(sleeveImportAnomaly)); cardLayout = (CardLayout)cardPanel.getLayout(); cardLayout.show(cardPanel, "axeImportAnomaly"); } private void initToolbar(RequestTable table) { requestToolbar.setHasExcelButton(true); requestToolbar.setHasNavigatorButton(false); requestToolbar.setHasUndoRedoButtons(false); requestToolbar.setHasValidationButton(false); requestToolbar.init(guiContext, table); requestToolbar.removeAction(RequestToolBar.ACTION_ADD); requestToolbar.removeAction(RequestToolBar.ACTION_CLEAR); requestToolbar.removeAction(RequestToolBar.ACTION_DELETE); requestToolbar.removeAction(RequestToolBar.ACTION_EDIT); requestToolbar.removeAction(RequestToolBar.ACTION_LOAD); requestToolbar.removeAction(RequestToolBar.ACTION_NEXT_PAGE); requestToolbar.removeAction(RequestToolBar.ACTION_PREVIOUS_PAGE); requestToolbar.removeAction(RequestToolBar.ACTION_RELOAD); ClearLogAction clearLogAction = new ClearLogAction(guiContext, table); requestToolbar.add(clearLogAction, "clearLogAction", Position.last(), false); clearActionButton = requestToolbar.getButtonInToolBar(clearLogAction); clearActionButton.setEnabled(false); } private List<Field> initHeader(String[][] quarantine) { List<Field> columns = new ArrayList<Field>(); for (int i = 0; i < quarantine[0].length; i++) { String columnName = StringUtil.sqlToJavaName(quarantine[0][i]); Field currentField = new Field(columnName, "null"); columns.add(currentField); } return columns; } public void setImportButtonListener(ActionListener listener) { importButton.addActionListener(listener); } public FilePathField getImportFilePathField() { return importFileName; } public boolean isClassificationSelected() { return classificationRadio.isSelected(); } public WaitingPanel getWaitingPanel() { return waitingPanel; } public RequestTable getAxeImportAnomaly() { return axeImportAnomaly; } public RequestTable getSleeveImportAnomaly() { return sleeveImportAnomaly; } private RequestTable getCurrentTable() { if (classificationRadio.isSelected()) { return axeImportAnomaly; } else { return sleeveImportAnomaly; } } private void updateButton() { RequestTable table = getCurrentTable(); int rowCount = table.getDataSource().getRowCount(); boolean enabled = rowCount > 0; clearActionButton.setEnabled(enabled); } public void setValidFileListener(DocumentListener documentListener) { importFileName.getFileNameField().getDocument().addDocumentListener(documentListener); } void setEnabledImportButton(boolean enabled) { importButton.setEnabled(enabled); } private class NoLoadListDataSource extends ListDataSource { @Override public void load() throws RequestException { ; } } private class ClearLogButtonUpdater implements PropertyChangeListener { @SuppressWarnings({"InnerClassTooDeeplyNested"}) public void propertyChange(final PropertyChangeEvent event) { SwingUtilities.invokeLater(new Runnable() { public void run() { updateButton(); } }); } } private class TableListenerEvent implements ActionListener { private String layoutId; private RequestTable table; private TableListenerEvent(String layoutId, RequestTable table) { this.layoutId = layoutId; this.table = table; } public void actionPerformed(ActionEvent event) { cardLayout.show(cardPanel, layoutId); initToolbar(table); updateButton(); repaint(); } } }