Пример #1
0
  /**
   * Returns a sample dataset.
   *
   * @return The dataset.
   */
  private CategoryDataset createDataset() {

    // row keys...
    String series1 = "First";
    String series2 = "Second";
    String series3 = "Third";

    // column keys...
    String category1 = "Category 1";
    String category2 = "Category 2";
    String category3 = "Category 3";
    String category4 = "Category 4";
    String category5 = "Category 5";

    // create the dataset...
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();

    dataset.addValue(1.0, series1, category1);
    dataset.addValue(4.0, series1, category2);
    dataset.addValue(3.0, series1, category3);
    dataset.addValue(5.0, series1, category4);
    dataset.addValue(5.0, series1, category5);

    dataset.addValue(5.0, series2, category1);
    dataset.addValue(7.0, series2, category2);
    dataset.addValue(6.0, series2, category3);
    dataset.addValue(8.0, series2, category4);
    dataset.addValue(4.0, series2, category5);

    dataset.addValue(4.0, series3, category1);
    dataset.addValue(3.0, series3, category2);
    dataset.addValue(2.0, series3, category3);
    dataset.addValue(3.0, series3, category4);
    dataset.addValue(6.0, series3, category5);

    return dataset;
  }
  public String generateBarChart(
      String hitSection, 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 cDataSet =
          new StudentsConceptChartDataSet(studStatisticBean, courseId, studentId);
      ArrayList list = cDataSet.getDataBySection(hitSection);

      //  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 CategoryDataset
      Iterator iter = list.listIterator();
      DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
      while (iter.hasNext()) {
        StudentsConceptHit wh = (StudentsConceptHit) iter.next();
        // Comparable c1= Double.parseDouble(wh.getHitDegree());
        dataSet.addValue(
            wh.getHitDegree(),
            "degree of mastery for concept ",
            String.valueOf(wh.getHitConcept()));
      }

      //  Create the chart object
      CategoryAxis categoryAxis = new CategoryAxis("Concepts");
      ValueAxis valueAxis = new NumberAxis("Degree of Mastery");
      valueAxis.setRange(0.0, 6.0);
      categoryAxis.setCategoryLabelPositions(
          new CategoryLabelPositions().createUpRotationLabelPositions(45));
      BarRenderer renderer = new BarRenderer();
      renderer.setDrawBarOutline(true);
      renderer.setItemURLGenerator(
          new StandardCategoryURLGenerator("xy_chart.jsp", "series", "section"));
      StandardCategoryToolTipGenerator scttg = new StandardCategoryToolTipGenerator();

      renderer.setToolTipGenerator(scttg);

      Plot plot = new CategoryPlot(dataSet, categoryAxis, valueAxis, renderer);

      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;
  }
Пример #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;
  }