com.floreantpos.ui.dialog.DiscountListDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.floreantpos.ui.dialog.DiscountListDialog.java

Source

/**
 * ************************************************************************
 * * The contents of this file are subject to the MRPL 1.2
 * * (the  "License"),  being   the  Mozilla   Public  License
 * * Version 1.1  with a permitted attribution clause; you may not  use this
 * * file except in compliance with the License. You  may  obtain  a copy of
 * * the License at http://www.floreantpos.org/license.html
 * * Software distributed under the License  is  distributed  on  an "AS IS"
 * * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * * License for the specific  language  governing  rights  and  limitations
 * * under the License.
 * * The Original Code is FLOREANT POS.
 * * The Initial Developer of the Original Code is OROCUBE LLC
 * * All portions are Copyright (C) 2015 OROCUBE LLC
 * * All Rights Reserved.
 * ************************************************************************
 */
package com.floreantpos.ui.dialog;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.swing.DefaultListSelectionModel;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;

import com.floreantpos.IconFactory;
import com.floreantpos.Messages;
import com.floreantpos.model.Discount;
import com.floreantpos.model.Ticket;
import com.floreantpos.model.TicketDiscount;
import com.floreantpos.swing.PosButton;
import com.floreantpos.util.NumberUtil;
import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.core.GridLayoutManager;
import com.intellij.uiDesigner.core.Spacer;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

public class DiscountListDialog extends POSDialog implements ActionListener {
    private JPanel contentPane;
    private PosButton buttonOK;
    private PosButton buttonCancel;
    private PosButton btnScrollUp;
    private PosButton btnScrollDown;
    private PosButton btnDeleteSelected;
    private JTable tableDiscounts;

    private List<Ticket> tickets;
    private DiscountViewTableModel discountViewTableModel;
    private DefaultListSelectionModel selectionModel;

    private boolean modified = false;

