// CSVColumnPanel package org.javamoney.examples.ez.money.importexport; import static org.javamoney.examples.ez.common.utility.BorderHelper.createTitledBorder; import static org.javamoney.examples.ez.common.utility.ButtonHelper.buildButton; import static javax.swing.ListSelectionModel.SINGLE_SELECTION; import static org.javamoney.examples.ez.money.ApplicationProperties.getCSVColumnOrder; import static org.javamoney.examples.ez.money.ApplicationProperties.setCSVColumnOrder; import static org.javamoney.examples.ez.money.IconKeys.ARROW_DOWN; import static org.javamoney.examples.ez.money.IconKeys.ARROW_UP; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.DefaultListModel; import javax.swing.Icon; import javax.swing.JList; import javax.swing.JToolBar; import org.javamoney.examples.ez.common.gui.Link; import org.javamoney.examples.ez.common.gui.Panel; import org.javamoney.examples.ez.common.gui.ScrollPane; import org.javamoney.examples.ez.common.utility.I18NHelper; /** * This class facilitates providing a way to specify the column order in a CSV * file. */ final class CSVColumnPanel extends Panel { /** * Constructs a new panel. */ protected CSVColumnPanel() { setList(new JList(new DefaultListModel())); addColumnsToList(); // Build panel. setFill(GridBagConstraints.BOTH); add(new ScrollPane(getList()), 0, 0, 1, 1, 100, 100); add(createButtonPanel(), 0, 1, 1, 1, 0, 0); setBorder(createTitledBorder(getProperty("title"), false)); } ////////////////////////////////////////////////////////////////////////////// // Start of private methods. ////////////////////////////////////////////////////////////////////////////// private void addColumnsToList() { for(int index : getCSVColumnOrder()) { CSVColumnKeys key = CSVColumnKeys.valueOf(index); ((DefaultListModel)getList().getModel()).addElement(key); } getList().setSelectedIndex(0); getList().setSelectionMode(SINGLE_SELECTION); } private final Link createButton(Icon icon, String command, ActionListener listener, String tip) { Link link = new Link(); // Build link. buildButton(link, icon, listener, command, tip); return link; } private Panel createButtonPanel() { ActionHandler handler = new ActionHandler(); JToolBar toolBar = new JToolBar(); Panel panel = new Panel(); Dimension separator = new Dimension(15, 10); // Build tool bar. toolBar.setBorderPainted(false); toolBar.setFloatable(false); toolBar.setRollover(true); toolBar.add(createButton(ARROW_UP.getIcon(), ACTION_UP, handler, getProperty("up_tip"))); toolBar.addSeparator(separator); toolBar.add(createButton(ARROW_DOWN.getIcon(), ACTION_DOWN, handler, getProperty("down_tip"))); // Build panel. panel.add(toolBar, 0, 0, 1, 1, 100, 100); return panel; } private JList getList() { return itsList; } private static String getProperty(String key) { return I18NHelper.getProperty("CSVColumnPanel." + key); } private void moveColumn(String action) { DefaultListModel model = (DefaultListModel)getList().getModel(); Object object = getList().getSelectedValue(); int index = getList().getSelectedIndex(); if(action.equals(ACTION_DOWN) == true) { ++index; if(index < model.getSize()) { model.remove(index - 1); model.add(index, object); getList().setSelectedIndex(index); storeCSVColumnOrder(); } } else { --index; if(index > -1) { model.remove(index + 1); model.add(index, object); getList().setSelectedIndex(index); storeCSVColumnOrder(); } } } private void setList(JList list) { itsList = list; } private void storeCSVColumnOrder() { DefaultListModel model = (DefaultListModel)getList().getModel(); int[] order = new int[CSVColumnKeys.values().length]; for(int len = 0; len < model.getSize(); ++len) { CSVColumnKeys key = (CSVColumnKeys)model.get(len); order[len] = key.ordinal(); } setCSVColumnOrder(order); } ////////////////////////////////////////////////////////////////////////////// // Start of inner classes. ////////////////////////////////////////////////////////////////////////////// private class ActionHandler implements ActionListener { public void actionPerformed(ActionEvent event) { moveColumn(event.getActionCommand()); } } ////////////////////////////////////////////////////////////////////////////// // Start of class members. ////////////////////////////////////////////////////////////////////////////// private JList itsList; private static final String ACTION_DOWN = "D"; private static final String ACTION_UP = "U"; }