View Javadoc

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   * @author Torsten Strasser
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          //formBuilder.add("purchaseURL");
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             //TODO: check objectIs
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             //TODO: this should be done by a converter
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 }