    public DiscountListDialog(List<Ticket> tickets) {
        super();

        this.tickets = tickets;

        setSize(700, 500);
        discountViewTableModel = new DiscountViewTableModel();
        tableDiscounts.setModel(discountViewTableModel);

        selectionModel = new DefaultListSelectionModel();
        selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        tableDiscounts.setSelectionModel(selectionModel);

        btnScrollUp.setActionCommand("scrollUP"); //$NON-NLS-1$
        btnScrollDown.setActionCommand("scrollDown"); //$NON-NLS-1$
        btnScrollUp.addActionListener(this);
        btnScrollDown.addActionListener(this);

        setContentPane(contentPane);
        setModal(true);
        getRootPane().setDefaultButton(buttonOK);

        buttonOK.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                onOK();
            }
        });

        buttonCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                onCancel();
            }
        });

        // call onCancel() when cross is clicked
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                onCancel();
            }
        });

        // call onCancel() on ESCAPE
        contentPane.registerKeyboardAction(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                onCancel();
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
        btnDeleteSelected.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                doDeleteSelection();
            }
        });
    }

    private void doDeleteSelection() {
        try {
            int selectedRow = selectionModel.getLeadSelectionIndex();
            if (selectedRow < 0) {
                POSMessageDialog.showError(this, com.floreantpos.POSConstants.SELECT_ITEM_TO_DELETE);
                return;
            }
            if (ConfirmDeleteDialog.showMessage(this, com.floreantpos.POSConstants.CONFIRM_DELETE,
                    com.floreantpos.POSConstants.DELETE) != ConfirmDeleteDialog.YES) {
                return;
            }

            Object object = discountViewTableModel.get(selectedRow);
            modified = discountViewTableModel.delete((TicketCoupon) object);
        } catch (Exception e) {
            POSMessageDialog.showError(this, Messages.getString("DiscountListDialog.2"), e); //$NON-NLS-1$
        }
    }

    private void onOK() {
        tickets = null;
        setCanceled(false);
        dispose();
    }

    private void onCancel() {
        tickets = null;
        setCanceled(true);
        dispose();
    }

    {
        // GUI initializer generated by IntelliJ IDEA GUI Designer
        // >>> IMPORTANT!! <<<
        // DO NOT EDIT OR ADD ANY CODE HERE!
        $$$setupUI$$$();
    }

    /**
     * Method generated by IntelliJ IDEA GUI Designer
     * >>> IMPORTANT!! <<<
     * DO NOT edit this method OR call it in your code!
     *
     * @noinspection ALL
     */
    private void $$$setupUI$$$() {
        contentPane = new JPanel();
        contentPane.setLayout(new GridLayoutManager(2, 1, new Insets(10, 10, 10, 10), -1, -1));
        final JPanel panel1 = new JPanel();
        panel1.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1));
        contentPane.add(panel1,
                new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_SOUTH, GridConstraints.FILL_HORIZONTAL,
                        GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, 1, null, null,
                        null, 0, false));
        final Spacer spacer1 = new Spacer();
        panel1.add(spacer1,
                new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL,
                        GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
        final JPanel panel2 = new JPanel();
        panel2.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
        panel1.add(panel2,
                new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH,
                        GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW,
                        GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null,
                        null, 0, false));
        btnDeleteSelected = new PosButton();
        btnDeleteSelected.setIcon(IconFactory.getIcon("/ui_icons/", "delete.png")); //$NON-NLS-1$ //$NON-NLS-2$
        btnDeleteSelected.setPreferredSize(new Dimension(140, 50));
        btnDeleteSelected.setText(Messages.getString("DiscountListDialog.5")); //$NON-NLS-1$
        panel2.add(btnDeleteSelected);
        buttonOK = new PosButton();
        buttonOK.setIcon(IconFactory.getIcon("/ui_icons/", "finish.png")); //$NON-NLS-1$ //$NON-NLS-2$
        buttonOK.setPreferredSize(new Dimension(120, 50));
        buttonOK.setText(com.floreantpos.POSConstants.OK);
        panel2.add(buttonOK);
        buttonCancel = new PosButton();
        buttonCancel.setIcon(IconFactory.getIcon("/ui_icons/", "cancel.png")); //$NON-NLS-1$ //$NON-NLS-2$
        buttonCancel.setPreferredSize(new Dimension(120, 50));
        buttonCancel.setText(com.floreantpos.POSConstants.CANCEL);
        panel2.add(buttonCancel);
        final JPanel panel3 = new JPanel();
        panel3.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1));
        contentPane.add(panel3,
                new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH,
                        GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW,
                        GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null,
                        new Dimension(458, 310), null, 0, false));
        final JScrollPane scrollPane1 = new JScrollPane();
        panel3.add(scrollPane1,
                new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH,
                        GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW,
                        GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null,
                        null, 0, false));
        tableDiscounts = new JTable();
        scrollPane1.setViewportView(tableDiscounts);
        final JPanel panel4 = new JPanel();
        panel4.setLayout(new FormLayout("fill:p:grow", "center:d:grow,top:4dlu:noGrow,center:d:grow")); //$NON-NLS-1$ //$NON-NLS-2$
        panel3.add(panel4,
                new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH,
                        GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW,
                        GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null,
                        null, 0, false));
        btnScrollUp = new PosButton();
        btnScrollUp.setIcon(IconFactory.getIcon("/ui_icons/", "up.png")); //$NON-NLS-1$ //$NON-NLS-2$
        btnScrollUp.setPreferredSize(new Dimension(50, 50));
        btnScrollUp.setText(""); //$NON-NLS-1$
        CellConstraints cc = new CellConstraints();
        panel4.add(btnScrollUp, cc.xy(1, 1, CellConstraints.CENTER, CellConstraints.BOTTOM));
        btnScrollDown = new PosButton();
        btnScrollDown.setIcon(IconFactory.getIcon("/ui_icons/", "down.png")); //$NON-NLS-1$ //$NON-NLS-2$
        btnScrollDown.setPreferredSize(new Dimension(50, 50));
        btnScrollDown.setText(""); //$NON-NLS-1$
        panel4.add(btnScrollDown, cc.xy(1, 3, CellConstraints.CENTER, CellConstraints.TOP));
    }

    /**
     * @noinspection ALL
     */
    public JComponent $$$getRootComponent$$$() {
        return contentPane;
    }

    class DiscountViewTableModel extends AbstractTableModel {
        String[] columnNames = { Messages.getString("DiscountListDialog.18"), //$NON-NLS-1$
                Messages.getString("DiscountListDialog.19"), Messages.getString("DiscountListDialog.20") }; //$NON-NLS-1$ //$NON-NLS-2$
        ArrayList rows = new ArrayList();

        DiscountViewTableModel() {
            for (Iterator iter = tickets.iterator(); iter.hasNext();) {
                Ticket ticket = (Ticket) iter.next();
                List<TicketDiscount> coupons = ticket.getDiscounts();

                if (coupons != null) {
                    for (TicketDiscount coupon : coupons) {
                        TicketCoupon ticketDiscount = new TicketCoupon(ticket, coupon);
                        rows.add(ticketDiscount);
                    }
                }

            }

        }

        public int getRowCount() {
            return rows.size();
        }

        public int getColumnCount() {
            return columnNames.length;
        }

        @Override
        public String getColumnName(int column) {
            return columnNames[column];
        }

        public Object getValueAt(int rowIndex, int columnIndex) {
            TicketCoupon ticketDiscount = (TicketCoupon) rows.get(rowIndex);
            Object discountObject = ticketDiscount.getDiscountObject();

            switch (columnIndex) {
            case 0:
                if (discountObject instanceof TicketDiscount) {
                    return ((TicketDiscount) discountObject).getName();
                }
                return null;

            case 1:
                if (discountObject instanceof TicketDiscount) {
                    return Discount.COUPON_TYPE_NAMES[((TicketDiscount) discountObject).getType()];
                }
                return null;

            case 2:
                if (discountObject instanceof TicketDiscount) {
                    return NumberUtil.formatNumber(((TicketDiscount) discountObject).getValue());
                }
                return null;
            }

            return null;
        }

        public boolean delete(TicketCoupon ticketDiscount) {
            Ticket ticket = ticketDiscount.getTicket();
            Object object = ticketDiscount.getDiscountObject();

            if (object instanceof TicketCoupon) {
                boolean b = ticket.getDiscounts().remove(object);
                rows.remove(ticketDiscount);
                fireTableDataChanged();
                return b;
            }
            return false;
        }

        public Object get(int index) {
            return rows.get(index);
        }
    }

    public void actionPerformed(ActionEvent e) {
        if ("scrollUP".equals(e.getActionCommand())) { //$NON-NLS-1$

            int selectedRow = selectionModel.getLeadSelectionIndex();

            if (selectedRow <= 0) {
                selectedRow = 0;
            } else {
                --selectedRow;
            }

            selectionModel.setLeadSelectionIndex(selectedRow);
            Rectangle cellRect = tableDiscounts.getCellRect(selectedRow, 0, false);
            tableDiscounts.scrollRectToVisible(cellRect);
        } else if ("scrollDown".equals(e.getActionCommand())) { //$NON-NLS-1$
            int selectedRow = selectionModel.getLeadSelectionIndex();

            if (selectedRow < 0) {
                selectedRow = 0;
            } else if (selectedRow >= discountViewTableModel.getRowCount() - 1) {
                //return;
            } else {
                ++selectedRow;
            }

            selectionModel.setLeadSelectionIndex(selectedRow);
            Rectangle cellRect = tableDiscounts.getCellRect(selectedRow, 0, false);
            tableDiscounts.scrollRectToVisible(cellRect);
        }
    }

    public boolean isModified() {
        return modified;
    }

    class TicketCoupon {
        private Ticket ticket;
        private Object discountObject;

        public TicketCoupon() {

        }

        public TicketCoupon(Ticket ticket, Object discount) {
            this.ticket = ticket;
            this.discountObject = discount;
        }

        public Object getDiscountObject() {
            return discountObject;
        }

        public void setDiscountObject(Object discount) {
            this.discountObject = discount;
        }

        public Ticket getTicket() {
            return ticket;
        }

        public void setTicket(Ticket ticket) {
            this.ticket = ticket;
        }

        @Override
        public boolean equals(Object obj) {
            if (!(obj instanceof TicketCoupon)) {
                return false;
            }

            TicketCoupon other = (TicketCoupon) obj;
            return this.discountObject.equals(other.discountObject);
        }
    }
}