View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
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   * Tracks statistics on book orders.
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  }