1:
62:
63: package ;
64:
65: import ;
66: import ;
67: import ;
68: import ;
69: import ;
70:
71: import ;
72: import ;
73: import ;
74: import ;
75: import ;
76: import ;
77: import ;
78: import ;
79: import ;
80: import ;
81: import ;
82: import ;
83:
84:
90: public class IntervalBarRenderer extends BarRenderer
91: implements CategoryItemRenderer,
92: Cloneable,
93: PublicCloneable,
94: Serializable {
95:
96:
97: private static final long serialVersionUID = -5068857361615528725L;
98:
99:
102: public IntervalBarRenderer() {
103: super();
104: }
105:
106:
120: public void drawItem(Graphics2D g2,
121: CategoryItemRendererState state,
122: Rectangle2D dataArea,
123: CategoryPlot plot,
124: CategoryAxis domainAxis,
125: ValueAxis rangeAxis,
126: CategoryDataset dataset,
127: int row,
128: int column,
129: int pass) {
130:
131: if (dataset instanceof IntervalCategoryDataset) {
132: IntervalCategoryDataset d = (IntervalCategoryDataset) dataset;
133: drawInterval(g2, state, dataArea, plot, domainAxis, rangeAxis,
134: d, row, column);
135: }
136: else {
137: super.drawItem(g2, state, dataArea, plot, domainAxis, rangeAxis,
138: dataset, row, column, pass);
139: }
140:
141: }
142:
143:
156: protected void drawInterval(Graphics2D g2,
157: CategoryItemRendererState state,
158: Rectangle2D dataArea,
159: CategoryPlot plot,
160: CategoryAxis domainAxis,
161: ValueAxis rangeAxis,
162: IntervalCategoryDataset dataset,
163: int row,
164: int column) {
165:
166: int seriesCount = getRowCount();
167: int categoryCount = getColumnCount();
168:
169: PlotOrientation orientation = plot.getOrientation();
170:
171: double rectX = 0.0;
172: double rectY = 0.0;
173:
174: RectangleEdge domainAxisLocation = plot.getDomainAxisEdge();
175: RectangleEdge rangeAxisLocation = plot.getRangeAxisEdge();
176:
177:
178: Number value0 = dataset.getEndValue(row, column);
179: if (value0 == null) {
180: return;
181: }
182: double java2dValue0 = rangeAxis.valueToJava2D(
183: value0.doubleValue(), dataArea, rangeAxisLocation
184: );
185:
186:
187: Number value1 = dataset.getStartValue(row, column);
188: if (value1 == null) {
189: return;
190: }
191: double java2dValue1 = rangeAxis.valueToJava2D(
192: value1.doubleValue(), dataArea, rangeAxisLocation);
193:
194: if (java2dValue1 < java2dValue0) {
195: double temp = java2dValue1;
196: java2dValue1 = java2dValue0;
197: java2dValue0 = temp;
198: Number tempNum = value1;
199: value1 = value0;
200: value0 = tempNum;
201: }
202:
203:
204: double rectWidth = state.getBarWidth();
205:
206:
207: double rectHeight = Math.abs(java2dValue1 - java2dValue0);
208:
209: if (orientation == PlotOrientation.HORIZONTAL) {
210:
211: rectY = domainAxis.getCategoryStart(
212: column, getColumnCount(), dataArea, domainAxisLocation
213: );
214: if (seriesCount > 1) {
215: double seriesGap = dataArea.getHeight() * getItemMargin()
216: / (categoryCount * (seriesCount - 1));
217: rectY = rectY + row * (state.getBarWidth() + seriesGap);
218: }
219: else {
220: rectY = rectY + row * state.getBarWidth();
221: }
222:
223: rectX = java2dValue0;
224:
225: rectHeight = state.getBarWidth();
226: rectWidth = Math.abs(java2dValue1 - java2dValue0);
227:
228: }
229: else if (orientation == PlotOrientation.VERTICAL) {
230:
231: rectX = domainAxis.getCategoryStart(
232: column, getColumnCount(), dataArea, domainAxisLocation
233: );
234:
235: if (seriesCount > 1) {
236: double seriesGap = dataArea.getWidth() * getItemMargin()
237: / (categoryCount * (seriesCount - 1));
238: rectX = rectX + row * (state.getBarWidth() + seriesGap);
239: }
240: else {
241: rectX = rectX + row * state.getBarWidth();
242: }
243:
244: rectY = java2dValue0;
245:
246: }
247: Rectangle2D bar = new Rectangle2D.Double(rectX, rectY, rectWidth,
248: rectHeight);
249: Paint seriesPaint = getItemPaint(row, column);
250: g2.setPaint(seriesPaint);
251: g2.fill(bar);
252:
253:
254: if (state.getBarWidth() > BAR_OUTLINE_WIDTH_THRESHOLD) {
255: Stroke stroke = getItemOutlineStroke(row, column);
256: Paint paint = getItemOutlinePaint(row, column);
257: if (stroke != null && paint != null) {
258: g2.setStroke(stroke);
259: g2.setPaint(paint);
260: g2.draw(bar);
261: }
262: }
263:
264: CategoryItemLabelGenerator generator
265: = getItemLabelGenerator(row, column);
266: if (generator != null && isItemLabelVisible(row, column)) {
267: drawItemLabel(g2, dataset, row, column, plot, generator, bar,
268: false);
269: }
270:
271:
272: if (state.getInfo() != null) {
273: EntityCollection entities = state.getEntityCollection();
274: if (entities != null) {
275: String tip = null;
276: CategoryToolTipGenerator tipster
277: = getToolTipGenerator(row, column);
278: if (tipster != null) {
279: tip = tipster.generateToolTip(dataset, row, column);
280: }
281: String url = null;
282: if (getItemURLGenerator(row, column) != null) {
283: url = getItemURLGenerator(row, column).generateURL(
284: dataset, row, column);
285: }
286: CategoryItemEntity entity = new CategoryItemEntity(bar, tip,
287: url, dataset, row, dataset.getColumnKey(column),
288: column);
289: entities.add(entity);
290: }
291: }
292:
293: }
294:
295: }