Package no.ugland.utransprod.gui.handlers

Source Code of no.ugland.utransprod.gui.handlers.TransportOverviewReportHandler$ReportSetting

package no.ugland.utransprod.gui.handlers;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.ListModel;

import no.ugland.utransprod.ProTransException;
import no.ugland.utransprod.gui.Closeable;
import no.ugland.utransprod.gui.IconEnum;
import no.ugland.utransprod.gui.WindowInterface;
import no.ugland.utransprod.gui.buttons.CancelButton;
import no.ugland.utransprod.gui.checker.StatusCheckerInterface;
import no.ugland.utransprod.gui.model.Transportable;
import no.ugland.utransprod.model.Order;
import no.ugland.utransprod.model.ProductArea;
import no.ugland.utransprod.model.ProductAreaGroup;
import no.ugland.utransprod.model.Transport;
import no.ugland.utransprod.service.OrderManager;
import no.ugland.utransprod.service.TransportManager;
import no.ugland.utransprod.service.enums.LazyLoadTransportEnum;
import no.ugland.utransprod.util.ApplicationParamUtil;
import no.ugland.utransprod.util.ModelUtil;
import no.ugland.utransprod.util.Threadable;
import no.ugland.utransprod.util.Util;
import no.ugland.utransprod.util.excel.ExcelUtil;

import com.jgoodies.binding.PresentationModel;
import com.jgoodies.binding.adapter.AbstractTableAdapter;
import com.jgoodies.binding.adapter.ComboBoxAdapter;
import com.jgoodies.binding.beans.Model;
import com.jgoodies.binding.beans.PropertyConnector;
import com.jgoodies.binding.list.ArrayListModel;
import com.toedter.calendar.JYearChooser;

/**
* H�ndterer oversiktsrapport for transport
* @author atle.brekka
*/
public class TransportOverviewReportHandler implements Closeable {
    /**
     *
     */
    PresentationModel presentationModel;

    /**
     *
     */
    StatusCheckerInterface<Transportable> steinChecker;

    /**
     *
     */
    private boolean disposeOnClose = true;

    private ReportSetting currentReportSetting;

    /**
     * @param aSteinChecker
     */
    public TransportOverviewReportHandler(
            StatusCheckerInterface<Transportable> aSteinChecker) {
        steinChecker = aSteinChecker;
        currentReportSetting = new ReportSetting(Util.getCurrentYear(), Util
                .getCurrentWeek(), Util.getCurrentWeek());
        presentationModel = new PresentationModel(currentReportSetting);
    }

    /**
     * Lager �rvelger
     * @return �rvelger
     */
    public JYearChooser getYearChooser() {
        JYearChooser yearChooser = new JYearChooser();
        PropertyConnector.connect(yearChooser, "year", presentationModel
                .getModel(ReportSetting.PROPERTY_YEAR), "value");
        return yearChooser;
    }

    /**
     * Lager komboboks for uke fra
     * @return komboboks
     */
    public JComboBox getComboBoxFromWeek() {
        return new JComboBox(new ComboBoxAdapter(Util.getWeeks(),
                presentationModel.getModel(ReportSetting.PROPERTY_FROM_WEEK)));
    }

    /**
     * Lager komboboks for uke til
     * @return komboboks
     */
    public JComboBox getComboBoxToWeek() {
        return new JComboBox(new ComboBoxAdapter(Util.getWeeks(),
                presentationModel.getModel(ReportSetting.PROPERTY_TO_WEEK)));
    }

    public JComboBox getComboBoxProductAreaGroup() {
        return Util.createComboBoxProductAreaGroup(presentationModel
                .getModel(ReportSetting.PROPERTY_PRODUCT_AREA_GROUP));
    }

    /**
     * Lager utskriftknapp
     * @param window
     * @return knapp
     */
    public JButton getButtonPrint(WindowInterface window) {
        JButton button = new JButton(new PrintAction(window));
        button.setIcon(IconEnum.ICON_EXCEL.getIcon());
        return button;
    }

    /**
     * Lager avbrytknapp
     * @param window
     * @return knapp
     */
    public JButton getButtonCancel(WindowInterface window) {
        return new CancelButton(window, this, disposeOnClose);
    }

    /**
     * Henter vindustittel
     * @return tittel
     */
    public String getWindowTitle() {
        return "Transportoversikt";
    }

    /**
     * Henter vindusst�rrelse
     * @return vindusst�rrelse
     */
    public Dimension getWindowSize() {
        return new Dimension(310, 130);
    }

    /**
     * Holder p� rapportsettinger
     * @author atle.brekka
     */
    public class ReportSetting extends Model {
        /**
         *
         */
        private static final long serialVersionUID = 1L;

        /**
         *
         */
        public static final String PROPERTY_YEAR = "year";

        /**
         *
         */
        public static final String PROPERTY_FROM_WEEK = "fromWeek";

        /**
         *
         */
        public static final String PROPERTY_TO_WEEK = "toWeek";

