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