diff options
Diffstat (limited to 'src/main/java/com/gitblit/wicket/charting/Flotr2BarChart.java')
-rw-r--r-- | src/main/java/com/gitblit/wicket/charting/Flotr2BarChart.java | 167 |
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); + } + + + +} |