Example usage for org.jfree.chart.plot XYPlot setDataset

List of usage examples for org.jfree.chart.plot XYPlot setDataset

Introduction

In this page you can find the example usage for org.jfree.chart.plot XYPlot setDataset.

Prototype

public void setDataset(XYDataset dataset) 

Source Link

Document

Sets the primary dataset for the plot, replacing the existing dataset if there is one.

Usage

From source file:com.att.aro.ui.view.diagnostictab.plot.ScreenStatePlot.java

@Override
public void populate(XYPlot plot, AROTraceData analysis) {
    if (analysis == null) {
        logger.info("analysis data is null");
    } else {/*from   ww w.j  a  va  2s. co  m*/
        screenData.removeAllSeries();
        TraceResultType resultType = analysis.getAnalyzerResult().getTraceresult().getTraceResultType();
        if (resultType.equals(TraceResultType.TRACE_FILE)) {
            logger.info("didn't get analysis trace data!");

        } else {
            TraceDirectoryResult traceresult = (TraceDirectoryResult) analysis.getAnalyzerResult()
                    .getTraceresult();

            XYIntervalSeries series = new XYIntervalSeries(ScreenState.SCREEN_ON);
            screenData.addSeries(series);

            // Populate the data set
            final Map<Double, ScreenStateInfo> dataMap = new HashMap<Double, ScreenStateInfo>();
            Iterator<ScreenStateInfo> iter = traceresult.getScreenStateInfos().iterator();
            if (iter.hasNext()) {
                while (iter.hasNext()) {
                    ScreenStateInfo screenEvent = iter.next();
                    if (screenEvent.getScreenState() == ScreenState.SCREEN_ON) {
                        series.add(screenEvent.getBeginTimeStamp(), screenEvent.getBeginTimeStamp(),
                                screenEvent.getEndTimeStamp(), 0.5, 0, 1);
                        dataMap.put(screenEvent.getBeginTimeStamp(), screenEvent);
                    }
                }
            }

            // Assign ToolTip to renderer
            XYItemRenderer renderer = plot.getRenderer();
            renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {

                @Override
                public String generateToolTip(XYDataset dataset, int series, int item) {

                    ScreenStateInfo si = dataMap.get(dataset.getXValue(series, item));
                    if (si != null) {

                        StringBuffer displayInfo = new StringBuffer(
                                ResourceBundleHelper.getMessageString("screenstate.tooltip.prefix"));
                        int timeout = si.getScreenTimeout();
                        displayInfo.append(MessageFormat.format(
                                ResourceBundleHelper.getMessageString("screenstate.tooltip.content"),
                                ResourceBundleHelper.getEnumString(si.getScreenState()),
                                si.getScreenBrightness(), timeout > 0 ? timeout
                                        : ResourceBundleHelper.getMessageString("screenstate.noTimeout")));
                        displayInfo.append(ResourceBundleHelper.getMessageString("screenstate.tooltip.suffix"));
                        return displayInfo.toString();
                    }
                    return null;
                }
            });
        }
    }
    plot.setDataset(screenData);
    //      return plot;
}

From source file:com.att.aro.ui.view.diagnostictab.plot.RadioPlot.java

