1
2
3
4
5
6
7
8
9
10
11 package org.mule.example.bookstore;
12
13 import org.mule.example.bookstore.web.HtmlTemplate;
14
15 import java.util.HashMap;
16 import java.util.Map;
17 import java.util.Map.Entry;
18
19
20
21
22 public class DataWarehouse
23 {
24 int booksOrdered = 0;
25 double totalRevenue = 0;
26 double averagePrice = 0;
27 Map <String, Integer> sales = new HashMap <String, Integer> ();
28 String bestSeller = "";
29
30 public String updateStats(Order order)
31 {
32 Book book = order.getBook();
33 booksOrdered += order.getQuantity();
34 totalRevenue += (book.getPrice() * order.getQuantity());
35 averagePrice = totalRevenue / booksOrdered;
36
37 String title = book.getTitle();
38 Integer quantity = sales.get(title);
39 if (quantity == null)
40 {
41 sales.put(title, order.getQuantity());
42 }
43 else
44 {
45 sales.put(title, quantity + order.getQuantity());
46 }
47 bestSeller = getBestSeller();
48
49 System.out.println("Updating stats");
50 return HtmlTemplate.wrapHtmlBody(printHtmlStats());
51 }
52
53 protected String getBestSeller()
54 {
55 String title = "";
56 int quantity = 0;
57 for (Entry<String, Integer> entry : sales.entrySet())
58 {
59 if (entry.getValue() > quantity)
60 {
61 title = entry.getKey();
62 quantity = entry.getValue();
63 }
64 }
65 return title;
66 }
67
68 protected String printHtmlStats()
69 {
70 StringBuilder sb = new StringBuilder();
71 sb.append("<h2>Data Warehouse Statistics</h2>");
72 sb.append("<table>");
73 sb.append(" <tr><th>Books sold</th> <td>").append(booksOrdered).append("</td></tr>");
74 sb.append(String.format(" <tr><th>Total revenue</th> <td>$%.2f</td></tr>", totalRevenue));
75 sb.append(String.format(" <tr><th>Average price</th> <td>$%.2f</td></tr>", averagePrice));
76 sb.append("<tr><th>Best seller</th> <td>").append(bestSeller).append("</td></tr>");
77 sb.append("</table>");
78
79 return sb.toString();
80 }
81 }