⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chartcomponent.java

📁 OLAP 的客户端代码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
						);
					break;
				case 12 :
					chart = ChartFactory.createAreaChart(
						chartTitle,
						titleFont,
						horizAxisLabel,
						vertAxisLabel,
						dataset,
						PlotOrientation.HORIZONTAL,
						showLegend,
						showTooltips,
						drillThroughEnabled,
						urlGenerator
						);
					break;

				case 13 :
					chart = ChartFactory.createStackedAreaChart(
						chartTitle,
						titleFont,
						horizAxisLabel,
						vertAxisLabel,
						dataset,
						PlotOrientation.VERTICAL,
						showLegend,
						showTooltips,
						drillThroughEnabled,
						urlGenerator
						);
					break;
				case 14 :
					chart = ChartFactory.createStackedAreaChart(
						chartTitle,
						titleFont,
						horizAxisLabel,
						vertAxisLabel,
						dataset,
						PlotOrientation.HORIZONTAL,
						showLegend,
						showTooltips,
						drillThroughEnabled,
						urlGenerator
						);
					break;

				case 15 :
					chart = ChartFactory.createPieChart(
						chartTitle,
						titleFont,
						dataset,
						TableOrder.BY_COLUMN,
						showLegend,
						showTooltips,
                                                drillThroughEnabled,
                                                new jpivotPieURLGenerator(TableOrder.BY_COLUMN,dataset, webControllerURL)
						);
					break;
				case 16 :
					chart = ChartFactory.createPieChart(
						chartTitle,
						titleFont,
						dataset,
						TableOrder.BY_ROW,
						showLegend,
						showTooltips,
                                                drillThroughEnabled,
                                                new jpivotPieURLGenerator(TableOrder.BY_ROW,dataset, webControllerURL)
						);
					break;
                                case 17 :
					chart = ChartFactory.create3DPieChart(
						chartTitle,
						titleFont,
						dataset,
						TableOrder.BY_COLUMN,
						showLegend,
						showTooltips,
                                                drillThroughEnabled,
                                                new jpivotPieURLGenerator(TableOrder.BY_COLUMN,dataset, webControllerURL)
						);

					break;
				case 18 :
					chart = ChartFactory.create3DPieChart(
						chartTitle,
						titleFont,
						dataset,
						TableOrder.BY_ROW,
						showLegend,
						showTooltips,
                                                drillThroughEnabled,
                                                new jpivotPieURLGenerator(TableOrder.BY_ROW,dataset, webControllerURL)
						);

					break;

				default :
					throw new Exception("An unknown Chart Type was requested");
			}
			try {
				chart.setBackgroundPaint(new java.awt.Color(bgColorR, bgColorG, bgColorB));

				java.awt.Font slicerFont = new java.awt.Font(slicerFontName, slicerFontStyle, slicerFontSize);
				java.awt.Font axisFont = new java.awt.Font(axisFontName, axisFontStyle, axisFontSize);
				java.awt.Font axisTickFont = new java.awt.Font(axisTickFontName, axisTickFontStyle, axisTickFontSize);
				java.awt.Font legendFont = new java.awt.Font(legendFontName, legendFontStyle, legendFontSize);
				Plot plot = chart.getPlot();

				if ( plot instanceof CategoryPlot ) {
					CategoryPlot catPlot = (CategoryPlot) plot;
					catPlot.getDomainAxis().setLabelFont(axisFont);
					catPlot.getRangeAxis().setLabelFont(axisFont);
					catPlot.getDomainAxis().setTickLabelFont(axisTickFont);
					catPlot.getRangeAxis().setTickLabelFont(axisTickFont);
					catPlot.getDomainAxis().setMaximumCategoryLabelWidthRatio(100.0f);
					double angle = -2.0 * Math.PI / 360.0 * (double) tickLabelRotate;
					CategoryLabelPositions oldp = catPlot.getDomainAxis().getCategoryLabelPositions();
					CategoryLabelPositions newp = new CategoryLabelPositions(
						oldp.getLabelPosition(RectangleEdge.TOP),
						new CategoryLabelPosition(
							RectangleAnchor.TOP, TextBlockAnchor.TOP_RIGHT,
							TextAnchor.TOP_RIGHT, 0.0D, CategoryLabelWidthType.RANGE, (new Float(angle)).floatValue()),
						oldp.getLabelPosition(RectangleEdge.LEFT),
						oldp.getLabelPosition(RectangleEdge.RIGHT)
					);
					catPlot.getDomainAxis().setCategoryLabelPositions(newp);
				}
                                else if ( plot instanceof PiePlot3D ) {
                                    PiePlot3D piePlot = (PiePlot3D) plot;
                                    //piePlot.setSectionLabelFont(axisFont);
                                    piePlot.setLabelFont(axisFont);
                                    //piePlot.setSeriesLabelFont(axisTickFont);
                                    //piePlot.setSectionLabelType(piePlot.NO_LABELS);
                                    piePlot.setDirection(org.jfree.util.Rotation.CLOCKWISE);
                                    piePlot.setForegroundAlpha(0.5f);
                                    piePlot.setNoDataMessage("No data to display");
                                }
				else if ( plot instanceof PiePlot ) {
					PiePlot piePlot = (PiePlot) plot;
					//piePlot.setSectionLabelFont(axisFont);
					//piePlot.setSeriesLabelFont(axisTickFont);
                                        piePlot.setLabelFont(axisFont);
                                        //piePlot.setSectionLabelType(piePlot.NO_LABELS);

				}
				LegendTitle legend = (LegendTitle) chart.getLegend();
				if ( legend != null ) {
					legend.setItemFont(legendFont);
					/*
                    RectangleAnchor legendRectAnchor=RectangleAnchor.BOTTOM;

                        switch (legendPosition){
                             case 0:
                            	 legendRectAnchor = RectangleAnchor.LEFT;
                                break;
                            case 1:
                            	legendRectAnchor = RectangleAnchor.TOP;
                                break;
                            case 2:
                            	legendRectAnchor = RectangleAnchor.RIGHT;
                                break;
                            case 3:
                            	legendRectAnchor = RectangleAnchor.BOTTOM;
                                break;
                        }
					legend.setLegendItemGraphicAnchor(legendRectAnchor);
					*/
					RectangleEdge legendRectEdge=RectangleEdge.BOTTOM;
					switch (legendPosition){
						case 0:
							legendRectEdge = RectangleEdge.LEFT;
							break;
						case 1:
							legendRectEdge = RectangleEdge.TOP;
							break;
						case 2:
							legendRectEdge = RectangleEdge.RIGHT;
							break;
						case 3:
							legendRectEdge = RectangleEdge.BOTTOM;
							break;
					}
					legend.setPosition(legendRectEdge);
				}
				if ( showSlicer ) {
                                    RectangleEdge slicerRectPos=RectangleEdge.BOTTOM;
                                    HorizontalAlignment slicerHorizAlignment=HorizontalAlignment.LEFT;

                                        switch (slicerPosition){
                                             case 0:
                                                slicerRectPos = RectangleEdge.TOP;
                                                break;
                                            case 1:
                                                slicerRectPos = RectangleEdge.BOTTOM;
                                                break;
                                            case 2:
                                                slicerRectPos = RectangleEdge.RIGHT;
                                                break;
                                            case 3:
                                                slicerRectPos = RectangleEdge.LEFT;
                                                break;
                                        }

                                     switch (slicerAlignment){
                                            case 4:
                                                slicerHorizAlignment = HorizontalAlignment.CENTER;
                                                break;
                                            case 3:
                                                slicerHorizAlignment = HorizontalAlignment.LEFT;
                                                break;
                                            case 2:
                                                slicerHorizAlignment = HorizontalAlignment.RIGHT;
                                                break;
                                     }
					TextTitle slicer = new TextTitle(buildSlicer(),
											slicerFont, 
											Color.BLACK, 
											slicerRectPos,
											slicerHorizAlignment, 
											VerticalAlignment.CENTER, 
											new RectangleInsets(0,0,0,0));


					slicer.setPosition(slicerRectPos);
					chart.addSubtitle(slicer);
                                     }
				info = new ChartRenderingInfo(new StandardEntityCollection());
				//  Write the chart image to the temporary directory
				HttpSession session = context.getSession();
				filename = ServletUtilities.saveChartAsPNG(
						chart,
						chartWidth,
						chartHeight,
						info,
						session);

			}
			catch (Exception e) {
				filename = "public_error_500x300.png";
				dirty = true;
			}
		}
		// new DOM document
		DocumentBuilder parser = XmlUtils.getParser();
		// get an image map for the chart, wrap it in xchart tags
		String xchart = "<xchart>" + writeImageMap(filename, info, false) + "</xchart>";