@Override
public void populate(XYPlot plot, AROTraceData analysis) {
    XYSeries series = new XYSeries(0);

    if (analysis == null) {
        logger.info("no trace data here");
    } else {//from  w w w.  jav  a  2s.  c  o m
        TraceResultType resultType = analysis.getAnalyzerResult().getTraceresult().getTraceResultType();

        if (resultType.equals(TraceResultType.TRACE_FILE)) {
            logger.info("no trace folder data here");
        } else {

            TraceDirectoryResult traceResult = (TraceDirectoryResult) analysis.getAnalyzerResult()
                    .getTraceresult();
            radioInfos = traceResult.getRadioInfos();

            if (radioInfos.size() > 0 && analysis.getAnalyzerResult().getFilter().getTimeRange() != null) {
                RadioInfo first = radioInfos.get(0);
                series.add(analysis.getAnalyzerResult().getFilter().getTimeRange().getBeginTime(),
                        first.getSignalStrength() < 0 ? first.getSignalStrength() : MIN_SIGNAL);
            }
            for (RadioInfo ri : radioInfos) {
                series.add(ri.getTimeStamp(), ri.getSignalStrength() < 0 ? ri.getSignalStrength() : MIN_SIGNAL);
            }
            if (radioInfos.size() > 0) {
                RadioInfo last = radioInfos.get(radioInfos.size() - 1);
                if (analysis.getAnalyzerResult().getFilter().getTimeRange() != null) {
                    series.add(analysis.getAnalyzerResult().getFilter().getTimeRange().getEndTime(),
                            last.getSignalStrength() < 0 ? last.getSignalStrength() : MIN_SIGNAL);
                } else {
                    series.add(traceResult.getTraceDuration(),
                            last.getSignalStrength() < 0 ? last.getSignalStrength() : MIN_SIGNAL);
                }
            }

            // Assign ToolTip to renderer
            XYItemRenderer renderer = plot.getRenderer();
            renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {

                @Override
                public String generateToolTip(XYDataset dataset, int series, int item) {

                    RadioInfo ri = radioInfos.get(Math.min(item, radioInfos.size() - 1));
                    if (ri.getSignalStrength() < 0) {
                        if (ri.isLte()) {
                            return MessageFormat.format(
                                    ResourceBundleHelper.getMessageString("radio.tooltip.lte"), ri.getLteRsrp(),
                                    ri.getLteRsrq());
                        } else {
                            return MessageFormat.format(ResourceBundleHelper.getMessageString("radio.tooltip"),
                                    ri.getSignalStrength());
                        }
                    } else {
                        return ResourceBundleHelper.getMessageString("radio.noSignal");
                    }
                }

            });

        }
    }
    plot.setDataset(new XYSeriesCollection(series));
    //      return plot;
}

From source file:com.att.aro.main.GraphPanel.java

/**
 * Adds CPU data into plot./*from ww  w  .j av a 2  s  .c  o m*/
 * 
 * @param plot
 *            CPU data are added to plot
 * @param analysis
 *            Contains CPU data
 */
private static void populateCpuPlot(XYPlot plot, TraceData.Analysis analysis) {
    logger.fine("Starting populateCpuPlot()");
    if (analysis != null) {

        final CpuActivityList cpuAList = analysis.getCpuActivityList();
        boolean filterByTime = cpuAList.isFilterByTime();
        double beginTime = 0;
        double endTime = 0;
        if (filterByTime) {
            beginTime = cpuAList.getBeginTraceTime();
            endTime = cpuAList.getEndTraceTime();
            logger.log(Level.FINE, "begin: {0} end time: {1}", new Object[] { beginTime, endTime });
        }

        final List<CpuActivity> cpuData = cpuAList.getCpuActivityList();
        XYSeries series = new XYSeries(0);
        logger.log(Level.FINE, "Size of CPU data: " + cpuData.size());

        if (cpuData.size() > 0) {
            for (CpuActivity cpu : cpuData) {
                if (filterByTime) {
                    logger.log(Level.FINE, "timestamp: {0}", cpu.getTimeStamp());
                    if (cpu.getTimeStamp() >= beginTime && cpu.getTimeStamp() <= endTime) {
                        logger.log(Level.FINE, "CPU usage: {0}", cpu.getCpuUsageTotalFiltered());
                        series.add(cpu.getTimeStamp(), cpu.getCpuUsageTotalFiltered());
                    }

                } else {
                    logger.log(Level.FINE, "CPU usage: {0}", cpu.getCpuUsageTotalFiltered());
                    series.add(cpu.getTimeStamp(), cpu.getCpuUsageTotalFiltered());
                }
            }
        }

        // Assign ToolTip to renderer
        XYItemRenderer renderer = plot.getRenderer();

        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                return GraphPanel.generateToolTip(cpuAList, cpuData, item);
            }
        });

        plot.setDataset(new XYSeriesCollection(series));
    }
}

From source file:com.att.aro.diagnostics.GraphPanel.java

