Java tutorial
/* * 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 us.vicentini.domainutil.view; import com.sun.corba.se.impl.activation.ServerMain; import java.awt.event.ActionListener; import java.util.LinkedList; import java.util.List; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.table.DefaultTableModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.xbill.DNS.Lookup; import org.xbill.DNS.MXRecord; import org.xbill.DNS.Record; import org.xbill.DNS.TextParseException; import us.vicentini.domainutil.requests.LookupThread; import org.xbill.DNS.Type; import us.vicentini.domainutil.DomainUtil; import us.vicentini.domainutil.IDomainRequest; import us.vicentini.domainutil.requests.ELookupStatus; import us.vicentini.domainutil.requests.ILookupListener; /** * * @author Shulander */ public class DomainPanel extends javax.swing.JFrame implements ILookupListener, IDomainRequest { private final static Log log = LogFactory.getLog(DomainPanel.class); private List<String> domainsName = new LinkedList<String>(); private Object[][] dataModel; /** * Creates new form DomainPanel */ public DomainPanel() { 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") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jTabbedPane1 = new javax.swing.JTabbedPane(); jPanelStart = new javax.swing.JPanel(); jPanel4 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); jTextAreaDomainInput = new javax.swing.JTextArea(); jButtonStart = new javax.swing.JButton(); jPanelProcessing = new javax.swing.JPanel(); jPanel1 = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jButton1 = new javax.swing.JButton(); jPanelResults = new javax.swing.JPanel(); jScrollPane3 = new javax.swing.JScrollPane(); jTextAreaResults = new javax.swing.JTextArea(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Domain Query List")); jTextAreaDomainInput.setColumns(20); jTextAreaDomainInput.setRows(5); jScrollPane1.setViewportView(jTextAreaDomainInput); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout .setHorizontalGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)); jPanel4Layout.setVerticalGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 472, Short.MAX_VALUE)); jButtonStart.setText("Start"); jButtonStart.setActionCommand("processRequest"); jButtonStart.setVerifyInputWhenFocusTarget(false); javax.swing.GroupLayout jPanelStartLayout = new javax.swing.GroupLayout(jPanelStart); jPanelStart.setLayout(jPanelStartLayout); jPanelStartLayout .setHorizontalGroup(jPanelStartLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelStartLayout.createSequentialGroup() .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(304, 304, 304).addComponent(jButtonStart).addContainerGap())); jPanelStartLayout .setVerticalGroup(jPanelStartLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelStartLayout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButtonStart).addContainerGap())); jPanel4.getAccessibleContext().setAccessibleName("Domain List"); jPanel4.getAccessibleContext().setAccessibleDescription("Dolmain query list"); jTabbedPane1.addTab("Start", jPanelStart); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Processing...")); jTable1.setModel( new javax.swing.table.DefaultTableModel( new Object[][] { { null, null, null, null }, { null, null, null, null }, { null, null, null, null }, { null, null, null, null } }, new String[] { "Title 1", "Title 2", "Title 3", "Title 4" })); jScrollPane2.setViewportView(jTable1); jButton1.setText("Get Results"); jButton1.setActionCommand("getResults"); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout .setHorizontalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 664, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton1).addContainerGap())); jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jButton1) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); javax.swing.GroupLayout jPanelProcessingLayout = new javax.swing.GroupLayout(jPanelProcessing); jPanelProcessing.setLayout(jPanelProcessingLayout); jPanelProcessingLayout.setHorizontalGroup( jPanelProcessingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent( jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)); jPanelProcessingLayout.setVerticalGroup( jPanelProcessingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent( jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)); jTabbedPane1.addTab("Processing", jPanelProcessing); jPanelResults.setBorder(javax.swing.BorderFactory.createTitledBorder("Results")); jTextAreaResults.setColumns(20); jTextAreaResults.setRows(5); jScrollPane3.setViewportView(jTextAreaResults); javax.swing.GroupLayout jPanelResultsLayout = new javax.swing.GroupLayout(jPanelResults); jPanelResults.setLayout(jPanelResultsLayout); jPanelResultsLayout.setHorizontalGroup( jPanelResultsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 664, Short.MAX_VALUE)); jPanelResultsLayout .setVerticalGroup(jPanelResultsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 472, Short.MAX_VALUE)); jTabbedPane1.addTab("Results", jPanelResults); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTabbedPane1, javax.swing.GroupLayout.Alignment.TRAILING)); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jTabbedPane1)); pack(); }// </editor-fold>//GEN-END:initComponents /** * @param args the command line arguments */ // public static void main(String args[]) { // /* Set the Nimbus look and feel */ // //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> // /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. // * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html // */ // try { // for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { // if ("Nimbus".equals(info.getName())) { // javax.swing.UIManager.setLookAndFeel(info.getClassName()); // break; // } // } // } catch (ClassNotFoundException ex) { // java.util.logging.Logger.getLogger(DomainPanel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); // } catch (InstantiationException ex) { // java.util.logging.Logger.getLogger(DomainPanel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); // } catch (IllegalAccessException ex) { // java.util.logging.Logger.getLogger(DomainPanel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); // } catch (javax.swing.UnsupportedLookAndFeelException ex) { // java.util.logging.Logger.getLogger(DomainPanel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); // } // //</editor-fold> // // /* Create and display the form */ // java.awt.EventQueue.invokeLater(new Runnable() { // public void run() { // new DomainPanel().setVisible(true); // } // }); // } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButton1; private javax.swing.JButton jButtonStart; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanelProcessing; private javax.swing.JPanel jPanelResults; private javax.swing.JPanel jPanelStart; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JTable jTable1; private javax.swing.JTextArea jTextAreaDomainInput; private javax.swing.JTextArea jTextAreaResults; // End of variables declaration//GEN-END:variables private void populateDomains(List<String> domainsName) { String[] headers = new String[] { "Domain", "Status", "Results" }; dataModel = new Object[domainsName.size()][3]; for (int i = 0; i < domainsName.size(); i++) { dataModel[i][0] = domainsName.get(i); dataModel[i][1] = new MyString(""); dataModel[i][2] = new MyString(""); } DefaultTableModel tableModel = new javax.swing.table.DefaultTableModel(dataModel, headers); tableModel.fireTableCellUpdated(WIDTH, WIDTH); jTable1.setModel(tableModel); } @Override public void newResults(String domainName, Record[] records) { String text = ""; for (int i = 0; i < records.length; i++) { Record mx = records[i]; if (mx.getType() == org.xbill.DNS.Type.MX) { text = ((MXRecord) mx).getTarget().toString(true); } else { text = mx.toString(); } } for (int i = 0; i < dataModel.length; i++) { if (domainName.equals(dataModel[i][0])) { log.info("[result] " + domainName + ": " + text); ((MyString) dataModel[i][2]).setText(text); } } DefaultTableModel tableModel = ((DefaultTableModel) jTable1.getModel()); tableModel.fireTableDataChanged(); } @Override public void newStatus(String domainName, ELookupStatus eLookupStatus) { for (int i = 0; i < dataModel.length; i++) { if (domainName.equals(dataModel[i][0])) { log.info("[status] " + domainName + ": " + eLookupStatus.toString()); ((MyString) dataModel[i][1]).setText(eLookupStatus.toString()); } } DefaultTableModel tableModel = ((DefaultTableModel) jTable1.getModel()); tableModel.fireTableDataChanged(); } public void addActionListener(ActionListener actionListener) { jButtonStart.addActionListener(actionListener); } public void removeActionListener(ActionListener actionListener) { jButtonStart.removeActionListener(actionListener); } @Override public List<String> getListDomainNames() { domainsName.clear(); if (!jTextAreaDomainInput.getText().isEmpty()) { Scanner scanner = new Scanner(jTextAreaDomainInput.getText()); domainsName.clear(); while (scanner.hasNextLine()) { String line = scanner.nextLine(); if (!line.trim().isEmpty()) { log.info(line.trim()); domainsName.add(line.trim()); } } scanner.close(); populateDomains(domainsName); jTabbedPane1.setSelectedIndex(1); } return domainsName; } private static class MyString { String text; public MyString(String string) { this.text = string; } public String getText() { return text; } public void setText(String text) { this.text = text; } @Override public String toString() { return text; } } }