summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/wicket/charting/Flotr2BarChart.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/gitblit/wicket/charting/Flotr2BarChart.java')
-rw-r--r--src/main/java/com/gitblit/wicket/charting/Flotr2BarChart.java167
1 files changed, 167 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/wicket/charting/Flotr2BarChart.java b/src/main/java/com/gitblit/wicket/charting/Flotr2BarChart.java
new file mode 100644
index 00000000..4f07555e
--- /dev/null
+++ b/src/main/java/com/gitblit/wicket/charting/Flotr2BarChart.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2011 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.wicket.charting;
+
+import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+
+/**
+ * Implementation of a Bar chart using the flotr2 library
+ *
+ * @author Tim Ryan
+ *
+ */
+public class Flotr2BarChart extends Chart {
+
+ private static final long serialVersionUID = 1L;
+ boolean xAxisIsDate = false;
+
+ public Flotr2BarChart(String tagId, String title, String keyName,
+ String valueName) {
+ super(tagId, title, keyName, valueName);
+
+ }
+
+ @Override
+ protected void appendChart(StringBuilder sb) {
+
+ String dName = "data_" + dataName;
+ sb.append("var labels_" + dataName + " = [");
+ if(xAxisIsDate){
+
+ // Generate labels for the dates
+ SimpleDateFormat df = new SimpleDateFormat(dateFormat);
+ df.setTimeZone(getTimeZone());
+
+ // Sort the values first
+ Collections.sort(values, new Comparator<ChartValue>() {
+
+ public int compare(ChartValue o1, ChartValue o2) {
+ long long1 = Long.parseLong(o1.name);
+ long long2 = Long.parseLong(o2.name);
+ return (int) (long2 - long1);
+ }
+
+ });
+
+
+ for (int i = 0; i < values.size(); i++) {
+ ChartValue value = values.get(i);
+ Date date = new Date(Long.parseLong(value.name));
+ String label = df.format(date);
+ if(i > 0){
+ sb.append(",");
+ }
+ sb.append("[\"" + label + "\", " + value.name + "]");
+ }
+
+ }
+ else {
+ for (int i = 0; i < values.size(); i++) {
+ ChartValue value = values.get(i);
+ if(i > 0){
+ sb.append(",");
+ }
+ sb.append("\"" + value.name + "\"");
+ }
+ }
+ line(sb, "];");
+
+ line(sb, MessageFormat.format("var {0} = Flotr.draw(document.getElementById(''{1}''),", dName, tagId));
+
+ // Add the data
+ line(sb, "[");
+ line(sb, "{ data : [ ");
+ for (int i = 0; i < values.size(); i++) {
+ ChartValue value = values.get(i);
+ if(i > 0){
+ sb.append(",");
+ }
+ if(xAxisIsDate){
+ line(sb, MessageFormat.format("[{0}, {1}] ", value.name, Float.toString(value.value)));
+ }
+ else {
+ line(sb, MessageFormat.format("[{0}, {1}] ", Integer.toString(i), Float.toString(value.value)));
+ }
+
+ }
+ line(sb, MessageFormat.format(" ], label : ''{0}'', color: ''#FF9900'' '}'", valueName));
+ line(sb, "]");
+
+ // Add the options
+ line(sb, ", {");
+ if(title != null && title.isEmpty() == false){
+ line(sb, MessageFormat.format("title : ''{0}'',", title));
+ }
+ line(sb, "bars : {");
+ line(sb, " show : true,");
+ line(sb, " horizontal : false,");
+ line(sb, " barWidth : 1");
+ line(sb, "},");
+ line(sb, "points: { show: false },");
+ line(sb, "mouse: {");
+ line(sb, " track: true,");
+ line(sb, " lineColor: '#002060',");
+ line(sb, " position: 'ne',");
+ line(sb, " trackFormatter: function (obj) {");
+ line(sb, " return labels_" + dataName + "[obj.index] + ': ' + parseInt(obj.y) + ' ' + obj.series.label;");
+ line(sb, " }");
+ line(sb, "},");
+ line(sb, "xaxis: {");
+ line(sb, " showLabels: true,");
+ line(sb, " showMinorLabels: false,");
+ line(sb, " tickFormatter: function (x) {");
+ line(sb, " var index = parseInt(x);");
+ line(sb, " if(x % 1 == 0 && labels_" + dataName + "[index])");
+ line(sb, " return labels_" + dataName + "[index];");
+ line(sb, " return \"\";");
+ line(sb, " },");
+ line(sb, " margin: 10");
+ line(sb, "},");
+ line(sb, "yaxis: {");
+ line(sb, " showLabels: false,");
+ line(sb, " showMinorLabels: false,");
+ line(sb, " tickDecimals: 0,");
+ line(sb, " margin: 10");
+ line(sb, "},");
+ line(sb, "grid: {");
+ line(sb, " verticalLines: false,");
+ line(sb, " minorVerticalLines: null,");
+ line(sb, " horizontalLines: true,");
+ line(sb, " minorHorizontalLines: null,");
+ line(sb, " outlineWidth: 1,");
+ line(sb, " outline: 's'");
+ line(sb, "},");
+ line(sb, "legend: {");
+ line(sb, " show: false");
+ line(sb, "}");
+ line(sb, "});");
+
+ }
+
+ @Override
+ public void addValue(Date date, int value) {
+ xAxisIsDate = true;
+ String name = String.valueOf(date.getTime());
+ super.addValue(name, value);
+ }
+
+
+
+}