1 package de.orangecafe.amazonrcp.gui.views;
2
3 import org.springframework.richclient.application.support.AbstractView;
4 import org.springframework.richclient.application.event.LifecycleApplicationEvent;
5 import org.springframework.richclient.application.ApplicationException;
6 import org.springframework.richclient.form.builder.TableFormBuilder;
7 import org.springframework.richclient.form.binding.BindingFactory;
8 import org.springframework.richclient.form.binding.BindingFactoryProvider;
9 import org.springframework.richclient.form.FormModelHelper;
10 import org.springframework.richclient.table.support.AbstractObjectTable;
11 import org.springframework.richclient.command.ActionCommand;
12 import org.springframework.binding.form.FormModel;
13 import org.springframework.context.ApplicationListener;
14 import org.springframework.context.ApplicationEvent;
15
16 import javax.swing.*;
17
18 import com.amazon.webservices.awsecommerceservice._2007_04_04.*;
19
20 import java.util.List;
21
22 import de.orangecafe.amazonrcp.helper.CartHolder;
23 import de.orangecafe.amazonrcp.service.ServiceException;
24 import de.orangecafe.amazonrcp.gui.util.PriceTableCellRenderer;
25
26
27
28
29 public class CartView extends AbstractView implements ApplicationListener {
30 private final static String[] COLUMN_PROPERTY_NAMES = new String[] {
31 "title",
32 "productGroup",
33 "sellerNickname",
34 "quantity",
35 "price",
36 "itemTotal",
37 "ASIN"
38 };
39
40 private FormModel _cartFormModel;
41 private CartItemTable _itemTable = new CartItemTable();
42 private CartHolder _cartHolder;
43
44 public void setCartHolder(final CartHolder cartHolder) {
45 _cartHolder = cartHolder;
46 }
47
48 protected JComponent createControl() {
49 Cart cart;
50
51 try {
52 cart = _cartHolder.getCart();
53 } catch (ServiceException e) {
54 throw new ApplicationException(e);
55 }
56
57
58 JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
59
60 splitPane.setTopComponent(createTopPane(cart));
61 splitPane.setBottomComponent(createBottomPane());
62
63 splitPane.setOneTouchExpandable(true);
64
65 initTable(cart);
66
67 return splitPane;
68 }
69
70 private BindingFactory getBindingFactory(final Object formObject) {
71 BindingFactoryProvider provider = (BindingFactoryProvider) getService(BindingFactoryProvider.class);
72 _cartFormModel = FormModelHelper.createFormModel(formObject);
73
74 return provider.getBindingFactory(_cartFormModel);
75 }
76
77 private JPanel createTopPane(final Cart cart) {
78 TableFormBuilder formBuilder = new TableFormBuilder(getBindingFactory(cart));
79 formBuilder.add("cartId");
80 formBuilder.row();
81 formBuilder.add("subTotal.formattedPrice");
82
83 formBuilder.row();
84 ActionCommand clearCartCommand = (ActionCommand) getWindowCommandManager().getCommand("clearCartCommand");
85 formBuilder.getLayoutBuilder().cell(clearCartCommand.createButton());
86
87 ActionCommand refreshCartViewCommand = (ActionCommand) getWindowCommandManager().getCommand("refreshCartViewCommand");
88 formBuilder.getLayoutBuilder().cell(refreshCartViewCommand.createButton());
89
90
91 formBuilder.getLayoutBuilder().cell(getBindingFactory(cart).createBinding(com.amazon.webservices.awsecommerceservice._2007_04_04.Cart.class, "purchaseURL").getControl());
92
93
94 JPanel topPane = getComponentFactory().createPanel();
95 topPane.add(formBuilder.getForm());
96
97 return topPane;
98 }
99
100 private JComponent createBottomPane() {
101 JScrollPane bottomPane = getComponentFactory().createScrollPane();
102
103 bottomPane.setViewportView(_itemTable.getControl());
104
105 return bottomPane;
106 }
107
108 private void initTable(final Cart cart) {
109 if ((cart != null) && (cart.getCartItems() != null)) {
110 List<CartItem> items = cart.getCartItems().getCartItem();
111 _itemTable.getBaseEventList().clear();
112 _itemTable.getBaseEventList().addAll(items);
113 } else {
114 _itemTable.getBaseEventList().clear();
115 }
116 }
117
118 public void onApplicationEvent(final ApplicationEvent applicationEvent) {
119 if (applicationEvent instanceof LifecycleApplicationEvent) {
120 LifecycleApplicationEvent le = (LifecycleApplicationEvent) applicationEvent;
121
122
123 if (le.getEventType().equals(LifecycleApplicationEvent.CREATED) && le.objectIs(Class.class)) {
124 Cart cart;
125 try {
126 cart = _cartHolder.getCart();
127 } catch (ServiceException e) {
128 throw new ApplicationException(e);
129 }
130
131 _cartFormModel.setFormObject(cart);
132 initTable(cart);
133 }
134 }
135 }
136
137 public class CartItemTable extends AbstractObjectTable {
138 public CartItemTable() {
139 super("cartItems", COLUMN_PROPERTY_NAMES);
140
141
142 getTable().getColumnModel().getColumn(4).setCellRenderer(new PriceTableCellRenderer());
143 getTable().getColumnModel().getColumn(5).setCellRenderer(new PriceTableCellRenderer());
144 }
145
146 protected CartItem[] getDefaultInitialData() {
147 return new CartItem[0];
148 }
149 }
150 }