Java tutorial
package org.codehaus.mojo.dashboard.report.plugin.chart.time; /* * Copyright 2008 David Vicente * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.geom.Line2D; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.List; import org.jfree.chart.ChartColor; import org.jfree.chart.LegendItem; import org.jfree.chart.block.Block; import org.jfree.chart.block.BlockContainer; import org.jfree.chart.block.BorderArrangement; import org.jfree.chart.block.CenterArrangement; import org.jfree.chart.block.ColumnArrangement; import org.jfree.chart.block.EmptyBlock; import org.jfree.chart.block.FlowArrangement; import org.jfree.chart.block.LabelBlock; import org.jfree.chart.block.LineBorder; import org.jfree.chart.plot.ValueMarker; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.title.CompositeTitle; import org.jfree.chart.title.LegendGraphic; import org.jfree.chart.title.LegendItemBlockContainer; import org.jfree.chart.title.LegendTitle; import org.jfree.ui.HorizontalAlignment; import org.jfree.ui.RectangleAnchor; import org.jfree.ui.RectangleEdge; import org.jfree.ui.RectangleInsets; import org.jfree.ui.VerticalAlignment; import org.codehaus.mojo.dashboard.report.plugin.chart.AbstractChartDecorator; import org.codehaus.mojo.dashboard.report.plugin.chart.IChartRenderer; import org.codehaus.mojo.dashboard.report.plugin.utils.ChartUtils; /** * * @author <a href="dvicente72@gmail.com">David Vicente</a> * */ public class MarkerTimeChartDecorator extends AbstractChartDecorator { public MarkerTimeChartDecorator(IChartRenderer chartToDecorate, List markersToPlot) { super(chartToDecorate, markersToPlot); } public void createChart() { XYPlot xyplot = (XYPlot) report.getPlot(); // if (this.decoratedChart instanceof TimeChartRenderer ) { if (this.results != null && !this.results.isEmpty()) { Iterator iter1 = this.results.iterator(); ValueMarker valuemarker = null; BlockContainer blockcontainerLabel = new BlockContainer(new ColumnArrangement()); // blockcontainerLabel.setFrame( new LineBorder() ); int i = 0; while (iter1.hasNext()) { Object[] item = (Object[]) iter1.next(); Date date = (Date) item[1]; Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); valuemarker = new ValueMarker(cal.getTimeInMillis(), ChartColor.createDefaultPaintArray()[i], new BasicStroke(2.0F)); xyplot.addDomainMarker(valuemarker); LegendItem legendLabel = new LegendItem((String) item[0], null, null, null, new Line2D.Double(-7.0, 0.0, 7.0, 0.0), valuemarker.getPaint(), valuemarker.getStroke(), valuemarker.getPaint()); blockcontainerLabel.add(createLegendItemBlock(legendLabel, i)); i++; } createLegendBlock(blockcontainerLabel); } // } } public Color getBackgroundColor() { return (Color) ChartUtils.BLUE_STEEL2_LIGHT; } /** * Creates a legend item block. * * @param item * the legend item. * * @return The block. */ protected void createLegendBlock(BlockContainer blockcontainerLabel) { XYPlot xyplot = (XYPlot) report.getPlot(); int nbRenderer = xyplot.getDatasetCount(); BlockContainer blockcontainer = new BlockContainer(new BorderArrangement()); if (nbRenderer > 1) { BlockContainer oldLegendBlockContainer = new BlockContainer( new FlowArrangement(HorizontalAlignment.LEFT, VerticalAlignment.TOP, 2.0D, 2.0D)); for (int i = 0; i < nbRenderer; i++) { LegendTitle legendtitle = new LegendTitle(xyplot.getRenderer(i)); legendtitle.setMargin(new RectangleInsets(1.0, 1.0, 1.0, 1.0)); legendtitle.setFrame(new LineBorder()); legendtitle.setBackgroundPaint(ChartColor.WHITE); oldLegendBlockContainer.add(legendtitle); } blockcontainer.add(oldLegendBlockContainer, RectangleEdge.LEFT); } else { LegendTitle legendtitle = new LegendTitle(xyplot.getRenderer(0)); legendtitle.setMargin(new RectangleInsets(1.0, 1.0, 1.0, 1.0)); legendtitle.setFrame(new LineBorder()); legendtitle.setBackgroundPaint(ChartColor.WHITE); blockcontainer.add(legendtitle, RectangleEdge.LEFT); } LegendTitle legendtitle1 = new LegendTitle(xyplot.getRenderer()); legendtitle1.setMargin(new RectangleInsets(1.0, 1.0, 1.0, 1.0)); legendtitle1.setFrame(new LineBorder()); legendtitle1.setBackgroundPaint(ChartColor.WHITE); legendtitle1.setWrapper(blockcontainerLabel); blockcontainer.add(legendtitle1, RectangleEdge.RIGHT); blockcontainer.add(new EmptyBlock(1000D, 0.0D)); CompositeTitle compositetitle = new CompositeTitle(blockcontainer); compositetitle.setPosition(RectangleEdge.BOTTOM); report.clearSubtitles(); report.addSubtitle(compositetitle); } /** * Creates a legend item block. * * @param item * the legend item. * * @return The block. */ protected Block createLegendItemBlock(LegendItem item, int i) { BlockContainer result = null; LegendGraphic lg = new LegendGraphic(item.getShape(), item.getFillPaint()); lg.setFillPaintTransformer(item.getFillPaintTransformer()); lg.setShapeFilled(true); lg.setLine(item.getLine()); lg.setLineStroke(item.getLineStroke()); lg.setLinePaint(item.getFillPaint()); lg.setLineVisible(true); lg.setShapeVisible(true); lg.setShapeOutlineVisible(true); lg.setOutlinePaint(item.getFillPaint()); lg.setOutlineStroke(item.getOutlineStroke()); lg.setPadding(new RectangleInsets(2.0, 2.0, 2.0, 2.0)); LegendItemBlockContainer legendItem = new LegendItemBlockContainer(new BorderArrangement(), 0, i); lg.setShapeAnchor(RectangleAnchor.CENTER); lg.setShapeLocation(RectangleAnchor.CENTER); legendItem.add(lg, RectangleEdge.LEFT); LabelBlock labelBlock = new LabelBlock(item.getLabel(), new Font("SansSerif", Font.BOLD, 10), Color.black); labelBlock.setPadding(new RectangleInsets(2.0, 2.0, 2.0, 2.0)); legendItem.add(labelBlock); legendItem.setToolTipText(item.getToolTipText()); legendItem.setURLText(item.getURLText()); result = new BlockContainer(new CenterArrangement()); result.add(legendItem); return result; } }