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.management.stats.printers;
8   
9   import org.mule.util.StringUtils;
10  
11  import java.io.OutputStream;
12  import java.io.Writer;
13  import java.util.Collection;
14  import java.util.StringTokenizer;
15  
16  /**
17   * <code>HtmlTablePrinter</code> prints event processing stats as a HTML table
18   */
19  public class HtmlTablePrinter extends AbstractTablePrinter
20  {
21  
22      public HtmlTablePrinter(Writer out)
23      {
24          super(out);
25      }
26  
27      public HtmlTablePrinter(OutputStream out)
28      {
29          super(out);
30      }
31  
32      @Override
33      public void print(Collection stats)
34      {
35          println("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">");
36          String[][] table = getTable(stats);
37          boolean providerStats = false;
38          println("<tr>");
39          for (int i = 0; i < table.length; i++)
40          {
41              println("<td class=\"statistics\">" + table[i][0] + "</td>");
42          }
43          println("</tr>");
44          for (int i = 1; i < table[0].length; i++)
45          {
46              println("<tr class=\"" + ((i % 2 == 0) ? "darkline" : "clearline") + "\">");
47              for (int j = 0; j < table.length; j++)
48              {
49                  if (j == 0)
50                  {
51                      if (StringUtils.equals(table[1][i], "-"))
52                      {
53                          if (StringUtils.equals(table[j][i], "By Provider"))
54                          {
55                              println("<td class=\"statisticsrow\"><div class=\"tablesubheader\">" + table[j][i] + "</div></td>");
56                          }
57                          else
58                          {
59                              println("<td class=\"statisticsrow\"><div class=\"tableheader\">" + table[j][i] + "</div></td>");
60                          }
61                      }
62                      else if (StringUtils.isNotEmpty(table[j][i]))
63                      {
64                          println("<td class=\"statisticsrow\">" + table[j][i] + "</td>");
65                      }
66                      else
67                      {
68                          println("<td class=\"statisticsrow\">&nbsp;</td>");
69                      }
70                  }
71                  else
72                  {
73                      if (providerStats)
74                      {
75                          println("<td class=\"statisticsrow\">" + getProviderStatsHtml(table[j][i]) + "</td>");
76                      }
77                      else
78                      {
79                          println("<td class=\"statisticsrow\">" + ((StringUtils.equals(table[j][i], "-")) ? "" : table[j][i]) + "</td>");
80                      }
81                  }
82              }
83              println("</tr>");
84              if (StringUtils.equals(table[0][i], "By Provider"))
85              {
86                  providerStats = true;
87              }
88              else
89              {
90                  providerStats = false;
91              }
92          }
93          println("</table>");
94      }
95  
96      protected String getProviderStatsHtml(String stats)
97      {
98          if (StringUtils.isBlank(stats) || "-".equals(stats))
99          {
100             return "";
101         }
102 
103         StringBuffer buf = new StringBuffer();
104         buf.append("<table>");
105         StringTokenizer st = new StringTokenizer(stats, ";");
106 
107         if (st.countTokens() == 0)
108         {
109             buf.append("<tr><td class=\"statisticssubrow\">");
110             int i = stats.indexOf("=");
111             buf.append(stats.substring(0, i)).append(": ");
112             buf.append("</td><td  class=\"statisticssubrow\">");
113             buf.append(stats.substring(i + 1));
114             buf.append("</td></tr>");
115         }
116         else
117         {
118             String token;
119             while (st.hasMoreTokens())
120             {
121                 token = st.nextToken();
122                 buf.append("<tr><td class=\"statisticssubrow\">");
123                 int i = token.indexOf("=");
124                 buf.append(token.substring(0, i)).append(": ");
125                 buf.append("</td><td class=\"statisticssubrow\">");
126                 buf.append(token.substring(i + 1));
127                 buf.append("</td></tr>");
128             }
129         }
130         buf.append("</table>");
131         return buf.toString();
132     }
133 
134 }