private static void populateUserEventPlot(XYPlot plot, TraceData.Analysis analysis) {

    final XYIntervalSeriesCollection userInputData = new XYIntervalSeriesCollection();
    if (analysis != null) {

        // create the dataset...
        Map<UserEvent.UserEventType, XYIntervalSeries> seriesMap = new EnumMap<UserEvent.UserEventType, XYIntervalSeries>(
                UserEvent.UserEventType.class);
        for (UserEvent.UserEventType eventType : UserEvent.UserEventType.values()) {
            XYIntervalSeries series = new XYIntervalSeries(eventType);
            seriesMap.put(eventType, series);
            userInputData.addSeries(series);
        }/*from w w  w .  j ava2s .  c o m*/
        // Populate the data set
        for (UserEvent event : analysis.getUserEvents()) {
            seriesMap.get(event.getEventType()).add(event.getPressTime(), event.getPressTime(),
                    event.getReleaseTime(), 0.5, 0, 1);
        }

        // Assign ToolTip to renderer
        XYItemRenderer renderer = plot.getRenderer();
        renderer.setSeriesPaint(userInputData.indexOf(UserEventType.SCREEN_LANDSCAPE), Color.BLUE);
        renderer.setSeriesPaint(userInputData.indexOf(UserEventType.SCREEN_PORTRAIT), Color.BLUE);
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {

            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                UserEvent.UserEventType eventType = (UserEvent.UserEventType) userInputData.getSeries(series)
                        .getKey();
                return ResourceBundleManager.getEnumString(eventType);
            }
        });

    }

    plot.setDataset(userInputData);
}

From source file:com.att.aro.diagnostics.GraphPanel.java

private static void populateGpsPlot(XYPlot plot, TraceData.Analysis analysis) {
    final XYIntervalSeriesCollection gpsData = new XYIntervalSeriesCollection();
    if (analysis != null) {

        // create the GPS dataset...
        Map<GpsState, XYIntervalSeries> seriesMap = new EnumMap<GpsState, XYIntervalSeries>(GpsState.class);
        for (GpsState eventType : GpsState.values()) {
            XYIntervalSeries series = new XYIntervalSeries(eventType);
            seriesMap.put(eventType, series);
            gpsData.addSeries(series);//www .  j  a v a 2s . co m
        }
        Iterator<GpsInfo> iter = analysis.getGpsInfos().iterator();
        if (iter.hasNext()) {
            while (iter.hasNext()) {
                GpsInfo gpsEvent = iter.next();
                if (gpsEvent.getGpsState() != GpsState.GPS_DISABLED) {
                    seriesMap.get(gpsEvent.getGpsState()).add(gpsEvent.getBeginTimeStamp(),
                            gpsEvent.getBeginTimeStamp(), gpsEvent.getEndTimeStamp(), 0.5, 0, 1);
                }
            }
        }

        XYItemRenderer renderer = plot.getRenderer();
        renderer.setSeriesPaint(gpsData.indexOf(GpsState.GPS_STANDBY), Color.YELLOW);
        renderer.setSeriesPaint(gpsData.indexOf(GpsState.GPS_ACTIVE), new Color(34, 177, 76));

        // Assign ToolTip to renderer
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                GpsState eventType = (GpsState) gpsData.getSeries(series).getKey();
                return MessageFormat.format(rb.getString("gps.tooltip"), dataset.getX(series, item),
                        ResourceBundleManager.getEnumString(eventType));
            }
        });

    }
    plot.setDataset(gpsData);
}

From source file:com.att.aro.diagnostics.GraphPanel.java

private static void populateThroughputPlot(XYPlot plot, TraceData.Analysis analysis) {

    XYSeries series = new XYSeries(0);
    if (analysis != null) {

        // Get packet iterators
        List<PacketInfo> packets = analysis.getPackets();
        final double maxTS = analysis.getTraceData().getTraceDuration();

        final List<String> tooltipList = new ArrayList<String>(1000);

        Double zeroTime = null;/*  w ww .jav a2s.  com*/
        double lastTime = 0.0;
        for (Throughput t : Throughput.calculateThroughput(0.0, maxTS,
                analysis.getProfile().getThroughputWindow(), packets)) {

            double time = t.getTime();
            double kbps = t.getKbps();
            if (kbps != 0.0) {
                if (zeroTime != null && zeroTime.doubleValue() != lastTime) {
                    series.add(lastTime, 0.0);
                    tooltipList.add(MessageFormat.format(THROUGHPUT_TOOLTIP, 0.0));
                }
                // Add slot to data set
                series.add(time, kbps);

                tooltipList.add(MessageFormat.format(THROUGHPUT_TOOLTIP, kbps));
                zeroTime = null;
            } else {
                if (zeroTime == null) {
                    // Add slot to data set
                    series.add(time, kbps);

                    tooltipList.add(MessageFormat.format(THROUGHPUT_TOOLTIP, kbps));
                    zeroTime = Double.valueOf(time);
                }
            }

            lastTime = time;
        }
        plot.getRenderer().setBaseToolTipGenerator(new XYToolTipGenerator() {

            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {

                // Tooltip displays throughput value
                return tooltipList.get(item);
            }

        });
    }

    plot.setDataset(new XYSeriesCollection(series));
}

