001    package market.stdform;
002    
003    import java.util.Comparator;
004    
005    import market.CIOpenPurchaseOrders;
006    import market.Conversions;
007    import market.SMarket;
008    import market.swing.CmpOpoNumbers;
009    import sale.FormSheet;
010    import sale.FormSheetContentCreator;
011    import util.swing.AbstractTableEntryDescriptor;
012    import data.stdforms.SingleTableFormSheet;
013    
014    /**
015     * This FormSheet displays an overview of the market's purchases that have not yet arrived.
016     */
017    public class FSManagerOpenPurchaseOrderMain {
018    
019        /**
020         * Creates a {@link SingleTableFormSheet}. The look of the table is defined by the
021         * {@link TEDManagerOpenPurchaseOrderMain}.
022         *
023         * @return the created SingleTableFormSheet.
024         */
025        public static SingleTableFormSheet create() {
026    
027            final SingleTableFormSheet stfs = SingleTableFormSheet.create(
028                "Erwartete Lieferungen",
029                SMarket.getOpenPurchaseOrder(),
030                null,                                     //DataBasket
031                new TEDManagerOpenPurchaseOrderMain()     //TED
032            );
033            stfs.addContentCreator(new FormSheetContentCreator() {
034                            private static final long serialVersionUID = -7266796442603125861L;
035                            public void createFormSheetContent(final FormSheet fs) {
036                    fs.removeAllButtons();
037                    fs.addButton("Details", ButtonIDs.BTN_DETAIL, null);
038                }
039            });
040            return stfs;
041        }
042    }
043    
044    /**
045     * The {@link util.swing.TableEntryDescriptor} used by {@link FSManagerOpenPurchaseOrderMain}.
046     */
047    class TEDManagerOpenPurchaseOrderMain extends AbstractTableEntryDescriptor {
048    
049        /**
050             * ID for serialization.
051             */
052            private static final long serialVersionUID = 2975498437787636914L;
053            
054            private Comparator<Object> sortValue = new CmpOpoNumbers();
055    
056        /**
057         * @return the number of the table's columns.
058         */
059        public int getColumnCount() {
060            return 3;
061        }
062    
063        /**
064         * @param nIndex the affected column.
065         * @return columns' names.
066         */
067        public String getColumnName(int nIndex) {
068            return (new String[]{ "Bestelldatum", "Gesamtsumme", "Tage bis Ankunft"}) [nIndex];
069        }
070    
071        /**
072         * @param nIndex the affected column.
073         * @return columns' classes. They indicate how column's values should be aligned.
074         */
075        public Class<?> getColumnClass  (int nIndex) {
076            return Number.class;
077        }
078    
079        /**
080         * @param oRecord the affected table record.
081         * @param nIndex the affected column.
082         * @return columns' values
083         */
084        public Object getValueAt(Object oRecord, int nIndex) {
085            CIOpenPurchaseOrders opo = (CIOpenPurchaseOrders)oRecord;
086            switch (nIndex) {
087                case 0: return opo.getName();
088                case 1: return Conversions.doubleToCurrency(opo.getOrdersValue().doubleValue(), " Euro");
089                case 2: return opo.getValue();
090            }
091            return null;
092        }
093    
094        /**
095         * Determines if columns can be sorted by the user.
096         *
097         * @param nIndex the affected column.
098         * @return <ul><li>true: columns can be sorted</li>
099         *              <li>false: columns cannot be sorted</li></ul>
100         */
101        public boolean canSortByColumn(int nIndex) {
102            return true;
103        }
104    
105        /**
106         * @param nIndex the affected column.
107         * @return the {@link Comparator} to be used when sorting the column.
108         */
109        public Comparator<Object> getColumnOrder(int nIndex) {
110            switch(nIndex) {
111                case 0: return null;
112                case 1: return sortValue;
113                case 2: return null;
114            }
115            return null;
116        }
117    }