/*		
		if (logger.isDebugEnabled()) {
			logger.debug("Chart XML");
			logger.debug(xchart);
		}
*/
		// create an InputStream from the DOM document
		InputStream stream =
			new ByteArrayInputStream(xchart.getBytes("UTF-8"));

		document = parser.parse(stream);
		Element root = document.getDocumentElement();
		// create url for img tag
        String graphURL = getGraphURL(context);

        Element img = document.createElement("img");
		img.setAttribute("src", graphURL);
		img.setAttribute("width", new Integer(chartWidth).toString());
		img.setAttribute("height", new Integer(chartHeight).toString());
		img.setAttribute("style", "border:0;");
		img.setAttribute("usemap",  "#"+filename);
		root.appendChild(img);

		return document;
	}

    public String getGraphURL(RequestContext context) {
        String graphURL = "";
        if (baseDisplayURLSet) {
            graphURL = CHART_SERVLET;
        } else {
            graphURL = context.getRequest().getContextPath() + CHART_SERVLET;
        }
        graphURL = graphURL + (graphURL.indexOf('?') >= 0 ? "&" : "?") + "filename=" + getFilename();
        return graphURL;
    }

	/**
	 * Writes an image map as a String
	 * This function has been requested to be added to jfreechart
	 * Also requires slight change to ChartEntity.getImageMapAreaTag()
	 * to produce valid xml tag and use &amp; entity in urls.
	 * Diffs sent to jfreechart project - so hopefully this will be in there soon
	 *
	 * @param name  the map name.
	 * @param info  the chart rendering info.
	 * @param useOverLibForToolTips  whether to use OverLIB for tooltips
	 *                               (http://www.bosrup.com/web/overlib/).
	 */
	public String writeImageMap(String name,
				ChartRenderingInfo info, boolean useOverLibForToolTips) {
		StringBuffer sb = new StringBuffer();
		sb.append("<map name=\"" + name + "\">");
		EntityCollection entities = info.getEntityCollection();
		Iterator iterator = entities.iterator();

		while (iterator.hasNext()) {
			ChartEntity entity = (ChartEntity) iterator.next();
			// the tag returned by getImageMapAreaTag is not valid xml
			//String area = entity.getImageMapAreaTag(useOverLibForToolTips);

                        String area="";

                        if (useOverLibForToolTips)
                             area = entity.getImageMapAreaTag(new org.jfree.chart.imagemap.OverLIBToolTipTagFragmentGenerator(), new org.jfree.chart.imagemap.StandardURLTagFragmentGenerator());
                        else
                            area = entity.getImageMapAreaTag(new org.jfree.chart.imagemap.StandardToolTipTagFragmentGenerator(), new org.jfree.chart.imagemap.StandardURLTagFragmentGenerator());
			// modify to valid xml tag
			area = area.replaceAll("&", "&amp;");
			//area = area.toLowerCase();
			//area = area.replaceAll(">$", "/>");
			if (area.length() > 0) {
				sb.append(area);
			}
		}
		sb.append("</map>");
		return sb.toString();
	}

	/**
	 * build slicer text string
	 */
	private String buildSlicer() {
		StringBuffer slicer = new StringBuffer();
		slicer.append("Slicer: ");
		Iterator pi = result.getSlicer().getPositions().iterator();
		while (pi.hasNext()) {
			Position p = (Position) pi.next();
			Member[] members = p.getMembers();
			for (int i = 0; i < members.length; i++) {
				slicer.append(members[i].getLevel().getLabel());
				slicer.append("=");
				slicer.append(members[i].getLabel());
				if ( i < members.length-1 ) {
					slicer.append(", ");
				}
			}
		}
		return slicer.toString();
	}

	/**
	 * Build a jfreechart CategoryDataset with a single series
	 *
	 */
	private DefaultCategoryDataset build1dimDataset() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();

		// column axis
		List columnPositions = result.getAxes()[0].getPositions();
		colCount = columnPositions.size();
		// cells
		List cells = result.getCells();

		String series = "Series";

		// loop on column positions
		for (int i = 0; i < colCount; i++) {
			Member[] colMembers = ((Position) columnPositions.get(i)).getMembers();

			StringBuffer key = new StringBuffer();
			// loop on col position members
			for (int j = 0; j < colMembers.length; j++) {
				// build up composite name for this row
				key.append(colMembers[j].getLabel() + ".");
			}
			dataset.addValue(getNumberValue((Cell)cells.get(i)), series, key.toString());
		}
		return dataset;
	}

	/**
	 * Get cell value as a Number. Parses the cell value string
	 * using the locale set in this.locale.
	 * @param cell
	 * @return value as Number (can be null)
	 */
	private Number getNumberValue(Cell cell) {
            //**** HACK AR 2004.01.10
		//String value = cell.getFormattedValue();
                Object value = cell.getValue();

		DecimalFormatSymbols dfs = new DecimalFormatSymbols(locale);
		DecimalFormat formatter = new DecimalFormat();
		formatter.setDecimalFormatSymbols(dfs);
		Number number = null;
		try {
			number = (Number)value;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -