1 package de.orangecafe.amazonrcp.gui.forms;
2
3 import org.springframework.richclient.form.AbstractTableMasterForm;
4 import org.springframework.richclient.form.AbstractDetailForm;
5 import org.springframework.richclient.command.CommandGroup;
6 import org.springframework.richclient.progress.ListStatusBarUpdater;
7 import org.springframework.binding.form.HierarchicalFormModel;
8 import org.springframework.binding.value.ValueModel;
9 import org.springframework.binding.value.support.ObservableList;
10
11 import com.amazon.webservices.awsecommerceservice._2007_04_04.Item;
12 import com.amazon.webservices.awsecommerceservice._2007_04_04.ItemAttributes;
13 import com.amazon.webservices.awsecommerceservice._2007_04_04.OfferSummary;
14 import com.amazon.webservices.awsecommerceservice._2007_04_04.Price;
15
16 import de.orangecafe.amazonrcp.gui.commands.AddToCartCommand;
17 import de.orangecafe.amazonrcp.gui.commands.SearchAmazonCommand;
18 import de.orangecafe.amazonrcp.gui.util.PriceTableCellRenderer;
19 import de.orangecafe.amazonrcp.gui.util.ImageTableCellRenderer;
20 import de.orangecafe.amazonrcp.helper.SelectedItemListHolder;
21 import de.orangecafe.amazonrcp.converter.PriceToStringConverter;
22 import de.orangecafe.amazonrcp.converter.StringToPriceConverter;
23
24 import javax.swing.*;
25 import javax.swing.table.TableColumnModel;
26 import java.util.List;
27 import java.util.Currency;
28 import java.util.Locale;
29 import java.text.NumberFormat;
30 import java.math.BigInteger;
31
32
33
34
35 public class SearchResultMasterForm extends AbstractTableMasterForm {
36 private final static String[] COLUMN_NAMES = new String[] {
37 "smallImage",
38 "itemAttributes.title",
39 "itemAttributes.author",
40 "offerSummary.lowestNewPrice",
41 "ASIN"
42 };
43
44 private SelectedItemListHolder _holder;
45
46 public SearchResultMasterForm(final HierarchicalFormModel hierarchicalFormModel, final String property, final String formId, final Class detailType, final SelectedItemListHolder holder) {
47 super(hierarchicalFormModel, property, formId, detailType);
48
49 hierarchicalFormModel.registerPropertyConverter("offerSummary.lowestNewPrice", new PriceToStringConverter(), new StringToPriceConverter());
50
51 _holder = holder;
52 }
53
54 protected String[] getColumnPropertyNames() {
55 return COLUMN_NAMES;
56 }
57
58 protected AbstractDetailForm createDetailForm(final HierarchicalFormModel hierarchicalFormModel, final ValueModel valueModel, final ObservableList observableList) {
59 Item item = (Item) valueModel.getValue();
60
61 init(item);
62
63 return new SearchResultDetailForm(hierarchicalFormModel, "searchResultDetail", valueModel, observableList);
64 }
65
66 @Override
67 protected JComponent createFormControl() {
68 JComponent component = super.createFormControl();
69
70 TableColumnModel columnModel = getMasterTable().getColumnModel();
71
72
73 columnModel.getColumn(0).setCellRenderer(new ImageTableCellRenderer());
74 columnModel.getColumn(3).setCellRenderer(new PriceTableCellRenderer());
75
76 getMasterTable().setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
77
78 columnModel.getColumn(0).setPreferredWidth(70);
79 columnModel.getColumn(1).setPreferredWidth(370);
80 columnModel.getColumn(2).setPreferredWidth(180);
81 columnModel.getColumn(3).setPreferredWidth(70);
82 columnModel.getColumn(4).setPreferredWidth(70);
83
84 getMasterTable().setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
85
86 return component;
87 }
88
89 @Override
90 protected CommandGroup getCommandGroup() {
91 AddToCartCommand addCommand = (AddToCartCommand) getActiveWindow().getCommandManager().getCommand("addToCartCommand");
92 getSelectionModel().addListSelectionListener(addCommand);
93
94 SearchAmazonCommand searchCommand = (SearchAmazonCommand) getActiveWindow().getCommandManager().getCommand("searchAmazonCommand");
95
96 return CommandGroup.createCommandGroup(new Object[] { searchCommand, addCommand });
97 }
98
99 @Override
100 protected void installSelectionHandler() {
101 super.installSelectionHandler();
102
103 getSelectionModel().addListSelectionListener(_holder);
104 getFormModel().addPropertyChangeListener(_holder);
105 getSelectionModel().addListSelectionListener(new ListStatusBarUpdater(getActiveWindow().getStatusBar()) {
106 protected String getSelectedObjectName() {
107 return null;
108 }
109
110 @Override
111 protected void onSingleSelection(final int i) {
112
113 String message = "1 item selected (" + getPrice(new int[] { i }) + ")";
114 getStatusBar().setMessage(message);
115 }
116
117 @Override
118 protected void onMultiSelection(final int[] selection) {
119
120 String message = getItemsSelected() + " items selected (" + getPrice(selection) + ")";
121 getStatusBar().setMessage(message);
122 }
123
124 @Override
125 protected void onNoSelection() {
126 getStatusBar().setMessage(null);
127 }
128
129 private String getPrice(int[] selection) {
130 List<Item> items = getFormData();
131 float sum = 0;
132 for (int i : selection) {
133 if (items.get(i).getOfferSummary().getLowestNewPrice() != null) {
134 sum += (items.get(i).getOfferSummary().getLowestNewPrice().getAmount().floatValue() / 100);
135 } else {
136
137 }
138 }
139
140 NumberFormat formatter = NumberFormat.getCurrencyInstance();
141 if (items.get(selection[0]).getOfferSummary().getLowestNewPrice() != null) {
142 formatter.setCurrency(Currency.getInstance(items.get(selection[0]).getOfferSummary().getLowestNewPrice().getCurrencyCode()));
143 } else {
144
145 formatter.setCurrency(Currency.getInstance("EUR"));
146 }
147
148 return formatter.format(sum);
149 }
150 });
151 }
152
153 private void init(final Item item) {
154
155 ItemAttributes itemAttributes = (ItemAttributes) getApplicationContext().getBean("itemAttributes");
156
157 item.setItemAttributes(itemAttributes);
158
159 OfferSummary offerSummary = (OfferSummary) getApplicationContext().getBean("offerSummary");
160
161 Price price = (Price) getApplicationContext().getBean("price");
162 price.setAmount(BigInteger.ZERO);
163 price.setCurrencyCode(Currency.getInstance(Locale.getDefault()).getCurrencyCode());
164
165 offerSummary.setLowestNewPrice(price);
166
167 item.setOfferSummary(offerSummary);
168
169 com.amazon.webservices.awsecommerceservice._2007_04_04.Image image = (com.amazon.webservices.awsecommerceservice._2007_04_04.Image) getApplicationContext().getBean("image");
170
171 item.setLargeImage(image);
172 item.setMediumImage(image);
173 item.setSmallImage(image);
174 }
175 }