package org.hwo.pulscounter.ui; import java.awt.BorderLayout; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import org.hwo.configuration.ConfigurableObject; import org.hwo.configuration.ConfigurableObjects; import org.hwo.interactiveobjects.IInteractiveObjectEditor; import org.hwo.interactiveobjects.IObjectEditorUI; import org.hwo.pulscounter.ExportSetting; import org.hwo.pulscounter.TriggerType; import java.awt.GridBagLayout; import javax.swing.JLabel; import java.awt.GridBagConstraints; import java.awt.Insets; import javax.swing.JTextField; import javax.swing.SpinnerNumberModel; import javax.swing.JComboBox; import javax.swing.JSpinner; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.ItemListener; import java.io.File; import java.awt.event.ItemEvent; import javax.swing.JCheckBox; public class ExportSettingsEditorDialog extends JDialog implements IObjectEditorUI { private final JPanel contentPanel = new JPanel(); private ExportSetting exportSetting; private JTextField tfBenennung; private JComboBox cbTriggerType; private JSpinner spSource; private JTextField tfPath; private JTextField tfFilename; private boolean accepted; private JCheckBox cbExtended; private JCheckBox cbAutostart; private JCheckBox cbRecordDeltas; /** * Create the dialog. */ public ExportSettingsEditorDialog() { setBounds(100, 100, 620, 386); getContentPane().setLayout(new BorderLayout()); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel, BorderLayout.CENTER); GridBagLayout gbl_contentPanel = new GridBagLayout(); gbl_contentPanel.columnWidths = new int[]{0, 0, 0, 0}; gbl_contentPanel.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0}; gbl_contentPanel.columnWeights = new double[]{0.0, 1.0, 0.0, Double.MIN_VALUE}; gbl_contentPanel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; contentPanel.setLayout(gbl_contentPanel); { JLabel lblBenennung = new JLabel("Benennung:"); GridBagConstraints gbc_lblBenennung = new GridBagConstraints(); gbc_lblBenennung.anchor = GridBagConstraints.EAST; gbc_lblBenennung.insets = new Insets(0, 0, 5, 5); gbc_lblBenennung.gridx = 0; gbc_lblBenennung.gridy = 0; contentPanel.add(lblBenennung, gbc_lblBenennung); } { tfBenennung = new JTextField(); tfBenennung.setToolTipText("\nBezeichnung dieser Exportkonfiguration\n"); GridBagConstraints gbc_tfBenennung = new GridBagConstraints(); gbc_tfBenennung.gridwidth = 2; gbc_tfBenennung.insets = new Insets(0, 0, 5, 0); gbc_tfBenennung.fill = GridBagConstraints.HORIZONTAL; gbc_tfBenennung.gridx = 1; gbc_tfBenennung.gridy = 0; contentPanel.add(tfBenennung, gbc_tfBenennung); tfBenennung.setColumns(10); } { JLabel lblAuslser = new JLabel("Auslöser:"); GridBagConstraints gbc_lblAuslser = new GridBagConstraints(); gbc_lblAuslser.anchor = GridBagConstraints.EAST; gbc_lblAuslser.insets = new Insets(0, 0, 5, 5); gbc_lblAuslser.gridx = 0; gbc_lblAuslser.gridy = 1; contentPanel.add(lblAuslser, gbc_lblAuslser); } { cbTriggerType = new JComboBox(); cbTriggerType.setToolTipText("\nAuslöser
\n
\nWählt aus, welche Snapshots in diesem Export übernommen werden sollen.
\n
\nALL alle Snapshots
\nINTERVALL alle Snapshots, welche aufgrund eines abgelaufenen Intervall aufgezeichnet wurden.
\n(nähere Auswahl durch Quelle)
\nTRIGGER alle Snapshots, welche aufgrund eines Impulses auf einem als Trigger konfigurierten Kanal aufgezeichnet wurden.
\n(nähere Auswahl durch Quelle)
\n"); cbTriggerType.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if (exportSetting != null){ exportSetting.setTriggerType((TriggerType)cbTriggerType.getSelectedItem()); updateSourceEditor(); } } }); cbTriggerType.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { } }); cbTriggerType.addItem(TriggerType.ALL); cbTriggerType.addItem(TriggerType.Trigger); cbTriggerType.addItem(TriggerType.Intervall); cbTriggerType.addItem(TriggerType.Timer); cbTriggerType.addItem(TriggerType.Manual); GridBagConstraints gbc_cbTriggerType = new GridBagConstraints(); gbc_cbTriggerType.insets = new Insets(0, 0, 5, 5); gbc_cbTriggerType.fill = GridBagConstraints.HORIZONTAL; gbc_cbTriggerType.gridx = 1; gbc_cbTriggerType.gridy = 1; contentPanel.add(cbTriggerType, gbc_cbTriggerType); } { JLabel lblQuelle = new JLabel("Quelle:"); GridBagConstraints gbc_lblQuelle = new GridBagConstraints(); gbc_lblQuelle.insets = new Insets(0, 0, 5, 5); gbc_lblQuelle.gridx = 0; gbc_lblQuelle.gridy = 2; contentPanel.add(lblQuelle, gbc_lblQuelle); } { spSource = new JSpinner(); spSource.setToolTipText("\nQuelle
\n
\nSchränkt den eingestellten Auslöser weiter ein.
\n
\nFür den Auslöser INTERVALL bezeichnet Quelle die Nummer des Intervalls. 0 bedeutet alle Intervalle.
\nFür den Auslöser TRIGGER bezeichnet Quelle die Nummer des Kanals. 0 bedeutet alle Kanäle.
\n"); spSource.setModel(new SpinnerNumberModel(0, -1, 255, 1)); GridBagConstraints gbc_spSource = new GridBagConstraints(); gbc_spSource.insets = new Insets(0, 0, 5, 5); gbc_spSource.anchor = GridBagConstraints.WEST; gbc_spSource.gridx = 1; gbc_spSource.gridy = 2; contentPanel.add(spSource, gbc_spSource); } { JLabel lblNewLabel = new JLabel("Verzeichnis:"); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.anchor = GridBagConstraints.EAST; gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 3; contentPanel.add(lblNewLabel, gbc_lblNewLabel); } { tfPath = new JTextField(); tfPath.setToolTipText("\nExportverzeichnis
\n
\nWählen Sie ein Verzeichnis, in dem die exportierten Dateien erstellt werden sollen.\n"); tfPath.setEditable(false); GridBagConstraints gbc_tfPath = new GridBagConstraints(); gbc_tfPath.insets = new Insets(0, 0, 5, 5); gbc_tfPath.fill = GridBagConstraints.HORIZONTAL; gbc_tfPath.gridx = 1; gbc_tfPath.gridy = 3; contentPanel.add(tfPath, gbc_tfPath); tfPath.setColumns(10); } { JButton btnDurchsuchen = new JButton("durchsuchen..."); btnDurchsuchen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.setCurrentDirectory(new File(tfPath.getText())); if (fc.showOpenDialog(ExportSettingsEditorDialog.this)==JFileChooser.APPROVE_OPTION){ tfPath.setText( fc.getSelectedFile().getAbsolutePath()); } } }); GridBagConstraints gbc_btnDurchsuchen = new GridBagConstraints(); gbc_btnDurchsuchen.insets = new Insets(0, 0, 5, 0); gbc_btnDurchsuchen.gridx = 2; gbc_btnDurchsuchen.gridy = 3; contentPanel.add(btnDurchsuchen, gbc_btnDurchsuchen); } { JLabel lblDateiname = new JLabel("Dateiname:"); GridBagConstraints gbc_lblDateiname = new GridBagConstraints(); gbc_lblDateiname.anchor = GridBagConstraints.EAST; gbc_lblDateiname.insets = new Insets(0, 0, 5, 5); gbc_lblDateiname.gridx = 0; gbc_lblDateiname.gridy = 4; contentPanel.add(lblDateiname, gbc_lblDateiname); } { tfFilename = new JTextField(); tfFilename.setToolTipText("\nDateiname
\n
\nGibt den Dateinamen an, unter welchem die Daten gespeichert werden sollen.
\nHier können auch einige Platzhalter verwendet werden:
\n
\n%Y Die Jahreszahl des Snapshotdatums.
\n%M Der Monat des Snapshotdatums.
\n%D Das Tagesdatum des Snapshotdatums.
\n
\nDie Platzhalter werden beim exportieren durch die entsprechenden Werte ersetzt. Dadurch kann eine Exportkonfiguration
\ndie Daten auf mehrer Dateien verteilen.\n"); GridBagConstraints gbc_tfFilename = new GridBagConstraints(); gbc_tfFilename.insets = new Insets(0, 0, 5, 5); gbc_tfFilename.fill = GridBagConstraints.HORIZONTAL; gbc_tfFilename.gridx = 1; gbc_tfFilename.gridy = 4; contentPanel.add(tfFilename, gbc_tfFilename); tfFilename.setColumns(10); } { cbRecordDeltas = new JCheckBox("Veränderungen berechnen"); cbRecordDeltas.setToolTipText("\nVeränderungen berechnen
\n
\nIn den Exportdateien wird die Differenz der Zählerstände zum jeweils davor liegenden Wert ausgegeben.\n"); GridBagConstraints gbc_dbRecordDeltas = new GridBagConstraints(); gbc_dbRecordDeltas.anchor = GridBagConstraints.WEST; gbc_dbRecordDeltas.insets = new Insets(0, 0, 5, 5); gbc_dbRecordDeltas.gridx = 1; gbc_dbRecordDeltas.gridy = 5; contentPanel.add(cbRecordDeltas, gbc_dbRecordDeltas); } { cbExtended = new JCheckBox("Erweitertes Dateiformat"); cbExtended.setToolTipText("\nErweitertes Dateiformat
\n
\nEs werden zusätzliche Spalten mit Momentandaten bei der Aufzeichnung des Zählerstandes ausgegeben.\n"); GridBagConstraints gbc_cbExtended = new GridBagConstraints(); gbc_cbExtended.anchor = GridBagConstraints.WEST; gbc_cbExtended.insets = new Insets(0, 0, 5, 5); gbc_cbExtended.gridx = 1; gbc_cbExtended.gridy = 6; contentPanel.add(cbExtended, gbc_cbExtended); } { cbAutostart = new JCheckBox("Im Batch-Modus ausführen"); cbAutostart.setToolTipText("\nIm Batch- Modus ausführen
\n
\nDieses Exportkonfiguration soll automatisch ausgeführt werden, wenn die Software
\nmit dem Kommandozeilenargument -b gestartet wurde.\n"); GridBagConstraints gbc_cbAutostart = new GridBagConstraints(); gbc_cbAutostart.anchor = GridBagConstraints.WEST; gbc_cbAutostart.insets = new Insets(0, 0, 0, 5); gbc_cbAutostart.gridx = 1; gbc_cbAutostart.gridy = 7; contentPanel.add(cbAutostart, gbc_cbAutostart); } { JPanel buttonPane = new JPanel(); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); getContentPane().add(buttonPane, BorderLayout.SOUTH); { JButton okButton = new JButton("OK"); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateObject(); accepted = true; setVisible(false); getParent().invalidate(); System.err.println(String.format("Configuration: %s",ConfigurableObjects.getConfiguration(exportSetting))); } }); okButton.setActionCommand("OK"); buttonPane.add(okButton); getRootPane().setDefaultButton(okButton); } { JButton cancelButton = new JButton("Cancel"); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(false); } }); cancelButton.setActionCommand("Cancel"); buttonPane.add(cancelButton); } } } @Override public boolean editObject(Object o) { setExportSetting((ExportSetting)o); setModal(true); setVisible(true); setModal(false); return accepted; } public ExportSetting getExportSetting() { return exportSetting; } public void setExportSetting(ExportSetting exportSetting) { this.exportSetting = exportSetting; updateEditor(); } public boolean isAccepted() { return accepted; } private void updateObject(){ exportSetting.setPath(tfPath.getText()); exportSetting.setName(tfBenennung.getText()); exportSetting.setFileName(tfFilename.getText()); exportSetting.setTriggerSource((Integer)spSource.getValue()); exportSetting.setTriggerType((TriggerType)cbTriggerType.getSelectedItem()); exportSetting.setExtended(cbExtended.isSelected()); exportSetting.setAutostart(cbAutostart.isSelected()); exportSetting.setRecordDelta(cbRecordDeltas.isSelected()); } private void updateEditor(){ if (exportSetting == null){ tfBenennung.setEnabled(false); tfBenennung.setText(""); cbTriggerType.setEnabled(false); cbTriggerType.setSelectedIndex(-1); spSource.setEnabled(false); spSource.setValue(0); tfPath.setEnabled(false); tfPath.setText(""); tfFilename.setEnabled(false); tfFilename.setText(""); cbExtended.setEnabled(false); cbAutostart.setEnabled(false); cbRecordDeltas.setEnabled(false); } else { tfBenennung.setEnabled(true); tfBenennung.setText(exportSetting.getName()); cbTriggerType.setEnabled(true); cbTriggerType.setSelectedItem(exportSetting.getTriggerType()); updateSourceEditor(); tfPath.setEnabled(true); tfPath.setText(exportSetting.getPath()); tfFilename.setEnabled(true); tfFilename.setText(exportSetting.getFileName()); cbExtended.setEnabled(true); cbExtended.setSelected(exportSetting.getExtended()); cbAutostart.setEnabled(true); cbAutostart.setSelected(exportSetting.getAutostart()); cbRecordDeltas.setEnabled(true); cbRecordDeltas.setSelected(exportSetting.getRecordDelta()); } } private void updateSourceEditor(){ if ((exportSetting.getTriggerType()==TriggerType.ALL)||(exportSetting.getTriggerType()==TriggerType.Manual)){ spSource.setValue(-1); spSource.setEnabled(false); } else { spSource.setEnabled(true); spSource.setValue(exportSetting.getTriggerSource()); } } }