AliasBean.java Source code

Java tutorial

Introduction

Here is the source code for AliasBean.java

Source

/*
 * Copyright (c) Ian F. Darwin, http://www.darwinsys.com/, 1996-2002. All rights
 * reserved. Software written by Ian F. Darwin and others. $Id: LICENSE,v 1.8
 * 2004/02/09 03:33:38 ian Exp $
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer. 2. Redistributions in
 * binary form must reproduce the above copyright notice, this list of
 * conditions and the following disclaimer in the documentation and/or other
 * materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * Java, the Duke mascot, and all variants of Sun's Java "steaming coffee cup"
 * logo are trademarks of Sun Microsystems. Sun's, and James Gosling's,
 * pioneering role in inventing and promulgating (and standardizing) the Java
 * language and environment is gratefully acknowledged.
 * 
 * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
 * inventing predecessor languages C and C++ is also gratefully acknowledged.
 */

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

class AliasBean extends JPanel {
    protected Vector aliVector;

    protected JList aliJList;

    private JTextField nameTF, addrTF;

    public AliasBean() {
        aliVector = new Vector();
        aliJList = new JList();
        // XXX MUST FIX THIS
        // aliJList.setSelectionMode(JList.SINGLE_SELECTION);
        aliJList.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent evt) {
                int i = aliJList.getSelectedIndex();
                if (i < 0)
                    return;
                Alias al = (Alias) aliVector.get(i);
                nameTF.setText(al.getName());
                addrTF.setText(al.getAddress());
            }
        });

        setLayout(new BorderLayout());
        add(BorderLayout.WEST, new JScrollPane(aliJList));

        JPanel rightPanel = new JPanel();
        add(BorderLayout.EAST, rightPanel);
        rightPanel.setLayout(new GridLayout(0, 1));

        JPanel buttons = new JPanel();
        rightPanel.add(buttons);
        buttons.setLayout(new GridLayout(0, 1, 15, 15));
        JButton b;
        buttons.add(b = new JButton("Set"));
        b.setToolTipText("Add or Change an alias");
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                int i = aliJList.getSelectedIndex();
                if (i < 0) {
                    // XXX error dialog??
                    return;
                }
                setAlias(i, nameTF.getText(), addrTF.getText());
            }
        });
        buttons.add(b = new JButton("Delete"));
        b.setToolTipText("Delete the selected alias");
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                int i = aliJList.getSelectedIndex();
                if (i < 0) {
                    return;
                }
                deleteAlias(i);
            }
        });
        buttons.add(b = new JButton("Apply"));
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                System.err.println("NOT WRITTEN YET");
            }
        });

        JPanel fields = new JPanel();
        rightPanel.add(fields);
        fields.setLayout(new GridLayout(2, 2));
        fields.add(new JLabel("Name"));
        fields.add(nameTF = new JTextField(10));
        fields.add(new JLabel("Address"));
        fields.add(addrTF = new JTextField(20));
    }

    public String expandAlias(String ali) {
        Alias a = findAlias(ali);
        if (a == null)
            return null;
        return a.getAddress();
    }

    public Alias findAlias(String ali) {
        for (int i = 0; i < aliVector.size(); i++) {
            Alias a = (Alias) aliVector.get(i);
            if (a.getName().equals(ali))
                return a;
        }
        return null; // not found
    }

    /** Add an Alias */
    public void addAlias(Alias a) {
        Alias al = findAlias(a.getName());
        if (al == null) {
            aliVector.addElement(a);
        } else {
            // aliVector.setElement(a); // XXX fuzzy
        }
        aliJList.setListData(aliVector);
    }

    /** Add an alias, by its constituent parts */
    public void addAlias(String nn, String addr) {
        addAlias(new Alias(nn, addr));
    }

    /** Replace an Alias */
    public void setAlias(int n, String nam, String addr) {
        // TODO find it, replace it, or add it.
        aliVector.setElementAt(new Alias(nam, addr), n);
        aliJList.setListData(aliVector);
    }

    public void deleteAlias(int i) {
        aliVector.removeElementAt(i);
        aliJList.setListData(aliVector);
    }
}

class Alias {
    /** The name for the alias */
    protected String name;

    /** The email address for this alias */
    protected String address;

    public Alias(String n, String addr) {
        name = n;
        address = addr;
    }

    public String toString() {
        return name + " = " + address;
    }

    /** Get name */
    public String getName() {
        return name;
    }

    /** Set name */
    public void setName(String name) {
        this.name = name;
    }

    /** Get address */
    public String getAddress() {
        return address;
    }

    /** Set address */
    public void setAddress(String address) {
        this.address = address;
    }
}

/**
 * Test for AliasBean.
 * 
 * @version $Id: AliasBeanTest.java,v 1.3 2004/02/09 03:33:48 ian Exp $
 */

public class AliasBeanTest extends JFrame {
    JButton quitButton;

    /** "main program" method - construct and show */
    public static void main(String[] av) {
        // create a JFrameDemo object, tell it to show up
        new AliasBeanTest().setVisible(true);
    }

    /** Construct the object including its GUI */
    public AliasBeanTest() {
        super("AliasBeanTest");
        Container cp = getContentPane();

        AliasBean ab = new AliasBean();
        cp.add(BorderLayout.CENTER, ab);
        ab.addAlias("ian-cvs", "ian@openbsd.org");
        ab.addAlias("ian-dos", "http://www.darwinsys.com/");

        cp.add(BorderLayout.SOUTH, quitButton = new JButton("Exit"));
        quitButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setVisible(false);
                dispose();
                System.exit(0);
            }
        });
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                setVisible(false);
                dispose();
                System.exit(0);
            }
        });

        pack();
    }
}