        public static final String PROPERTY_PRODUCT_AREA_GROUP = "productAreaGroup";

        /**
         *
         */
        private Integer year;

        /**
         *
         */
        private Integer fromWeek;

        /**
         *
         */
        private Integer toWeek;

        private ProductAreaGroup productAreaGroup;

        /**
         * @param year
         * @param fromWeek
         * @param toWeek
         */
        public ReportSetting(Integer year, Integer fromWeek, Integer toWeek) {
            super();
            this.year = year;
            this.fromWeek = fromWeek;
            this.toWeek = toWeek;
        }

        /**
         * @return fra uke
         */
        public Integer getFromWeek() {
            return fromWeek;
        }

        /**
         * @param fromWeek
         */
        public void setFromWeek(Integer fromWeek) {
            Integer oldWeek = getFromWeek();
            this.fromWeek = fromWeek;
            firePropertyChange(PROPERTY_FROM_WEEK, oldWeek, fromWeek);
        }

        /**
         * @return til uke
         */
        public Integer getToWeek() {
            return toWeek;
        }

        /**
         * @param toWeek
         */
        public void setToWeek(Integer toWeek) {
            Integer oldWeek = getToWeek();
            this.toWeek = toWeek;
            firePropertyChange(PROPERTY_TO_WEEK, oldWeek, toWeek);
        }

        /**
         * @return �r
         */
        public Integer getYear() {
            return year;
        }

        /**
         * @param year
         */
        public void setYear(Integer year) {
            Integer oldYear = getYear();
            this.year = year;
            firePropertyChange(PROPERTY_YEAR, oldYear, year);
        }

        public ProductAreaGroup getProductAreaGroup() {
            return productAreaGroup;
        }

        public void setProductAreaGroup(ProductAreaGroup productAreaGroup) {
            ProductAreaGroup oldAreaGroup = getProductAreaGroup();
            this.productAreaGroup = productAreaGroup;
            firePropertyChange(PROPERTY_PRODUCT_AREA_GROUP, oldAreaGroup, productAreaGroup);
        }

        public boolean isValid() {
            if (productAreaGroup != null) {
                return true;
            }
            return false;
        }

    }

    /**
     * Utskrift
     * @author atle.brekka
     */
    private class PrintAction extends AbstractAction {
        /**
         *
         */
        private static final long serialVersionUID = 1L;

        /**
         *
         */
        private WindowInterface window;

        /**
         * @param aWindow
         */
        public PrintAction(WindowInterface aWindow) {
            super("Rapport");
            window = aWindow;
        }

        /**
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
         */
        public void actionPerformed(ActionEvent arg0) {
            if (currentReportSetting.isValid()) {
                window.setSize(new Dimension(310, 250));
                Util.runInThreadWheel(window.getRootPane(),new ReportGenerator(window), null);
               
            } else {
                Util.showErrorDialog(window, "Utvalg m� settes",
                        "Alle utvalg m� settes");
            }

        }
    }

    /**
     * @see no.ugland.utransprod.gui.Closeable#canClose(java.lang.String,
     *      no.ugland.utransprod.gui.WindowInterface)
     */
    public boolean canClose(String actionString, WindowInterface window) {
        return true;
    }

    /**
     * Utskrift
     * @author atle.brekka
     */
    private class ReportGenerator implements Threadable {
        /**
         *
         */
        private WindowInterface window;

        /**
         * @param aWindow
         */
        public ReportGenerator(WindowInterface aWindow) {
            window = aWindow;
        }

        /**
         * @see no.ugland.utransprod.util.Threadable#doWhenFinished(java.lang.Object)
         */
        public void doWhenFinished(Object object) {
            window.setSize(getWindowSize());

        }

        /**
         * @see no.ugland.utransprod.util.Threadable#doWork(java.lang.Object[],
         *      javax.swing.JLabel)
         */
        public Object doWork(Object[] params, JLabel labelInfo) {
            String errorString = null;
            try {
                if(labelInfo!=null){
                labelInfo.setText("Genererer transportoversikt...");
                }
                List<Transport> transportList = getTransportList();

                Map<Integer, Map<Transport, TransportOverviewTableModel>> weekModels = generateWeekModels(
                        transportList, ((ReportSetting) presentationModel
                                .getBean()).getProductAreaGroup());

                generateExcel(weekModels);
            } catch (ProTransException ex) {
                ex.printStackTrace();
                errorString = ex.getMessage();
            }
            return errorString;
        }