From source file:com.att.aro.diagnostics.GraphPanel.java

private static void populateNetworkTyesPlot(XYPlot plot, TraceData.Analysis analysis) {
    if (analysis != null) {

        final XYIntervalSeriesCollection networkDataSeries = new XYIntervalSeriesCollection();
        final Map<NetworkType, XYIntervalSeries> seriesMap = new EnumMap<NetworkType, XYIntervalSeries>(
                NetworkType.class);
        createDataSeriesForAllNetworkTypes(seriesMap, networkDataSeries);

        Iterator<NetworkBearerTypeInfo> iter = analysis.getNetworTypeInfos().iterator();
        if (iter.hasNext()) {
            while (iter.hasNext()) {
                NetworkBearerTypeInfo networkInfo = iter.next();
                if (networkInfo.getNetworkType() != NetworkType.none) {
                    seriesMap.get(networkInfo.getNetworkType()).add(networkInfo.getBeginTimestamp(),
                            networkInfo.getBeginTimestamp(), networkInfo.getEndTimestamp(), 0.5, 0, 1);
                }/*from w  ww.  j  ava  2 s  .c o  m*/
            }
        } else {
            NetworkType nt = analysis.getTraceData().getNetworkType();
            if (nt != null && nt != NetworkType.none) {
                seriesMap.get(nt).add(0, 0, analysis.getTraceData().getTraceDuration(), 0.5, 0, 1);
            }
        }

        XYItemRenderer renderer = plot.getRenderer();
        setRenderingColorForDataSeries(renderer, networkDataSeries);

        // Assign ToolTip to renderer
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                NetworkType networkType = (NetworkType) networkDataSeries.getSeries(series).getKey();
                return MessageFormat.format(rb.getString("network.tooltip"), dataset.getX(series, item),
                        ResourceBundleManager.getEnumString(networkType));
            }
        });

        plot.setDataset(networkDataSeries);

    } else {
        plot.setDataset(new XYIntervalSeriesCollection());
    }
}

From source file:com.att.aro.diagnostics.GraphPanel.java

/**
 * Adds CPU data into plot.//from w  w w.  j a v a2  s .  c  o m
 * 
 * @param plot
 *            CPU data are added to plot
 * @param analysis
 *            Contains CPU data
 */
private static void populateCpuPlot(XYPlot plot, TraceData.Analysis analysis) {
    logger.fine("Starting populateCpuPlot()");
    XYSeries series = new XYSeries(0);
    if (analysis != null) {

        final CpuActivityList cpuAList = analysis.getCpuActivityList();
        boolean filterByTime = cpuAList.isFilterByTime();
        double beginTime = 0;
        double endTime = 0;
        if (filterByTime) {
            beginTime = cpuAList.getBeginTraceTime();
            endTime = cpuAList.getEndTraceTime();
            logger.log(Level.FINE, "begin: {0} end time: {1}", new Object[] { beginTime, endTime });
        }

        final List<CpuActivity> cpuData = cpuAList.getCpuActivityList();
        logger.log(Level.FINE, "Size of CPU data: " + cpuData.size());

        if (cpuData.size() > 0) {
            for (CpuActivity cpu : cpuData) {
                if (filterByTime) {
                    logger.log(Level.FINE, "timestamp: {0}", cpu.getTimeStamp());
                    if (cpu.getTimeStamp() >= beginTime && cpu.getTimeStamp() <= endTime) {
                        logger.log(Level.FINE, "CPU usage: {0}", cpu.getCpuUsageTotalFiltered());
                        series.add(cpu.getTimeStamp(), cpu.getCpuUsageTotalFiltered());
                    }

                } else {
                    logger.log(Level.FINE, "CPU usage: {0}", cpu.getCpuUsageTotalFiltered());
                    series.add(cpu.getTimeStamp(), cpu.getCpuUsageTotalFiltered());
                }
            }
        }

        // Assign ToolTip to renderer
        XYItemRenderer renderer = plot.getRenderer();

        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                return GraphPanel.generateToolTip(cpuAList, cpuData, item);
            }
        });

    }
    plot.setDataset(new XYSeriesCollection(series));
}

