public String generatePieChart( String hitOrdNum, HttpSession session, PrintWriter pw, String courseId, int studentId) { /* int groupId=0; if (groupName.equals("All")){ groupId=0; }else{ groupId = studStatisticBean.getGroupIdByName(groupName); }*/ String filename = null; try { // Retrieve list of WebHits StudentsConceptChartDataSet whDataSet = new StudentsConceptChartDataSet(studStatisticBean, courseId, studentId); ArrayList list = whDataSet.getDataBySection(hitOrdNum); // Throw a custom NoDataException if there is no data if (list.size() == 0) { System.out.println("No data has been found"); throw new NoDataException(); } // Create and populate a PieDataSet DefaultPieDataset data = new DefaultPieDataset(); Iterator iter = list.listIterator(); while (iter.hasNext()) { StudentsConceptHit wh = (StudentsConceptHit) iter.next(); data.setValue(wh.getSection(), wh.getHitDegree()); } // Create the chart object PiePlot plot = new PiePlot(data); plot.setInsets(new Insets(0, 5, 5, 5)); plot.setURLGenerator(new StandardPieURLGenerator("xy_chart.jsp", "section")); plot.setToolTipGenerator(new StandardPieItemLabelGenerator()); JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, true); chart.setBackgroundPaint(java.awt.Color.white); // Write the chart image to the temporary directory ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); filename = ServletUtilities.saveChartAsPNG(chart, 600, 400, info, session); // Write the image map to the PrintWriter ChartUtilities.writeImageMap(pw, filename, info); pw.flush(); } catch (NoDataException e) { System.out.println(e.toString()); filename = "public_nodata_500x300.png"; } catch (Exception e) { System.out.println("Exception - " + e.toString()); e.printStackTrace(System.out); filename = "public_error_500x300.png"; } return filename; }
public void addValue(String s) { data.setValue(s, Integer.parseInt(s.substring(s.indexOf(":") + 1, s.length()))); }
/** 与えられたXMLドキュメントより、"Dataset"オブジェクトの配列(ArrayList)を取得する */ private ArrayList<Dataset> getDatasetList(Document doc) { ArrayList<Dataset> dataSetList = new ArrayList<Dataset>(); Element root = doc.getDocumentElement(); Element chartInfo = (Element) root.getElementsByTagName("ChartInfo").item(0); NodeList dataSetNodeList = root.getElementsByTagName("DataSet"); Dataset dataset = null; // XMLの"DataSetList"要素内にある"DataSet"要素の数だけまわる for (int i = 0; i < dataSetNodeList.getLength(); i++) { Element firstDataSet = (Element) dataSetNodeList.item(i); NodeList dataList = firstDataSet.getElementsByTagName("Data"); // データセットの初期化(円チャート、3D円チャート) if ((this.chartType.equals("Pie")) || (this.chartType.equals("Pie_3D"))) { dataset = new DefaultPieDataset(); // データセットの初期化(それ以外のチャート(線、棒、面、および複数Seriesを持つ円チャート)) } else { // 複数円チャートの場合は、XMLにある複数の"DataSet"要素内の"Data"要素を、一つのJava "Dataset"オブジェクトに // 格納するため、datasetの新規作成処理を行なわない // 複数線、棒、面チャートの場合は、XMLの"DataSet"毎に Java "Dataset"オブジェクトを一つ生成する if ((!this.chartType.equals("MultiPie")) || (i == 0)) { dataset = new DefaultCategoryDataset(); } } // XMLの"DataSet"要素(一つ外側のforループで選択されているもの)内にある"Data"要素の数だけまわる for (int j = 0; j < dataList.getLength(); j++) { Element data = (Element) dataList.item(j); Number value = new Double(data.getElementsByTagName("Value").item(0).getFirstChild().getNodeValue()); String categoryAxisName = categoryAxisName = data.getElementsByTagName("CategoryAxisName") .item(0) .getFirstChild() .getNodeValue(); String seriesAxisName = null; // 円チャート、3D円チャート if ((this.chartType.equals("Pie")) || (this.chartType.equals("Pie_3D"))) { ((DefaultPieDataset) dataset).setValue(categoryAxisName, value); // それ以外のチャート(線、棒、面チャート(Series数に関わらない)および、複数Seriesを持つ円チャート) } else { if (data.getElementsByTagName("ValueAxisName").item(0).getFirstChild() != null) { seriesAxisName = data.getElementsByTagName("ValueAxisName").item(0).getFirstChild().getNodeValue(); } ((DefaultCategoryDataset) dataset).addValue(value, seriesAxisName, categoryAxisName); } } // 複数円チャートの場合は、XMLにある複数の"DataSet"要素内の"Data"要素を、一つのJava "Dataset"オブジェクトに // 格納するため、datasetのdataSetListへの登録は全データをデータセットに登録後の一度のみ行なう。 if ((!this.chartType.equals("MultiPie")) || (i == (dataSetNodeList.getLength() - 1))) { dataSetList.add(dataset); } } return dataSetList; }
public static String getSimplePieChart(Map dataSource, String objectName, HttpSession session) throws Throwable { DefaultPieDataset dataset = new DefaultPieDataset(); Element chartObject = XMLHandler.getElementByAttribute(getChartObjectList(), "name", objectName); String title = chartObject.getAttributeValue("title"); int width = Integer.parseInt(chartObject.getAttributeValue("width")); int height = Integer.parseInt(chartObject.getAttributeValue("height")); Element LabelKeys = chartObject.getChild("Labels"); Element ValueKeys = chartObject.getChild("Values"); String valueKey = ValueKeys.getText(); String valueType = ValueKeys.getAttributeValue("type"); List labelKeys = LabelKeys.getChildren("Label"); String labelKey = LabelKeys.getText(); if (valueType.equalsIgnoreCase("number")) { for (int i = 0; i < dataSource.size(); i++) { Map rec = (Map) dataSource.get("ROW" + i); Number value = (Number) rec.get(valueKey); String label; if (labelKeys.isEmpty()) { label = DataFilter.show(rec, labelKey); } else { label = ((Element) labelKeys.get(i)).getText(); } dataset.setValue(label, value); } } else { for (int i = 0; i < dataSource.size(); i++) { Map rec = (Map) dataSource.get("ROW" + i); double value = (Double) rec.get(valueKey); String label; if (labelKeys.isEmpty()) { label = DataFilter.show(rec, labelKey); } else { label = ((Element) labelKeys.get(i)).getText(); } dataset.setValue(label, value); } } JFreeChart chart = ChartFactory.createPieChart3D( title, dataset, chartObject.getAttribute("showLegend").getBooleanValue(), chartObject.getAttribute("showToolTips").getBooleanValue(), chartObject.getAttribute("urls").getBooleanValue()); PiePlot3D pie3dplot = (PiePlot3D) chart.getPlot(); float alpha = 0.7F; if (chartObject.getAttribute("alpha") != null) { alpha = chartObject.getAttribute("alpha").getFloatValue(); } pie3dplot.setForegroundAlpha(alpha); return ServletUtilities.saveChartAsPNG(chart, width, height, null, session); }