1 package org.gforge.soapclient;
3 import org.jfree.chart.ChartPanel;
4 import org.jfree.chart.JFreeChart;
5 import org.jfree.chart.axis.DateAxis;
6 import org.jfree.chart.axis.HorizontalDateAxis;
7 import org.jfree.chart.axis.NumberAxis;
8 import org.jfree.chart.axis.VerticalNumberAxis;
9 import org.jfree.chart.plot.XYPlot;
10 import org.jfree.data.time.Day;
11 import org.jfree.data.time.TimePeriodValues;
12 import org.jfree.data.time.TimePeriodValuesCollection;
14 import javax.swing.JButton;
15 import javax.swing.JPanel;
16 import javax.swing.JScrollPane;
17 import javax.swing.JOptionPane;
18 import javax.swing.JLabel;
19 import java.awt.BorderLayout;
20 import java.awt.Dimension;
21 import java.awt.event.ActionEvent;
22 import java.awt.event.ActionListener;
24 public class StatisticsPanel extends JPanel {
26 private class RefreshListener implements ActionListener {
27 public void actionPerformed(ActionEvent e) {
29 if (Settings.getInstance().get(ConfigurationPanel.SERVER_PROPERTY) == null || Settings.getInstance().get(ConfigurationPanel.SERVER_PROPERTY).equals("")) {
30 JOptionPane.showMessageDialog(null, "Please fill in a server name on the Configuration tab (i.e., cougaarforge.cougaar.org)");
33 Client client = new Client(Settings.getInstance().get(ConfigurationPanel.SERVER_PROPERTY), Settings.getInstance().get(ConfigurationPanel.GROUP_PROPERTY));
34 stats = client.getSiteStats();
36 } catch (Exception ex) {
42 private SiteStatsDataPoint[] stats;
44 public StatisticsPanel() {
49 private void refresh() {
54 JButton refreshButton = new JButton("Refresh");
55 refreshButton.addActionListener(new RefreshListener());
57 add(new JLabel("No stats available"));
61 JPanel topRow = new JPanel();
62 topRow.add(createUsersOverTimeChart());
63 topRow.add(createSessionsPerDayChart());
65 JPanel nextRow = new JPanel();
66 nextRow.add(createPageViewsPerDayChart());
68 JPanel all = new JPanel(new BorderLayout());
69 all.add(topRow, BorderLayout.NORTH);
70 all.add(nextRow, BorderLayout.SOUTH);
72 setLayout(new BorderLayout());
73 JPanel buttonPanel = new JPanel();
74 JButton refreshButton = new JButton("Refresh");
75 refreshButton.addActionListener(new RefreshListener());
76 buttonPanel.add(refreshButton);
77 add(buttonPanel, BorderLayout.NORTH);
78 add(new JScrollPane(all), BorderLayout.CENTER);
81 private JPanel createUsersOverTimeChart() {
82 TimePeriodValues tpv = new TimePeriodValues("UsersToDate");
83 for (int i=0; i<stats.length; i++) {
84 tpv.add(Day.parseDay(stats[i].getDate()), new Integer(stats[i].getUsers()));
86 TimePeriodValuesCollection data = new TimePeriodValuesCollection();
89 return wrapPlot(createPlot(data, "Users", "As of Date"), "Total Active Users");
92 private JPanel createSessionsPerDayChart() {
93 TimePeriodValues tpv = new TimePeriodValues("SessionsPerDay");
94 for (int i=0; i<stats.length; i++) {
95 tpv.add(Day.parseDay(stats[i].getDate()), new Integer(stats[i].getSessions()));
97 TimePeriodValuesCollection data = new TimePeriodValuesCollection();
99 return wrapPlot(createPlot(data, "Sessions", "Day"), "Sessions Per Day");
102 private JPanel createPageViewsPerDayChart() {
103 TimePeriodValues tpv = new TimePeriodValues("PageViewsPerDay");
104 for (int i=0; i<stats.length; i++) {
105 tpv.add(Day.parseDay(stats[i].getDate()), new Integer(stats[i].getPageviews()));
107 TimePeriodValuesCollection data = new TimePeriodValuesCollection();
109 return wrapPlot(createPlot(data, "Pageviews", "Day"), "Pageviews Per Day");
112 private XYPlot createPlot(TimePeriodValuesCollection data, String y, String x) {
113 NumberAxis yAxis = new VerticalNumberAxis(y);
114 DateAxis xAxis = new HorizontalDateAxis(x);
115 return new XYPlot(data, xAxis, yAxis);
118 private JPanel wrapPlot(XYPlot plot, String title) {
119 JFreeChart c = new JFreeChart(plot);
121 ChartPanel p = new ChartPanel(c);
122 p.setPreferredSize(new Dimension(400,200));