From source file:utils.ChartUtils.java

/**
 * Update XY chart/*from w  ww  .  ja v  a  2  s  .c o  m*/
 * 
 * @param plot ChartPanel Plot
 * @param sortedArray Sorted array of values
 */
public static void updateXYChart(ChartPanel plot, double[] sortedArray) {

    XYPlot xyplot = plot.getChart().getXYPlot();

    double min = sortedArray[0];
    double max = sortedArray[sortedArray.length - 1];

    double median = Utils.getMedian(sortedArray);

    double q1 = Utils.getQ1(sortedArray);
    double q3 = Utils.getQ3(sortedArray);

    XYTextAnnotation annotation;

    //min-lowlimit horizontal
    XYSeries serie15 = new XYSeries("15");
    serie15.add(min, 0.5);

    //max-toplimit horizontal
    XYSeries serie16 = new XYSeries("16");
    serie16.add(max, 0.5);

    //min vertical
    XYSeries serie1 = new XYSeries("0");
    serie1.add(min, 0.45);
    serie1.add(min, 0.55);

    annotation = new XYTextAnnotation("Min", min, 0.40);
    annotation.setFont(new Font("SansSerif", Font.PLAIN, 11));
    xyplot.addAnnotation(annotation);

    //min-q1 horizontal
    XYSeries serie2 = new XYSeries("1");
    serie2.add(min, 0.5);
    serie2.add(q1, 0.5);

    //q1 vertical  
    XYSeries serie3 = new XYSeries("2");
    serie3.add(q1, 0.1);
    serie3.add(q1, 0.9);

    annotation = new XYTextAnnotation("Q1", q1, 0.08);
    annotation.setFont(new Font("SansSerif", Font.PLAIN, 11));
    xyplot.addAnnotation(annotation);

    // median 
    XYSeries serie_mediana = new XYSeries("11");
    serie_mediana.add(median, 0.1);
    serie_mediana.add(median, 0.9);

    annotation = new XYTextAnnotation("Median", median, 0.04);
    annotation.setFont(new Font("SansSerif", Font.PLAIN, 11));
    xyplot.addAnnotation(annotation);

    //q1-q3 horizontal sup
    XYSeries serie4 = new XYSeries("3");
    serie4.add(q1, 0.9);
    serie4.add(q3, 0.9);

    //q1-q3 horizontal inf
    XYSeries serie5 = new XYSeries("4");
    serie5.add(q1, 0.1);
    serie5.add(q3, 0.1);

    //q3 vertical
    XYSeries serie6 = new XYSeries("5");
    serie6.add(q3, 0.1);
    serie6.add(q3, 0.9);

    annotation = new XYTextAnnotation("Q3", q3, 0.08);
    annotation.setFont(new Font("SansSerif", Font.PLAIN, 11));
    xyplot.addAnnotation(annotation);

    //q3-max horizontal
    XYSeries serie7 = new XYSeries("6");
    serie7.add(q3, 0.5);
    serie7.add(max, 0.5);

    //max vertical
    XYSeries serie8 = new XYSeries("7");
    serie8.add(max, 0.45);
    serie8.add(max, 0.55);

    annotation = new XYTextAnnotation("Max", max, 0.4);
    annotation.setFont(new Font("SansSerif", Font.PLAIN, 11));
    xyplot.addAnnotation(annotation);

    XYSeriesCollection xyseriescollection = new XYSeriesCollection();

    xyseriescollection.addSeries(serie1);
    xyseriescollection.addSeries(serie2);
    xyseriescollection.addSeries(serie3);
    xyseriescollection.addSeries(serie4);
    xyseriescollection.addSeries(serie5);
    xyseriescollection.addSeries(serie6);
    xyseriescollection.addSeries(serie7);
    xyseriescollection.addSeries(serie8);
    xyseriescollection.addSeries(serie15);
    xyseriescollection.addSeries(serie16);
    xyseriescollection.addSeries(serie_mediana);

    xyplot.getRenderer().setSeriesPaint(9, Color.black);
    xyplot.getRenderer().setSeriesPaint(10, Color.black);

    xyplot.getRenderer().setSeriesPaint(0, Color.black);
    xyplot.getRenderer().setSeriesPaint(1, Color.black);
    xyplot.getRenderer().setSeriesPaint(2, Color.black);
    xyplot.getRenderer().setSeriesPaint(3, Color.black);
    xyplot.getRenderer().setSeriesPaint(4, Color.black);
    xyplot.getRenderer().setSeriesPaint(5, Color.black);
    xyplot.getRenderer().setSeriesPaint(6, Color.black);
    xyplot.getRenderer().setSeriesPaint(7, Color.black);
    xyplot.getRenderer().setSeriesPaint(8, Color.black);
    xyplot.getRenderer().setSeriesPaint(9, Color.black);
    xyplot.getRenderer().setSeriesPaint(10, Color.black);
    xyplot.getRenderer().setSeriesPaint(11, Color.black);
    xyplot.getRenderer().setSeriesPaint(12, Color.black);
    xyplot.getRenderer().setSeriesPaint(13, Color.black);

    //add dataset
    xyplot.setDataset(xyseriescollection);

    // add a second dataset and renderer... 
    XYSeriesCollection anotherserie = new XYSeriesCollection();

    XYSeries serie_point = new XYSeries("21");

    double[] yValue = { 0.47, 0.49, 0.51, 0.53 };

    for (int i = 0, j = 0; i < sortedArray.length; i++, j++) {
        if (j % 4 == 0) {
            j = 0;
        }
        serie_point.add(sortedArray[i], yValue[j]);
    }

    anotherserie.addSeries(serie_point);

    XYLineAndShapeRenderer renderer1 = new XYLineAndShapeRenderer(false, true);
    renderer1.setSeriesPaint(0, Color.lightGray);

    xyplot.setDataset(1, anotherserie);
    xyplot.setRenderer(1, renderer1);
}

