1 package de.orangecafe.amazonrcp.gui.commands;
2
3 import org.springframework.richclient.command.ActionCommand;
4 import org.springframework.richclient.form.Form;
5 import org.springframework.richclient.dialog.TitledPageApplicationDialog;
6 import org.springframework.richclient.dialog.FormBackedDialogPage;
7 import org.springframework.richclient.dialog.MessageDialog;
8 import org.springframework.richclient.application.event.LifecycleApplicationEvent;
9 import org.springframework.richclient.application.Application;
10 import org.springframework.richclient.application.ApplicationException;
11 import org.springframework.richclient.core.Message;
12 import org.springframework.util.Assert;
13 import de.orangecafe.amazonrcp.service.IAmazonService;
14 import de.orangecafe.amazonrcp.service.ServiceException;
15 import com.amazon.webservices.awsecommerceservice._2007_04_04.Items;
16 import com.amazon.webservices.awsecommerceservice._2007_04_04.ItemSearchRequest;
17
18
19
20
21 public class SearchAmazonCommand extends ActionCommand {
22 private IAmazonService _service;
23 private ActionCommand _showSearchResultViewCommand;
24
25 public void setAmazonService(final IAmazonService service) {
26 Assert.notNull(service);
27 _service = service;
28 }
29
30 public void setShowSearchResultViewCommand(final ActionCommand command) {
31 _showSearchResultViewCommand = command;
32 }
33
34 @Override
35 protected void doExecuteCommand() {
36 _showSearchResultViewCommand.execute();
37 showSearchRequestDialog();
38 }
39
40 private void showSearchRequestDialog() {
41 final Form form = (Form) Application.instance().getApplicationContext().getBean("searchForm");
42 TitledPageApplicationDialog dialog = new TitledPageApplicationDialog(new FormBackedDialogPage(form)) {
43 protected boolean onFinish() {
44 form.commit();
45
46 ItemSearchRequest request = (ItemSearchRequest) form.getFormObject();
47
48 Items items = search(request);
49
50 if (items.getItem().size() > 0) {
51 getApplicationContext().publishEvent(new LifecycleApplicationEvent(LifecycleApplicationEvent.MODIFIED, items));
52
53 return true;
54 } else {
55 MessageDialog dialog = new MessageDialog(getMessage("noSearchResultDialog.title"), new Message(getMessage("noSearchResultDialog.description")));
56 dialog.showDialog();
57
58 return false;
59 }
60 }
61 };
62
63 dialog.showDialog();
64 }
65
66 private Items search(final ItemSearchRequest request) {
67 try {
68 return _service.search(request);
69 } catch (ServiceException e) {
70 throw new ApplicationException(e);
71 }
72 }
73 }