List of usage examples for org.jfree.chart.axis CategoryAxis clearCategoryLabelToolTips
public void clearCategoryLabelToolTips()
From source file:com.att.aro.ui.view.waterfalltab.WaterfallPanel.java
/** * Refreshes the waterfall display with the specified analysis data * @param Analyzed data from aro core./*from w w w.ja va 2s. c o m*/ */ public void refresh(AROTraceData aModel) { this.popup.refresh(null, 0); this.popup.setVisible(false); double range = DEFAULT_TIMELINE; // Create sorted list of request/response pairs List<WaterfallCategory> categoryList = new ArrayList<WaterfallCategory>(); if (aModel != null && aModel.getAnalyzerResult() != null) { this.traceDuration = aModel.getAnalyzerResult().getTraceresult().getTraceDuration(); // add 20% to make sure labels close to the right edge of the screen are visible this.traceDuration *= 1.2; range = Math.min(this.traceDuration, DEFAULT_TIMELINE); for (Session tcpSession : aModel.getAnalyzerResult().getSessionlist()) { Session thisSession = tcpSession; if (!tcpSession.isUDP()) { for (HttpRequestResponseInfo reqResInfo : tcpSession.getRequestResponseInfo()) { if (reqResInfo.getDirection() == HttpDirection.REQUEST && reqResInfo.getWaterfallInfos() != null) { categoryList.add(new WaterfallCategory(reqResInfo, thisSession)); } } } } // Sort and set index Collections.sort(categoryList); int index = 0; for (WaterfallCategory wCategory : categoryList) { wCategory.setIndex(++index); } } // Horizontal scroll bar used to scroll through trace duration JScrollBar hScrollBar = getHorizontalScroll(); hScrollBar.setMaximum((int) Math.ceil(this.traceDuration)); // Set the visible time range setTimeRange(0, range); CategoryAxis cAxis = getCategoryAxis(); cAxis.clearCategoryLabelToolTips(); // Build the dataset DefaultCategoryDataset underlying = new DefaultCategoryDataset(); for (WaterfallCategory wfc : categoryList) { RequestResponseTimeline rrTimeLine = wfc.getReqResp().getWaterfallInfos(); underlying.addValue(rrTimeLine.getStartTime(), Waterfall.BEFORE, wfc); underlying.addValue(rrTimeLine.getDnsLookupDuration(), Waterfall.DNS_LOOKUP, wfc); underlying.addValue(rrTimeLine.getInitialConnDuration(), Waterfall.INITIAL_CONNECTION, wfc); underlying.addValue(rrTimeLine.getSslNegotiationDuration(), Waterfall.SSL_NEGOTIATION, wfc); underlying.addValue(rrTimeLine.getRequestDuration(), Waterfall.REQUEST_TIME, wfc); underlying.addValue(rrTimeLine.getTimeToFirstByte(), Waterfall.TIME_TO_FIRST_BYTE, wfc); underlying.addValue(rrTimeLine.getContentDownloadDuration(), Waterfall.CONTENT_DOWNLOAD, wfc); underlying.addValue(null, Waterfall.HTTP_3XX_REDIRECTION, wfc); underlying.addValue(null, Waterfall.HTTP_4XX_CLIENTERROR, wfc); int code = wfc.getReqResp().getAssocReqResp().getStatusCode(); double endTime = this.traceDuration - rrTimeLine.getStartTime() - rrTimeLine.getTotalTime(); if (code >= 300 && code < 400) { underlying.addValue(endTime, Waterfall.AFTER_3XX, wfc); } else if (code >= 400) { underlying.addValue(endTime, Waterfall.AFTER_4XX, wfc); } else { underlying.addValue(endTime, Waterfall.AFTER, wfc); } cAxis.addCategoryLabelToolTip(wfc, wfc.getTooltip()); } // Vertical scroll bar is used to scroll through data JScrollBar vScrollBar = getVerticalScroll(); int count = underlying.getColumnCount(); vScrollBar.setValue(0); vScrollBar.setMaximum(count); vScrollBar.setVisibleAmount(count > 0 ? this.dataset.getMaximumCategoryCount() - 1 / count : 1); // Add the dataset to the plot CategoryPlot plot = getChartPanel().getChart().getCategoryPlot(); this.dataset = new SlidingCategoryDataset(underlying, 0, CATEGORY_MAX_COUNT); plot.setDataset(this.dataset); // Place proper colors on renderer for waterfall states final CategoryItemRenderer renderer = plot.getRenderer(); for (Object obj : underlying.getRowKeys()) { Waterfall wFall = (Waterfall) obj; int index = underlying.getRowIndex(wFall); Color paint; switch (wFall) { case DNS_LOOKUP: paint = dnsLoolupColor; break; case INITIAL_CONNECTION: paint = initiaConnColor; break; case SSL_NEGOTIATION: paint = sslNegColor; break; case REQUEST_TIME: paint = requestTimeColor; break; case TIME_TO_FIRST_BYTE: paint = firstByteTimeColor; break; case CONTENT_DOWNLOAD: paint = contentDownloadColor; break; case AFTER_3XX: paint = noneColor; renderer.setSeriesItemLabelPaint(index, threexColor); renderer.setSeriesVisibleInLegend(index, false); break; case AFTER_4XX: paint = noneColor; renderer.setSeriesItemLabelPaint(index, fourxColor); renderer.setSeriesVisibleInLegend(index, false); break; case HTTP_3XX_REDIRECTION: paint = threexColor; break; case HTTP_4XX_CLIENTERROR: paint = fourxColor; break; default: renderer.setSeriesItemLabelPaint(index, Color.black); renderer.setSeriesVisibleInLegend(index, false); paint = noneColor; } renderer.setSeriesPaint(index, paint); } // Adding the label at the end of bars renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator() { private static final long serialVersionUID = 1L; @Override public String generateLabel(CategoryDataset dataset, int row, int column) { if (Waterfall.AFTER == dataset.getRowKey(row) || Waterfall.AFTER_3XX == dataset.getRowKey(row) || Waterfall.AFTER_4XX == dataset.getRowKey(row)) { WaterfallCategory waterfallItem = (WaterfallCategory) dataset.getColumnKey(column); RequestResponseTimeline waterfallInfos = waterfallItem.getReqResp().getWaterfallInfos(); DecimalFormat formatter = new DecimalFormat("#.##"); int code = waterfallItem.getReqResp().getAssocReqResp().getStatusCode(); return MessageFormat.format(ResourceBundleHelper.getMessageString("waterfall.totalTime"), formatter.format(waterfallInfos.getTotalTime()), code > 0 ? waterfallItem.getReqResp().getScheme() + " " + code : ResourceBundleHelper.getMessageString("waterfall.unknownCode")); } return null; } }); }