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())));
 }
Ejemplo n.º 3
0
  /** 与えられた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;
  }
Ejemplo n.º 4
0
  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);
  }