/* * Copyright 2007 - 2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.sf.jailer.ui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.DefaultComboBoxModel; import net.sf.jailer.datamodel.DataModel; /** * Dialog for XML settings. * * @author Ralf Wisser */ public class XmlSettingsDialog extends javax.swing.JDialog { /** Creates new form XmlSettingsDialog */ public XmlSettingsDialog(java.awt.Frame parent) { super(parent, true); initComponents(); setModal(true); setLocation(100, 150); datePattern.getEditor().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateExamples(); } }); timestampPattern.getEditor().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateExamples(); } }); datePattern.setModel(new DefaultComboBoxModel(datePatternOptions)); timestampPattern.setModel(new DefaultComboBoxModel(timePatternOptions)); timestampPattern.getEditor().setItem("yyyy.MM.dd.-H.mm.ss "); timestampExample.setText("yyyy.MM.dd.-H.mm.ss "); pack(); UIUtil.initPeer(); } private boolean okClicked; /** * Edits the XML settings of a data model. * * @param dataModel the data model * @return <code>true</code> iff settings are changed */ public boolean edit(DataModel dataModel) { DataModel.XmlSettings xmlSettings = dataModel.getXmlSettings(); datePattern.getEditor().setItem(xmlSettings.datePattern); timestampPattern.getEditor().setItem(xmlSettings.timestampPattern); rootTag.setText(xmlSettings.rootTag); noRootTag.setSelected("".equals(xmlSettings.rootTag)); rootTag.setEditable(!"".equals(xmlSettings.rootTag)); updateExamples(); okClicked = false; setVisible(true); if (okClicked) { boolean change = false; String newDatePattern = datePattern.getEditor().getItem().toString(); String newTimestampPattern = timestampPattern.getEditor().getItem().toString(); String newRootTag = rootTag.getText().trim(); if (noRootTag.isSelected()) { newRootTag = ""; } if (!newDatePattern.equals(xmlSettings.datePattern)) { xmlSettings.datePattern = newDatePattern; change = true; } if (!newTimestampPattern.equals(xmlSettings.timestampPattern)) { xmlSettings.timestampPattern = newTimestampPattern; change = true; } if (!newRootTag.equals(xmlSettings.rootTag)) { xmlSettings.rootTag = newRootTag; change = true; } return change; } return false; } private void updateExamples() { Date now = new Date(); String dateExampleText = "- invalid pattern -"; String timestampExampleText = "- invalid pattern -"; try { dateExampleText = new SimpleDateFormat(datePattern.getEditor().getItem().toString()).format(now); } catch (Exception e) { // ignore } try { timestampExampleText = new SimpleDateFormat(timestampPattern.getEditor().getItem().toString()).format(now); } catch (Exception e) { // ignore } dateExample.setText(dateExampleText); timestampExample.setText(timestampExampleText); } private static String[] datePatternOptions = new String[] { "dd-MM-yyyy", "dd/MM/yyyy", "dd.MM.yyyy", "dd.MMM.yyyy", "dd MMMM yyyy", "MM-dd-yyyy", "MM/dd/yyyy", "MMM d, yyyy", "yyyy.d.M", "dd MMM yyyy", "dd-MMM-yyyy", "dd.MM.yyyy.", "d MMM yyyy", "d MMM, yyyy", "d-MMM-yyyy", "d/MMM/yyyy", "d/MM/yyyy", "d.MM.yyyy", "d.M.yyyy", "Gy.MM.dd", "yyyy-M-d", "yyyy/M/d", "yyyy. M. d", "yyyy.M.d", "yyyy'?'M'?'d'?'", "yyyy-MM-dd", "yyyy/MM/dd", "yyyy.MM.dd", "yyyy.MM.dd.", "yyyy MMM d", "yyyy-MMM-dd", "dd MMM yy", "dd-MMM-yy", "MM d, yy" }; private static String[] timePatternOptions = new String[] { "dd/MM/yyyy HH:mm:ss", "dd.MM.yyyy HH:mm:ss", "dd.MM.yyyy. HH.mm.ss", "dd.MM.yyyy H:mm:ss", "yyyy-MM-dd HH:mm:ss", "yyyy.MM.dd HH:mm:ss", "yyyy/MM/dd H:mm:ss", "yyyy.MM.dd. H:mm:ss", "yyyy-MMM-dd HH:mm:ss", "dd/MM/yyyy HH.mm.ss", "dd.MM.yyyy HH.mm.ss", "dd.MM.yyyy. HH.mm.ss", "dd.MM.yyyy H.mm.ss", "yyyy-MM-dd HH.mm.ss", "yyyy.MM.dd HH.mm.ss", "yyyy/MM/dd H.mm.ss", "yyyy.MM.dd. H.mm.ss", "yyyy-MMM-dd HH.mm.ss", "dd/MM/yyyy-HH.mm.ss", "dd.MM.yyyy-HH.mm.ss", "dd.MM.yyyy.-HH.mm.ss", "dd.MM.yyyy-H.mm.ss", "yyyy-MM-dd-HH.mm.ss", "yyyy.MM.dd-HH.mm.ss", "yyyy/MM/dd-H.mm.ss", "yyyy.MM.dd.-H.mm.ss", "yyyy-MMM-dd-HH.mm.ss", "dd MMM yy H:mm:ss", "dd MMM yyyy HH:mm:ss", "dd-MMM-yyyy HH:mm:ss", "dd.MMM.yyyy HH:mm:ss", "dd-MMM-yyyy H:mm:ss", "dd-MM-yyyy HH:mm:ss", "d MMM yyyy HH:mm:ss", "d-MMM-yyyy HH:mm:ss", "d MMM yyyy H:mm:ss", "d MMM yyyy, H:mm:ss", "d-MMM-yyyy H:mm:ss", "d-MMM-yyyy H.mm.ss", "d/MMM/yyyy H:mm:ss", "d/MM/yyyy HH:mm:ss", "d.MM.yyyy H:mm:ss", "d.M.yyyy HH:mm:", "d.M.yyyy HH:mm:ss", "d.M.yyyy H:mm:ss", "d.M.yyyy H.mm.ss", "Gy.MM.dd H:mm:ss", "HH:mm:ss dd-MM-yyyy", "HH:mm:ss dd/MM/yyyy", "yyyy.d.M HH:mm:ss", "yyyy.M.d HH.mm.ss", "yyyy MMM d HH:mm:ss" }; /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); datePattern = new net.sf.jailer.ui.JComboBox(); timestampPattern = new net.sf.jailer.ui.JComboBox(); rootTag = new javax.swing.JTextField(); dateExample = new javax.swing.JLabel(); timestampExample = new javax.swing.JLabel(); noRootTag = new javax.swing.JCheckBox(); jPanel2 = new javax.swing.JPanel(); Ok = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("XML Settings"); getContentPane().setLayout(new java.awt.GridBagLayout()); jPanel1.setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; getContentPane().add(jPanel1, gridBagConstraints); jLabel1.setText("Date pattern "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 5; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(jLabel1, gridBagConstraints); jLabel2.setText("Timestamp pattern "); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 5; gridBagConstraints.gridy = 10; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(jLabel2, gridBagConstraints); jLabel3.setText("Root tag"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 5; gridBagConstraints.gridy = 15; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(jLabel3, gridBagConstraints); datePattern.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Eintrag 1", "Eintrag 2", "Eintrag 3", "Eintrag 4" })); datePattern.setEditable(true); datePattern.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { datePatternActionPerformed(evt); } }); datePattern.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { datePatternKeyTyped(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 10; gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(datePattern, gridBagConstraints); timestampPattern.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Eintrag 1", "Eintrag 2", "Eintrag 3", "Eintrag 4" })); timestampPattern.setEditable(true); timestampPattern.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { timestampPatternActionPerformed(evt); } }); timestampPattern.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { timestampPatternKeyTyped(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 10; gridBagConstraints.gridy = 10; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(timestampPattern, gridBagConstraints); rootTag.setText("jTextField1"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 10; gridBagConstraints.gridy = 15; gridBagConstraints.gridwidth = 20; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); getContentPane().add(rootTag, gridBagConstraints); dateExample.setText("jLabel4"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 20; gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 8, 0, 8); getContentPane().add(dateExample, gridBagConstraints); timestampExample.setText("jLabel5"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 20; gridBagConstraints.gridy = 10; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 8, 0, 8); getContentPane().add(timestampExample, gridBagConstraints); noRootTag.setText("no root tag"); noRootTag.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { noRootTagItemStateChanged(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 10; gridBagConstraints.gridy = 20; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; getContentPane().add(noRootTag, gridBagConstraints); jPanel2.setLayout(new java.awt.GridBagLayout()); Ok.setText("OK"); Ok.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { OkActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST; gridBagConstraints.weightx = 1.0; jPanel2.add(Ok, gridBagConstraints); cancelButton.setText("Cancel"); cancelButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelButtonActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST; jPanel2.add(cancelButton, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 10; gridBagConstraints.gridy = 100; gridBagConstraints.gridwidth = 20; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; gridBagConstraints.weighty = 1.0; getContentPane().add(jPanel2, gridBagConstraints); pack(); }// </editor-fold>//GEN-END:initComponents private void timestampPatternKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_timestampPatternKeyTyped updateExamples(); }//GEN-LAST:event_timestampPatternKeyTyped private void timestampPatternActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_timestampPatternActionPerformed updateExamples(); }//GEN-LAST:event_timestampPatternActionPerformed private void datePatternKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_datePatternKeyTyped updateExamples(); }//GEN-LAST:event_datePatternKeyTyped private void datePatternActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_datePatternActionPerformed updateExamples(); }//GEN-LAST:event_datePatternActionPerformed private void OkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_OkActionPerformed okClicked = true; setVisible(false); }//GEN-LAST:event_OkActionPerformed private void noRootTagItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_noRootTagItemStateChanged rootTag.setEditable(!noRootTag.isSelected()); }//GEN-LAST:event_noRootTagItemStateChanged private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed dispose(); }//GEN-LAST:event_cancelButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton Ok; private javax.swing.JButton cancelButton; private javax.swing.JLabel dateExample; private net.sf.jailer.ui.JComboBox datePattern; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JCheckBox noRootTag; private javax.swing.JTextField rootTag; private javax.swing.JLabel timestampExample; private net.sf.jailer.ui.JComboBox timestampPattern; // End of variables declaration//GEN-END:variables private static final long serialVersionUID = -2752715206964965549L; }