import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

import com.lavantech.net.dns.*;


public class DNSLookupDemo extends JFrame implements ActionListener
{
    public static final String[] QUERY_TYPES = {
            "A (Address)",
            "NS (Name Server)",
            "CNAME (Canonical Name)",
            "SOA (Start of Authority)",
            "WKS (Well Known Services)",
            "PTR (Reverse Pointer)",
            "MX (Mail Exchange)",
            "AAAA (IPv6 Address)",
            "A6 (IPv6 Address)",
            "ANY (All records)"
    };
    public static final int[] QUERY_TYPE_VALUES = {
            DNSLookup.QTYPE_A,
            DNSLookup.QTYPE_NS,
            DNSLookup.QTYPE_CNAME,
            DNSLookup.QTYPE_SOA,
            DNSLookup.QTYPE_WKS,
            DNSLookup.QTYPE_PTR,
            DNSLookup.QTYPE_MX,
            DNSLookup.QTYPE_AAAA,
            DNSLookup.QTYPE_A6,
            DNSLookup.QTYPE_ANY };

    JTextField queryTF;
    JComboBox queryTypeCB;
    JButton lookupB;
    JTextArea resultTA;

    public DNSLookupDemo()
    {
        super("DNSLookup Demo");
        getContentPane().setLayout(new BorderLayout());

        JPanel northPanel = new JPanel(new FlowLayout());
        getContentPane().add(northPanel, BorderLayout.NORTH);

        northPanel.add(new JLabel("Query"));
        queryTF = new JTextField(15);
        northPanel.add(queryTF);
        northPanel.add(new JLabel("Record Type"));
        queryTypeCB = new JComboBox(QUERY_TYPES);
        northPanel.add(queryTypeCB);
        lookupB = new JButton("Lookup");
        northPanel.add(lookupB);
        lookupB.addActionListener(this);

        resultTA = new JTextArea(25,40);
        resultTA.setEditable(false);
        getContentPane().add(new JScrollPane(resultTA), BorderLayout.CENTER);

        pack();
        show();
    }

    public void actionPerformed(ActionEvent evt)
    {
        try
        {
            if(queryTF.getText().trim().equals(""))
                return;

            int qType = QUERY_TYPE_VALUES[queryTypeCB.getSelectedIndex()];

            DNSLookup dnsLookup = new DNSLookup(queryTF.getText().trim(),
                qType, DNSLookup.QCLASS_IN, 10000, null);

            String result = "";
            ResourceRecord[] records = dnsLookup.getAnswerRecords();
            for(int i=0; i<records.length; i++)
                result = result + records[i].toString()+"\n";

            if(result.trim().equals(""))
                result = "No Records Found";
        
            resultTA.setText(result);


        }
        catch(Exception exp)
        {
            JOptionPane.showMessageDialog(this,
                "Error in lookup; "+exp.getMessage(),
                "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    public static void main(String[] args)
    {
        new DNSLookupDemo();
    }
}
