/**
* Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
* EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://www.ewcms.com
*/
package com.ewcms.plugin.visit.util;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
*
* @author wu_zhijun
*
*/
public class ChartVisitUtil {
public static String getLine2DChart(List<String> categories,
Map<String, Map<String, Long>> dataSet, int labelCount) {
StringBuffer xml = new StringBuffer();
String[] Colors = { "1D8BD1", "F1683C", "2AD62A", "FF0000", "006F00",
"CCCC00", "0D8ECF", "04D215", "B0DE09", "F8FF01", "FF9E01",
"FF6600", "814EE6", "F234B0", "FF9966", "0099FF", "993300",
"333300", "003300", "003366", "000080", "333399", "333333",
"800000", "FF6600", "808000", "808080", "008080", "0000FF",
"666699", "808080", "FF9900", "99CC00", "339966", "33CCCC",
"3366FF", "800080", "999999", "FF00FF", "FFCC00", "FFFF00",
"00FF00", "00FFFF", "00CCFF", "993366", "C0C0C0", "FF99CC",
"FFCC99", "FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF",
"FFFFFF" };
xml.append("<graph lineThickness='0' canvasBorderThickness='0' alternateHGridAlpha='5' canvasBorderColor='666666' divLineColor='ff5904' divLineAlpha='20' showAlternateHGridColor='1' AlternateHGridColor='ff5904' hovercapbg='FFECAA' hovercapborder='F47E00' formatNumberScale='0' decimalPrecision='0' showvalues='0' numdivlines='4' numVdivlines='0' rotateNames='0' labelDisplay='NONE'>");
xml.append("<categories>");
int space = new Double(
Math.ceil(categories.size() * 0.95D / labelCount)).intValue();
int count = 0;
for (int i = 0; i < categories.size(); i++) {
String key = categories.get(i);
if (i % space == 0)
count++;
xml.append("<category name='"
+ key
+ "' "
+ ((i % space == 0) && (count <= labelCount) ? ""
: "showName='0'") + "/>");
}
xml.append("</categories>");
Iterator<Entry<String, Map<String, Long>>> itDataSet = dataSet
.entrySet().iterator();
int j = 0;
while (itDataSet.hasNext()) {
Map.Entry<String, Map<String, Long>> entry = itDataSet.next();
String seriesName = entry.getKey();
Map<String, Long> setMap = entry.getValue();
String color = Colors[((j) % Colors.length)];
xml.append("<dataset seriesName='" + seriesName + "' color='"
+ color + "' anchorBorderColor='" + color
+ "' anchorBgColor='" + color + "'>");
Iterator<Entry<String, Long>> valueMap = setMap.entrySet()
.iterator();
while (valueMap.hasNext()) {
Map.Entry<String, Long> m = valueMap.next();
Long total = m.getValue();
xml.append("<set value='" + total + "'/>");
}
xml.append("</dataset>");
j++;
}
xml.append("</graph>");
return xml.toString();
}
public static String getPie3DChart(Map<String, Long> dataSet) {
StringBuffer xml = new StringBuffer();
String[] Colors = { "FF0000", "006F00", "CCCC00", "0D8ECF", "04D215",
"B0DE09", "F8FF01", "FF9E01", "FF6600", "814EE6", "F234B0",
"FF9966", "0099FF", "993300", "333300", "003300", "003366",
"000080", "333399", "333333", "800000", "FF6600", "808000",
"808080", "008080", "0000FF", "666699", "808080", "FF9900",
"99CC00", "339966", "33CCCC", "3366FF", "800080", "999999",
"FF00FF", "FFCC00", "FFFF00", "00FF00", "00FFFF", "00CCFF",
"993366", "C0C0C0", "FF99CC", "FFCC99", "FFFF99", "CCFFCC",
"CCFFFF", "99CCFF", "CC99FF", "FFFFFF", "1D8BD1", "F1683C",
"2AD62A" };
xml.append("<graph baseFontSize=\"12\" showNames=\"1\" hoverCapSepChar=\":\" animation=\"1\" nameTBDistance=\"20\" showPercentageInLabel=\"1\">");
Iterator<Entry<String, Long>> it = dataSet.entrySet().iterator();
int i = 0;
while (it.hasNext()) {
Map.Entry<String, Long> e = it.next();
xml.append("<set value=\"" + e.getValue() + "\" name=\""
+ e.getKey() + "\" color=\"" + Colors[(i % Colors.length)]
+ "\"/>");
i++;
}
xml.append("</graph>");
return xml.toString();
}
public static String getMixed2DChart(List<String> categories, Map<String, Map<String, String>> dataSet, String yColumn, int labelCount) {
StringBuffer xml = new StringBuffer();
String[] Colors = { "F6BD0F", "8BBA00", "FF0000", "2AD62A", "006F00",
"CCCC00", "0D8ECF", "04D215", "B0DE09", "F8FF01", "FF9E01",
"FF6600", "814EE6", "F234B0", "FF9966", "0099FF", "993300",
"333300", "003300", "003366", "000080", "333399", "333333",
"800000", "FF6600", "808000", "808080", "008080", "0000FF",
"666699", "808080", "FF9900", "99CC00", "339966", "33CCCC",
"3366FF", "800080", "999999", "FF00FF", "FFCC00", "FFFF00",
"00FF00", "00FFFF", "00CCFF", "993366", "C0C0C0", "FF99CC",
"FFCC99", "FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF",
"FFFFFF" };
xml.append("<graph lineThickness='0' canvasBorderThickness='0' alternateHGridAlpha='5' canvasBorderColor='666666' divLineColor='ff5904' divLineAlpha='20' showAlternateHGridColor='1' AlternateHGridColor='ff5904' hovercapbg='FFECAA' hovercapborder='F47E00' formatNumberScale='0' decimalPrecision='0' showvalues='0' numdivlines='4' numVdivlines='0' rotateNames='0'>");
xml.append("<categories>");
int space = new Double(
Math.ceil(categories.size() * 0.95D / labelCount)).intValue();
int count = 0;
for (int i = 0; i < categories.size(); i++) {
String key = categories.get(i);
if (i % space == 0)
count++;
xml.append("<category name='"
+ key
+ "' "
+ ((i % space == 0) && (count <= labelCount) ? ""
: "showName='0'") + "/>");
}
xml.append("</categories>");
Iterator<Entry<String, Map<String, String>>> itDataSet = dataSet
.entrySet().iterator();
int j = 0;
while (itDataSet.hasNext()) {
Map.Entry<String, Map<String, String>> entry = itDataSet.next();
String seriesName = entry.getKey();
Map<String, String> setMap = entry.getValue();
String color = Colors[((j) % Colors.length)];
xml.append("<dataset seriesName='" + seriesName + "' color='"
+ color + "' anchorBorderColor='" + color
+ "' anchorBgColor='" + color + "'");
if (seriesName.equalsIgnoreCase(yColumn)) {
xml.append(" parentYAxis='S'");
}
xml.append(">");
Iterator<Entry<String, String>> valueMap = setMap.entrySet()
.iterator();
while (valueMap.hasNext()) {
Map.Entry<String, String> m = valueMap.next();
String total = m.getValue();
xml.append("<set value='" + total + "'/>");
}
xml.append("</dataset>");
j++;
}
xml.append("</graph>");
return xml.toString();
}
}