View Javadoc

1   /*
2    * $Id: DataWarehouse.java 19423 2010-09-08 08:04:54Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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   * Tracks statistics on book orders.
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  }