import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collections;

import javax.swing.*;

import com.jidesoft.list.DualList;
import com.jidesoft.list.SortableListModel;
import com.jidesoft.swing.JideTitledBorder;
import com.jidesoft.swing.PartialEtchedBorder;
import com.jidesoft.swing.PartialSide;

public class TestDualList extends JFrame {

    private DualList dualList;
    private DualListModel dualListModel;
    private JButton sort;
    private SortableListModel _sortableListModel;

    public TestDualList() {
        init();
        buildDialog();
    }

    private void buildDialog() {
        add(dualList, BorderLayout.CENTER);
        add(sort, BorderLayout.SOUTH);
        setSize(200, 200);
        setVisible(true);


    }

    private void init() {
        dualListModel = new DualListModel();
        dualListModel.updateModel();

        dualList = new DualList(dualListModel) {
            @Override
            protected JList createList(ListModel model, boolean originalList) {
                if (!originalList) {
                    _sortableListModel = new SortableListModel(model);
                    model = _sortableListModel;
                }
                return super.createList(model, originalList);
            }
        };
        dualList.setSelectionMode(DualListModel.REMOVE_SELECTION);
        dualList.setAllowDuplicates(false);
        dualList.getOriginalListPane().setBorder(
                new JideTitledBorder(new PartialEtchedBorder(
                        PartialEtchedBorder.LOWERED, PartialSide.NORTH),
                        "Available FIX Tags"));
        dualList.getSelectedListPane().setBorder(
                new JideTitledBorder(new PartialEtchedBorder(
                        PartialEtchedBorder.LOWERED, PartialSide.NORTH),
                        "Selected FIX Tags"));
        // Make all the button invisible exceptt move right and left
        dualList.setButtonVisible(DualList.COMMAND_MOVE_UP, false);
        dualList.setButtonVisible(DualList.COMMAND_MOVE_DOWN, false);
        dualList.setButtonVisible(DualList.COMMAND_MOVE_ALL_LEFT, false);
        dualList.setButtonVisible(DualList.COMMAND_MOVE_ALL_RIGHT, false);
        dualList.setButtonVisible(DualList.COMMAND_MOVE_TO_BOTTOM, false);
        dualList.setButtonVisible(DualList.COMMAND_MOVE_TO_TOP, false);

        sort = new JButton("Sort");
        sort.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
//                dualListModel.sortByName();
                _sortableListModel.sort();
            }
        });


    }

    public static void main(String args[]) {
        TestDualList list = new TestDualList();
    }


}