package com.fitbank.fitpatch; import java.awt.Color; import java.util.LinkedList; import java.util.List; import javax.swing.DefaultComboBoxModel; import javax.swing.JOptionPane; import javax.swing.UIManager; import org.apache.commons.lang.StringUtils; import org.tmatesoft.svn.core.SVNException; import com.fitbank.fitpatch.MantisQueries.ConnectionException; import com.fitbank.util.Debug; import com.fitbank.util.SwingUtils; /** * Herramientas para armar patches * * @author FitBank CI */ public class Main extends javax.swing.JFrame { private final PreferencesDialog prefsDialog; private final PatchHandler patchHandler = new PatchHandler(); public Main() { initComponents(); try { patchHandler.connect(); } catch (ConnectionException ex) { Debug.error(ex); } SwingUtils.setupOutput(console, Color.WHITE, Color.RED); prefsDialog = new PreferencesDialog(this, true); if (StringUtils.isBlank(patchHandler.getControlSources())) { prefsDialog.setVisible(true); } } @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { mainToolbar = new javax.swing.JToolBar(); javax.swing.JLabel patchLabel = new javax.swing.JLabel(); patchNumber = new javax.swing.JTextField(); javax.swing.JButton mantisSync = new javax.swing.JButton(); merge = new javax.swing.JButton(); commit = new javax.swing.JButton(); javax.swing.JButton cleanup = new javax.swing.JButton(); javax.swing.JToolBar.Separator separador = new javax.swing.JToolBar.Separator(); javax.swing.JButton preferencesButton = new javax.swing.JButton(); progreso = new javax.swing.JProgressBar(); javax.swing.JScrollPane consoleScrollPane = new javax.swing.JScrollPane(); console = new javax.swing.JTextPane(); javax.swing.JLabel revisionsLabel = new javax.swing.JLabel(); revisions = new javax.swing.JTextField(); javax.swing.JLabel branchesLabel = new javax.swing.JLabel(); branches = new javax.swing.JComboBox(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("FitPatch"); mainToolbar.setRollover(true); patchLabel.setText("No. Parche:"); mainToolbar.add(patchLabel); patchNumber.setMaximumSize(new java.awt.Dimension(100, 25)); patchNumber.setMinimumSize(new java.awt.Dimension(100, 25)); patchNumber.setPreferredSize(new java.awt.Dimension(100, 25)); patchNumber.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { patchNumberActionPerformed(); } }); mainToolbar.add(patchNumber); mantisSync.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/freedesktop/tango/16x16/actions/view-refresh.png"))); // NOI18N mantisSync.setText("Sinc. Mantis"); mantisSync.setEnabled(false); mantisSync.setFocusable(false); mantisSync.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); mantisSync.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); mantisSync.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { mantisSyncActionPerformed(); } }); mainToolbar.add(mantisSync); merge.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/freedesktop/tango/16x16/actions/edit-copy.png"))); // NOI18N merge.setText("Merge"); merge.setEnabled(false); merge.setFocusable(false); merge.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); merge.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); merge.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { mergeActionPerformed(); } }); mainToolbar.add(merge); commit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/freedesktop/tango/16x16/actions/document-save.png"))); // NOI18N commit.setText("Commit"); commit.setEnabled(false); commit.setFocusable(false); commit.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); commit.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); commit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { commitActionPerformed(); } }); mainToolbar.add(commit); cleanup.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/freedesktop/tango/16x16/actions/edit-clear.png"))); // NOI18N cleanup.setText("Cleanup"); cleanup.setFocusable(false); cleanup.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); cleanup.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); cleanup.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cleanupActionPerformed(); } }); mainToolbar.add(cleanup); mainToolbar.add(separador); preferencesButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/fitbank/fitpatch/iconos/preferencias.png"))); // NOI18N preferencesButton.setText("Preferencias"); preferencesButton.setFocusable(false); preferencesButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); preferencesButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); preferencesButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { preferencesButtonActionPerformed(); } }); mainToolbar.add(preferencesButton); console.setBackground(Color.black); console.setEditable(false); consoleScrollPane.setViewportView(console); revisionsLabel.setText("Revisiones:"); revisions.setEditable(false); branchesLabel.setText("Branch:"); branches.setModel(new DefaultComboBoxModel()); branches.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { branchesActionPerformed(); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(mainToolbar, javax.swing.GroupLayout.DEFAULT_SIZE, 635, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(progreso, javax.swing.GroupLayout.DEFAULT_SIZE, 611, Short.MAX_VALUE) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(revisionsLabel) .addComponent(branchesLabel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(branches, 0, 528, Short.MAX_VALUE) .addComponent(revisions, javax.swing.GroupLayout.DEFAULT_SIZE, 528, Short.MAX_VALUE)) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(consoleScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 611, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(mainToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(branchesLabel) .addComponent(branches, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(revisionsLabel) .addComponent(revisions, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(consoleScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 219, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(progreso, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); pack(); }// //GEN-END:initComponents private void preferencesButtonActionPerformed() {//GEN-FIRST:event_preferencesButtonActionPerformed prefsDialog.setVisible(true); }//GEN-LAST:event_preferencesButtonActionPerformed private void patchNumberActionPerformed() {//GEN-FIRST:event_patchNumberActionPerformed mantisSyncActionPerformed(); }//GEN-LAST:event_patchNumberActionPerformed private void mantisSyncActionPerformed() {//GEN-FIRST:event_mantisSyncActionPerformed query(); }//GEN-LAST:event_mantisSyncActionPerformed private void branchesActionPerformed() {//GEN-FIRST:event_branchesActionPerformed select((String) branches.getSelectedItem()); }//GEN-LAST:event_branchesActionPerformed private void mergeActionPerformed() {//GEN-FIRST:event_mergeActionPerformed new Thread() { @Override public void run() { progreso.setIndeterminate(true); mainToolbar.setEnabled(false); try { patchHandler.merge(patchNumber.getText()); } catch (SVNException ex) { Debug.error(ex); } catch (Exception t) { Debug.error(t.getMessage()); } commit.setEnabled(true); merge.setEnabled(false); mainToolbar.setEnabled(true); progreso.setIndeterminate(false); } }.start(); }//GEN-LAST:event_mergeActionPerformed private void commitActionPerformed() {//GEN-FIRST:event_commitActionPerformed new Thread() { @Override public void run() { progreso.setIndeterminate(true); mainToolbar.setEnabled(false); try { patchHandler.commit(); } catch (SVNException ex) { Debug.error(ex); } catch (Exception t) { Debug.error(t.getMessage()); } commit.setEnabled(false); merge.setEnabled(false); mainToolbar.setEnabled(true); progreso.setIndeterminate(false); } }.start(); }//GEN-LAST:event_commitActionPerformed private void cleanupActionPerformed() {//GEN-FIRST:event_cleanupActionPerformed new Thread() { @Override public void run() { progreso.setIndeterminate(true); mainToolbar.setEnabled(false); try { patchHandler.cleanup(); } catch (SVNException ex) { Debug.error(ex); } catch (Exception t) { Debug.error(t.getMessage()); } commit.setEnabled(false); merge.setEnabled(false); mainToolbar.setEnabled(true); progreso.setIndeterminate(false); query(); } }.start(); }//GEN-LAST:event_cleanupActionPerformed private void query() { final String incidencia = StringUtils.leftPad(patchNumber.getText(), 7, '0'); patchNumber.setText(incidencia); console.setText("Sincronizando incidencia #" + incidencia); setTitle(String.format("Incidencia #%s", incidencia)); new Thread() { @Override public void run() { Debug.info("Obteniendo revisiones..."); merge.setEnabled(false); commit.setEnabled(false); progreso.setIndeterminate(true); patchHandler.query(incidencia); if (patchHandler.getRevisionMap().containsKey("trunk")) { progreso.setIndeterminate(false); JOptionPane.showMessageDialog(Main.this, "Esta incidencia ya se pasó a control!"); return; } if (patchHandler.getRevisionMap().isEmpty()) { progreso.setIndeterminate(false); JOptionPane.showMessageDialog(Main.this, "Esta incidencia no tiene cambios para pasar a control!"); return; } List branchesList = new LinkedList(); if (patchHandler.getRevisionMap().size() > 1) { branchesList.add(""); } branchesList.addAll(patchHandler.getRevisionMap().keySet()); branches.setModel(new DefaultComboBoxModel( branchesList.toArray())); progreso.setIndeterminate(false); Debug.info("Listo."); if (branchesList.size() == 1) { select(branchesList.get(0)); } } }.start(); } private void select(String branch) { revisions.setText(StringUtils.join(patchHandler.getRevisionMap().get( branch), ",")); merge.setEnabled(true); } public static void main(String args[]) throws Exception { if (args.length > 0) { PatchHandler.main(args); } else { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Main().setVisible(true); } }); } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JComboBox branches; private javax.swing.JButton commit; private javax.swing.JTextPane console; private javax.swing.JToolBar mainToolbar; private javax.swing.JButton merge; private javax.swing.JTextField patchNumber; private javax.swing.JProgressBar progreso; private javax.swing.JTextField revisions; // End of variables declaration//GEN-END:variables }