2016-09-06 16:49:11 +02:00
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 ) ;
2016-11-17 16:37:45 +01:00
cbTriggerType . addItem ( TriggerType . Trigger ) ;
2016-09-06 16:49:11 +02:00
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 ( ) ) ;
}
}
}