001 package market.stdform; 002 003 import java.util.Comparator; 004 005 import market.Conversions; 006 import market.SMarket; 007 import market.UCustomer; 008 import market.UMUserBase; 009 import market.event.MarketEventAdapter; 010 import market.statistics.Statistics; 011 import market.swing.CmpCustomersNumbers; 012 import sale.FormSheet; 013 import sale.FormSheetContentCreator; 014 import users.UserManagerFilter; 015 import users.stdforms.UserTableFormSheet; 016 import util.swing.AbstractTableEntryDescriptor; 017 018 /** 019 * This FormSheet displays all customers of the market in a table, along with some statistics. From here, 020 * a customer whose complete statistics wish to be viewed can be selected. 021 */ 022 public class FSManagerCustomerStatsMain extends UserTableFormSheet { 023 024 /** 025 * ID for serialization. 026 */ 027 private static final long serialVersionUID = -5821214280590865410L; 028 029 /** 030 * Creates a {@link UserTableFormSheet}. The look of the table is 031 * defined by the {@link TEDManagerCustomerStatsMain}. 032 */ 033 public FSManagerCustomerStatsMain() { 034 super("Kundenstatistik", new UserManagerFilter(UMUserBase.getGlobalBase().getCustomers()), 035 null, null, null, new TEDManagerCustomerStatsMain()); 036 addContentCreator(new FormSheetContentCreator() { 037 private static final long serialVersionUID = 6702310982310088632L; 038 public void createFormSheetContent(final FormSheet fs) { 039 fs.removeAllButtons(); 040 fs.addButton("Details", ButtonIDs.BTN_DETAIL, null); 041 } 042 }); 043 //update view when time advances 044 SMarket.addEventListener(new MarketEventAdapter() { 045 private static final long serialVersionUID = 2105879181881321827L; 046 public void timeAdvanced() { 047 ((util.swing.TableSorter)getTable().getModel()).fireTableDataChanged(); 048 } 049 }); 050 } 051 } 052 053 /** 054 * The {@link util.swing.TableEntryDescriptor} used by {@link FSManagerCustomerStatsMain}. 055 */ 056 class TEDManagerCustomerStatsMain extends AbstractTableEntryDescriptor { 057 058 /** 059 * ID for serialization. 060 */ 061 private static final long serialVersionUID = 5268132884960843114L; 062 private Comparator<Object> salesVolume = new CmpCustomersNumbers(CmpCustomersNumbers.SALES_VOLUME); 063 private Comparator<Object> discount = new CmpCustomersNumbers(CmpCustomersNumbers.DISCOUNT); 064 065 /** 066 * @return the number of the table's columns. 067 */ 068 public int getColumnCount() { 069 return 4; 070 } 071 072 /** 073 * @param nIndex the affected column. 074 * @return columns' names. 075 */ 076 public String getColumnName(int nIndex) { 077 return (new String[]{"Name", "Mitglied seit", "Anrechenbarer Umsatz", "Rabatt"}) [nIndex]; 078 } 079 080 /** 081 * @param nIndex the affected column. 082 * @return columns' classes. They indicate how column's values should be aligned. 083 */ 084 public Class<?> getColumnClass (int nIndex) { 085 return new Class[] {String.class, String.class, Integer.class, Integer.class}[nIndex]; 086 } 087 088 /** 089 * @param oRecord the affected table record. 090 * @param nIndex the affected column. 091 * @return columns' values 092 */ 093 public Object getValueAt(Object oRecord, int nIndex) { 094 UCustomer usr = (UCustomer)oRecord; 095 switch (nIndex) { 096 case 0: 097 return usr.getSurname() + ", " + usr.getFirstName(); 098 case 1: 099 return usr.getDayOfRegistration(); 100 case 2: 101 return Conversions.doubleToCurrency(Statistics.getAllowableCustomerRevenue(usr), " Euro"); 102 case 3: 103 return Conversions.fixedDecimal(100 * usr.getDiscount(), 3) + " %"; 104 } 105 return null; 106 } 107 108 /** 109 * Determines if columns can be sorted by the user. 110 * 111 * @param nIndex the affected column. 112 * @return <ul><li>true: columns can be sorted</li> 113 * <li>false: columns cannot be sorted</li></ul> 114 */ 115 public boolean canSortByColumn(int nIndex) { 116 return true; 117 } 118 119 /** 120 * @param nIndex the affected column. 121 * @return the {@link Comparator} to be used when sorting the column. 122 */ 123 public Comparator<Object> getColumnOrder(int nIndex) { 124 switch (nIndex) { 125 case 2: 126 return salesVolume; 127 case 3: 128 return discount; 129 } 130 return null; 131 } 132 }