1:
60:
61: package ;
62:
63: import ;
64: import ;
65: import ;
66: import ;
67: import ;
68:
69: import ;
70: import ;
71: import ;
72: import ;
73: import ;
74: import ;
75: import ;
76: import ;
77: import ;
78: import ;
79:
80:
86: public class IntervalBarRenderer extends BarRenderer
87: implements CategoryItemRenderer, Cloneable, PublicCloneable,
88: Serializable {
89:
90:
91: private static final long serialVersionUID = -5068857361615528725L;
92:
93:
96: public IntervalBarRenderer() {
97: super();
98: }
99:
100:
114: public void drawItem(Graphics2D g2,
115: CategoryItemRendererState state,
116: Rectangle2D dataArea,
117: CategoryPlot plot,
118: CategoryAxis domainAxis,
119: ValueAxis rangeAxis,
120: CategoryDataset dataset,
121: int row,
122: int column,
123: int pass) {
124:
125: if (dataset instanceof IntervalCategoryDataset) {
126: IntervalCategoryDataset d = (IntervalCategoryDataset) dataset;
127: drawInterval(g2, state, dataArea, plot, domainAxis, rangeAxis,
128: d, row, column);
129: }
130: else {
131: super.drawItem(g2, state, dataArea, plot, domainAxis, rangeAxis,
132: dataset, row, column, pass);
133: }
134:
135: }
136:
137:
150: protected void drawInterval(Graphics2D g2,
151: CategoryItemRendererState state,
152: Rectangle2D dataArea,
153: CategoryPlot plot,
154: CategoryAxis domainAxis,
155: ValueAxis rangeAxis,
156: IntervalCategoryDataset dataset,
157: int row,
158: int column) {
159:
160: int seriesCount = getRowCount();
161: int categoryCount = getColumnCount();
162:
163: PlotOrientation orientation = plot.getOrientation();
164:
165: double rectX = 0.0;
166: double rectY = 0.0;
167:
168: RectangleEdge domainAxisLocation = plot.getDomainAxisEdge();
169: RectangleEdge rangeAxisLocation = plot.getRangeAxisEdge();
170:
171:
172: Number value0 = dataset.getEndValue(row, column);
173: if (value0 == null) {
174: return;
175: }
176: double java2dValue0 = rangeAxis.valueToJava2D(value0.doubleValue(),
177: dataArea, rangeAxisLocation);
178:
179:
180: Number value1 = dataset.getStartValue(row, column);
181: if (value1 == null) {
182: return;
183: }
184: double java2dValue1 = rangeAxis.valueToJava2D(
185: value1.doubleValue(), dataArea, rangeAxisLocation);
186:
187: if (java2dValue1 < java2dValue0) {
188: double temp = java2dValue1;
189: java2dValue1 = java2dValue0;
190: java2dValue0 = temp;
191: Number tempNum = value1;
192: value1 = value0;
193: value0 = tempNum;
194: }
195:
196:
197: double rectWidth = state.getBarWidth();
198:
199:
200: double rectHeight = Math.abs(java2dValue1 - java2dValue0);
201:
202: if (orientation == PlotOrientation.HORIZONTAL) {
203:
204: rectY = domainAxis.getCategoryStart(column, getColumnCount(),
205: dataArea, domainAxisLocation);
206: if (seriesCount > 1) {
207: double seriesGap = dataArea.getHeight() * getItemMargin()
208: / (categoryCount * (seriesCount - 1));
209: rectY = rectY + row * (state.getBarWidth() + seriesGap);
210: }
211: else {
212: rectY = rectY + row * state.getBarWidth();
213: }
214:
215: rectX = java2dValue0;
216:
217: rectHeight = state.getBarWidth();
218: rectWidth = Math.abs(java2dValue1 - java2dValue0);
219:
220: }
221: else if (orientation == PlotOrientation.VERTICAL) {
222:
223: rectX = domainAxis.getCategoryStart(column, getColumnCount(),
224: dataArea, domainAxisLocation);
225:
226: if (seriesCount > 1) {
227: double seriesGap = dataArea.getWidth() * getItemMargin()
228: / (categoryCount * (seriesCount - 1));
229: rectX = rectX + row * (state.getBarWidth() + seriesGap);
230: }
231: else {
232: rectX = rectX + row * state.getBarWidth();
233: }
234:
235: rectY = java2dValue0;
236:
237: }
238: Rectangle2D bar = new Rectangle2D.Double(rectX, rectY, rectWidth,
239: rectHeight);
240: Paint seriesPaint = getItemPaint(row, column);
241: g2.setPaint(seriesPaint);
242: g2.fill(bar);
243:
244:
245: if (state.getBarWidth() > BAR_OUTLINE_WIDTH_THRESHOLD) {
246: Stroke stroke = getItemOutlineStroke(row, column);
247: Paint paint = getItemOutlinePaint(row, column);
248: if (stroke != null && paint != null) {
249: g2.setStroke(stroke);
250: g2.setPaint(paint);
251: g2.draw(bar);
252: }
253: }
254:
255: CategoryItemLabelGenerator generator = getItemLabelGenerator(row,
256: column);
257: if (generator != null && isItemLabelVisible(row, column)) {
258: drawItemLabel(g2, dataset, row, column, plot, generator, bar,
259: false);
260: }
261:
262:
263: EntityCollection entities = state.getEntityCollection();
264: if (entities != null) {
265: addItemEntity(entities, dataset, row, column, bar);
266: }
267:
268: }
269:
270: }