/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.ptc.tifworkbench.ui; import com.ptc.tifworkbench.jaxbbinding.ImSolution; import com.ptc.tifworkbench.generator.SolutionClassGenerator; import com.ptc.tifworkbench.worker.ClassGenWorker; import com.ptc.tifworkbench.worker.Status; import com.ptc.tifworkbench.worker.StatusReporter; import com.ptc.tifworkbench.generator.ItfClassGenerator; import com.ptc.tifworkbench.generator.TifGeneratorInterface; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; import javax.swing.JFileChooser; /** * * @author pbowden */ public class WrapperGeneratorDlg extends javax.swing.JDialog { private ImSolution solution; /** * Creates new form WrapperGeneratorDlg */ public WrapperGeneratorDlg(java.awt.Frame parent, boolean modal, ImSolution solution) { super(parent, modal); initComponents(); this.solution = solution; populateGeneratorClasses(); } /** * 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") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new javax.swing.JPanel(); progGenerate = new javax.swing.JProgressBar(); btnCancel = new javax.swing.JButton(); btnGenerate = new javax.swing.JButton(); jPanel2 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); txtPackage = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); txtDirectory = new javax.swing.JTextField(); btnSelectDir = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); comboGenerator = new javax.swing.JComboBox(); jScrollPane1 = new javax.swing.JScrollPane(); txtGenDescription = new javax.swing.JTextArea(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Generate template wrapper classes"); jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); progGenerate.setString("Classes"); progGenerate.setStringPainted(true); btnCancel.setText("Cancel"); btnCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnCancelActionPerformed(evt); } }); btnGenerate.setText("Generate"); btnGenerate.setEnabled(false); btnGenerate.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnGenerateActionPerformed(evt); } }); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(progGenerate, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addGap(0, 275, Short.MAX_VALUE) .addComponent(btnGenerate) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnCancel))) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(progGenerate, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btnCancel) .addComponent(btnGenerate)) .addContainerGap()) ); jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jLabel1.setText("Java package"); txtPackage.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { txtPackageKeyTyped(evt); } }); jLabel2.setText("Generate in directory"); txtDirectory.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { txtDirectoryKeyTyped(evt); } }); btnSelectDir.setText("jButton1"); btnSelectDir.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnSelectDirActionPerformed(evt); } }); jLabel3.setText("Generator class"); comboGenerator.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { comboGeneratorActionPerformed(evt); } }); txtGenDescription.setColumns(20); txtGenDescription.setRows(5); jScrollPane1.setViewportView(txtGenDescription); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(comboGenerator, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(txtPackage) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(txtDirectory) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnSelectDir, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1) .addComponent(jLabel2) .addComponent(jLabel3)) .addGap(0, 0, Short.MAX_VALUE)) .addComponent(jScrollPane1)) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(txtPackage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(txtDirectory, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btnSelectDir)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(comboGenerator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 70, Short.MAX_VALUE) .addContainerGap()) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)) ); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-463)/2, (screenSize.height-361)/2, 463, 361); }// </editor-fold>//GEN-END:initComponents private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed this.setVisible(false); }//GEN-LAST:event_btnCancelActionPerformed private void txtDirectoryKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtDirectoryKeyTyped enableControls(txtPackage.getText(), txtDirectory.getText() + evt.getKeyChar()); }//GEN-LAST:event_txtDirectoryKeyTyped private void txtPackageKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtPackageKeyTyped enableControls(txtPackage.getText() + evt.getKeyChar(), txtDirectory.getText()); }//GEN-LAST:event_txtPackageKeyTyped private void btnSelectDirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSelectDirActionPerformed JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setCurrentDirectory(new File(System.getProperty("user.dir"))); int returnVal = chooser.showOpenDialog(this); if(returnVal == JFileChooser.APPROVE_OPTION) { File path = chooser.getSelectedFile(); txtDirectory.setText(path.getAbsolutePath()); enableControls(txtPackage.getText(), txtDirectory.getText()); } }//GEN-LAST:event_btnSelectDirActionPerformed private void btnGenerateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGenerateActionPerformed TifGeneratorInterface classgen = new ItfClassGenerator(solution, txtPackage.getText(), new File(txtDirectory.getText())); ClassGenWorker genWorker = new ClassGenWorker(classgen); classgen.setReporter(genWorker); // The worker will fire Status property events when the differencer sets // any new status. genWorker.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (StatusReporter.STATUS_PROP.equals(evt.getPropertyName())) { Status stat = (Status)evt.getNewValue(); progGenerate.setValue(stat.getProgress()); progGenerate.setString(stat.getMessage()); } } }); genWorker.execute(); }//GEN-LAST:event_btnGenerateActionPerformed private void comboGeneratorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboGeneratorActionPerformed if("comboBoxChanged".equals(evt.getActionCommand())) { String classStr = (String)comboGenerator.getSelectedItem(); System.out.println("Selected: " + classStr); try { Class clazz = Class.forName(classStr); TifGeneratorInterface tifGen = (TifGeneratorInterface)clazz.newInstance(); } catch (InstantiationException ex) { Logger.getLogger(WrapperGeneratorDlg.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(WrapperGeneratorDlg.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { txtGenDescription.setText("Cannot create generator class " + classStr); } } }//GEN-LAST:event_comboGeneratorActionPerformed private void enableControls(String pkg, String path) { if(path == null || path.length()==0 || pkg == null || pkg.length()==0) { btnGenerate.setEnabled(false); return; } File dir = new File(path); boolean enableGen = isValidJavaPackage(pkg) && dir.isDirectory(); btnGenerate.setEnabled(enableGen); } public boolean isValidJavaPackage(String s) { if (s == null || s.length() == 0) return false; Pattern p = Pattern.compile("^[a-zA-Z_\\$][\\w\\$]*(?:\\.[a-zA-Z_\\$][\\w\\$]*)*$"); boolean valid = p.matcher(s).matches(); return valid; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnCancel; private javax.swing.JButton btnGenerate; private javax.swing.JButton btnSelectDir; private javax.swing.JComboBox comboGenerator; 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.JScrollPane jScrollPane1; private javax.swing.JProgressBar progGenerate; private javax.swing.JTextField txtDirectory; private javax.swing.JTextArea txtGenDescription; private javax.swing.JTextField txtPackage; // End of variables declaration//GEN-END:variables private void populateGeneratorClasses() { comboGenerator.removeAllItems(); comboGenerator.addItem("com.ptc.tifworkbench.generator.ItfClassGenerator"); comboGenerator.addItem("com.ptc.tifworkbench.generator.SolutionClassGenerator"); Properties props = System.getProperties(); if(System.getProperties().containsKey("genclasses")) { String genClasses = System.getProperty("genclasses"); String [] classes = genClasses.split(";"); for(String className : classes) comboGenerator.addItem(className); } } }