/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.das2.datum; import java.io.File; import java.io.FilenameFilter; import java.text.ParseException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.swing.JDialog; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableModel; /** * Experiment with a tool for quickly creating time templates. This has * a fair amount of work to be done, but I think it would be useful: * 1. variable length fields need to be supported. * 2. there's a bug where the indices sent to the field picker are not adjusted for template lengths. * 3. support for recognizing enums. * 4. controls/columns added for enums in table. * @author jbf */ public class TimeTemplator extends javax.swing.JPanel { private String[] formatted; /** * Creates new form TimeTemplator */ public TimeTemplator() { initComponents(); } /** * 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. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); templateTextField = new javax.swing.JTextField(); fieldTypeButton = new javax.swing.JButton(); sortByButton = new javax.swing.JButton(); jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null}, {null, null}, {null, null}, {null, null} }, new String [] { "Title 1", "Title 2" } )); jScrollPane1.setViewportView(jTable1); templateTextField.setText("rte_2066281937_20151101_050235_jbf.xml"); templateTextField.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { templateTextFieldMouseClicked(evt); } }); fieldTypeButton.setText("Field Type..."); fieldTypeButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { fieldTypeButtonActionPerformed(evt); } }); sortByButton.setText("Sort By"); sortByButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { sortByButtonActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 583, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(templateTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 1, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(fieldTypeButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(sortByButton, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE)) ); layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {fieldTypeButton, sortByButton}); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(templateTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(fieldTypeButton) .addComponent(sortByButton)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 275, Short.MAX_VALUE)) ); }// //GEN-END:initComponents private void templateTextFieldMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_templateTextFieldMouseClicked if ( evt.getClickCount()==2 ) { } }//GEN-LAST:event_templateTextFieldMouseClicked private void fieldTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fieldTypeButtonActionPerformed int i0= templateTextField.getSelectionStart(); int i1= templateTextField.getSelectionEnd(); TimeTemplatorFieldPicker ttfp= new TimeTemplatorFieldPicker(); ttfp.setFormatted(formatted); ttfp.setTemplate(templateTextField.getText()); ttfp.setSelection(i0,i1); JDialog d= new JDialog((JDialog)SwingUtilities.getWindowAncestor(this),true); d.getContentPane().add(ttfp); d.pack(); d.setLocationRelativeTo(this); d.setVisible(true); templateTextField.setText(ttfp.getTemplate()); }//GEN-LAST:event_fieldTypeButtonActionPerformed private void sortByButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sortByButtonActionPerformed final int i0= templateTextField.getSelectionStart(); final int i1= templateTextField.getSelectionEnd(); if ( i0==i1 ) { setFormattedTable( formatted ); return; } int imax= Integer.MIN_VALUE; int imin= Integer.MAX_VALUE; if ( this.formatted!=null ) { Map other= new LinkedHashMap(); for ( String formatted1 : formatted ) { if ( i0>=formatted1.length() ) { continue; } String s = formatted1.substring(i0, i1); // extract the field try { int i= Integer.parseInt(s); imin= Math.min( imin, i ); imax= Math.max( imax, i ); } catch ( NumberFormatException ex ) { Integer i= other.get(s); if ( i==null ) { other.put( s, 1 ); } else { other.put( s, i+1 ); } } } List sformatted= Arrays.asList(formatted); Collections.sort( sformatted, new Comparator() { @Override public int compare(Object o1, Object o2) { String s1= (String)o1; String s2= (String)o2; if ( i0>s1.length() ) { return 1; } else if ( i0>s2.length() ) { return -1; } s1= s1.substring(i0,i1); s2= s2.substring(i0,i1); return s1.compareTo(s2); } } ); setFormattedTable( sformatted.toArray(new String[sformatted.size()]) ); } }//GEN-LAST:event_sortByButtonActionPerformed private void setFormattedTable( String[] formatted ) { TimeParser tp; try { tp = TimeParser.create(templateTextField.getText()); } catch ( IllegalArgumentException ex ) { tp= null; } DefaultTableModel dtm= new DefaultTableModel(formatted.length,2); for ( int i=0; i