        private Map<Integer, Map<Transport, TransportOverviewTableModel>> generateWeekModels(
                List<Transport> transportList, ProductAreaGroup productAreaGroup) {
            int currentWeek = 0;
            Map<Transport, TransportOverviewTableModel> models = new HashMap<Transport, TransportOverviewTableModel>();
            Map<Integer, Map<Transport, TransportOverviewTableModel>> weekModels = new HashMap<Integer, Map<Transport, TransportOverviewTableModel>>();
            TransportManager transportManager = (TransportManager) ModelUtil
                    .getBean("transportManager");
           
            for (Transport transport : transportList) {
                transportManager
                        .lazyLoadTransport(
                                transport,
                                new LazyLoadTransportEnum[] {LazyLoadTransportEnum.ORDER});

                if (currentWeek == 0) {
                    currentWeek = transport.getTransportWeek();
                }
               
                if (transport.getTransportWeek() != currentWeek) {
                   
                   
                    weekModels.put(currentWeek, models);
                   
                    List<Order> orders = transport.getOrders(productAreaGroup);
                   
                    if (orders != null && orders.size() != 0) {
                        models = new HashMap<Transport, TransportOverviewTableModel>();
                        currentWeek = transport.getTransportWeek();
                        models.put(transport, new TransportOverviewTableModel(
                                new ArrayListModel(orders), window));
                    }
                   
                } else {
                    addTransportToWeek(transport, models, productAreaGroup);
                }


            }
            weekModels.put(currentWeek, models);
            return weekModels;
        }

      

        private void addTransportToWeek(Transport transport,
                Map<Transport, TransportOverviewTableModel> models,
                ProductAreaGroup productAreaGroup) {
            List<Order> orders = transport.getOrders(productAreaGroup);
            if (orders != null && orders.size() != 0) {
                models.put(transport, new TransportOverviewTableModel(
                        new ArrayListModel(orders), window));
            }
        }

      

        private void generateExcel(
                Map<Integer, Map<Transport, TransportOverviewTableModel>> weekModels)
                throws ProTransException {
            String fileName = "transportoversikt_"
                    + Util.getCurrentDateAsDateTimeString() + ".xls";
            String excelDirectory = ApplicationParamUtil
                    .findParamByName("excel_path");
            ExcelUtil excelUtil = new ExcelUtil();
            excelUtil.showDataInExcelTransportOverview(excelDirectory,
                    fileName, null, weekModels);
        }

        private List<Transport> getTransportList() {
            TransportManager transportManager = (TransportManager) ModelUtil
                    .getBean("transportManager");
            List<Transport> transportList = transportManager
                    .findBetweenYearAndWeek(((ReportSetting) presentationModel
                            .getBean()).getYear(),
                            ((ReportSetting) presentationModel.getBean())
                                    .getFromWeek(),
                            ((ReportSetting) presentationModel.getBean())
                                    .getToWeek(),
                            new String[] {"transportWeek"});
            return transportList;
        }

        /**
         * @see no.ugland.utransprod.util.Threadable#enableComponents(boolean)
         */
        public void enableComponents(boolean enable) {
        }

    }

    /**
     * Finner status for �nsket objekt
     * @param checker
     * @param statusMap
     * @param order
     * @param window
     * @return status
     */
    String getStatus(StatusCheckerInterface<Transportable> checker,
            Map<String, String> statusMap, Order order, WindowInterface window) {
        OrderManager orderManager = (OrderManager) ModelUtil
                .getBean("orderManager");
        String status = statusMap.get(checker.getArticleName());
        if (status != null) {
            return status;
        }
        orderManager.lazyLoadTree(order);

        status = checker.getArticleStatus(order);
        statusMap.put(checker.getArticleName(), status);
        order.setStatus(Util.statusMapToString(statusMap));
        try {
            orderManager.saveOrder(order);
        } catch (ProTransException e) {
            Util.showErrorDialog(window, "Feil", e.getMessage());
            e.printStackTrace();
        }
        return status;
    }

    /**
     * Tabellmodell for transportoversikt
     * @author atle.brekka
     */
    public class TransportOverviewTableModel extends AbstractTableAdapter {

        /**
         *
         */
        private static final long serialVersionUID = 1L;

        /**
         *
         */
        private WindowInterface window;

        /**
         * @param listModel
         * @param aWindow
         */
        public TransportOverviewTableModel(ListModel listModel,
                WindowInterface aWindow) {
            super(listModel, new String[] {"Ordre", "Stein"});
            window = aWindow;

        }

        /**
         * @see javax.swing.table.TableModel#getValueAt(int, int)
         */
        public Object getValueAt(int rowIndex, int columnIndex) {
            Order order = (Order) getRow(rowIndex);
            Map<String, String> statusMap = Util.createStatusMap(order
                    .getStatus());
            switch (columnIndex) {
            case 0:
                return order.getOrderStringShort();
            case 1:
                return getStatus(steinChecker, statusMap, order, window);
            }
            return null;
        }

        /**
         * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
         */
        @Override
        public Class<?> getColumnClass(int columnIndex) {
            switch (columnIndex) {
            case 0:
            case 1:
                return String.class;
            }
            return Object.class;
        }

    }

    /**
     * Sjekker om det skal kj�res dispose
     * @return true dersom dispose
     */
    public boolean getDisposeOnClose() {
        return disposeOnClose;
    }
}
TOP

Related Classes of no.ugland.utransprod.gui.handlers.TransportOverviewReportHandler$ReportSetting

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.