From source file:com.att.aro.diagnostics.GraphPanel.java

private static void populateBatteryPlot(XYPlot plot, TraceData.Analysis analysis) {

    XYSeries series = new XYSeries(0);

    if (analysis != null) {

        final List<BatteryInfo> batteryInfos = analysis.getBatteryInfos();

        if (batteryInfos.size() > 0 && analysis.getFilter().getTimeRange() != null) {
            BatteryInfo first = batteryInfos.get(0);
            series.add(analysis.getFilter().getTimeRange().getBeginTime(), first.getBatteryLevel());
        }/*from ww  w  .jav  a 2s  .co m*/
        for (BatteryInfo bi : batteryInfos) {
            series.add(bi.getBatteryTimeStamp(), bi.getBatteryLevel());
        }
        if (batteryInfos.size() > 0) {

            BatteryInfo last = batteryInfos.get(batteryInfos.size() - 1);
            if (analysis.getFilter().getTimeRange() != null) {
                series.add(analysis.getFilter().getTimeRange().getEndTime(), last.getBatteryLevel());
            } else {
                series.add(analysis.getTraceData().getTraceDuration(), last.getBatteryLevel());

            }
        }

        XYItemRenderer renderer = plot.getRenderer();
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {

            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {

                BatteryInfo bi = batteryInfos.get(Math.min(item, batteryInfos.size() - 1));
                StringBuffer displayInfo = new StringBuffer(rb.getString("battery.tooltip.prefix"));
                displayInfo.append(MessageFormat.format(rb.getString("battery.tooltip.content"),
                        bi.getBatteryLevel(), bi.getBatteryTemp(),
                        bi.isBatteryState() ? rb.getString("battery.tooltip.connected")
                                : rb.getString("battery.tooltip.disconnected")));
                displayInfo.append(rb.getString("battery.tooltip.suffix"));

                return displayInfo.toString();
            }

        });
    }

    plot.setDataset(new XYSeriesCollection(series));
}