org.hwo.pulscounter/src/org/hwo/pulscounter/ui/ExportSettingsEditorDialog....

348 lines
13 KiB
Java

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<TriggerType> 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("<html>\n<b>Bezeichnung dieser Exportkonfiguration</b>\n</html>");
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<TriggerType>();
cbTriggerType.setToolTipText("<html>\n<b>Auslöser</b><br/>\n<br/>\nWählt aus, welche Snapshots in diesem Export übernommen werden sollen.<br/>\n<br/>\n<b>ALL</b> alle Snapshots<br/>\n<b>INTERVALL</b> alle Snapshots, welche aufgrund eines abgelaufenen Intervall aufgezeichnet wurden.<br/>\n<i>(nähere Auswahl durch <u>Quelle</u></i>)<br/>\n<b>TRIGGER</b> alle Snapshots, welche aufgrund eines Impulses auf einem als Trigger konfigurierten Kanal aufgezeichnet wurden.<br/>\n<i>(nähere Auswahl durch <u>Quelle</u></i>)<br/>\n</html>");
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("<html>\n<b>Quelle</b><br/>\n<br/>\nSchränkt den eingestellten Auslöser weiter ein.<br/>\n<br/>\nFür den Auslöser <u>INTERVALL</u> bezeichnet Quelle die Nummer des Intervalls. 0 bedeutet alle Intervalle.<br/>\nFür den Auslöser <u>TRIGGER</u> bezeichnet Quelle die Nummer des Kanals. 0 bedeutet alle Kanäle.<br/>\n</html>");
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("<html>\n<b>Exportverzeichnis</b><br/>\n<br/>\nWählen Sie ein Verzeichnis, in dem die exportierten Dateien erstellt werden sollen.\n</html>");
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("<html>\n<b>Dateiname</b><br/>\n<br/>\nGibt den Dateinamen an, unter welchem die Daten gespeichert werden sollen.<br/>\nHier können auch einige Platzhalter verwendet werden:<br/>\n<br/>\n<b>%Y</b> Die Jahreszahl des Snapshotdatums.<br/>\n<b>%M</b> Der Monat des Snapshotdatums.<br/>\n<b>%D</b> Das Tagesdatum des Snapshotdatums.<br/>\n<br/>\nDie Platzhalter werden beim exportieren durch die entsprechenden Werte ersetzt. Dadurch kann eine Exportkonfiguration<br/>\ndie Daten auf mehrer Dateien verteilen.\n</html>");
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("<html>\n<b>Veränderungen berechnen</b><br/>\n<br/>\nIn den Exportdateien wird die Differenz der Zählerstände zum jeweils davor liegenden Wert ausgegeben.\n</html>");
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("<html>\n<b>Erweitertes Dateiformat</b><br/>\n<br/>\nEs werden zusätzliche Spalten mit Momentandaten bei der Aufzeichnung des Zählerstandes ausgegeben.\n</html>");
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("<html>\n<b>Im Batch- Modus ausführen</b><br/>\n<br/>\nDieses Exportkonfiguration soll automatisch ausgeführt werden, wenn die Software<br/>\nmit dem Kommandozeilenargument <i>-b</i> gestartet wurde.\n</html>");
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());
}
}
}