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.BufferInSecondsPlot.java

@Override
public void populate(XYPlot plot, AROTraceData analysis) {
    if (analysis != null) {
        VideoUsage videoUsage = analysis.getAnalyzerResult().getVideoUsage();
        bufferFillDataCollection.removeAllSeries();
        seriesBufferFill = new XYSeries("Buffer Against Play Time");
        seriesDataSets = new TreeMap<>();

        seriesDataSets = bufferInSecondsCalculatorImpl.populate(videoUsage, chunkPlayTimeList);
        //updating video stall result in packetAnalyzerResult
        analysis.getAnalyzerResult().setVideoStalls(bufferInSecondsCalculatorImpl.getVideoStallResult());

        bufferTimeList.clear();/* w  w w  . ja  v a2 s.c  om*/
        double xCoordinate, yCoordinate;
        String ptCoordinate[] = new String[2]; // to hold x & y values
        if (!seriesDataSets.isEmpty()) {

            for (int key : seriesDataSets.keySet()) {
                ptCoordinate = seriesDataSets.get(key).trim().split(",");
                xCoordinate = Double.parseDouble(ptCoordinate[0]);
                yCoordinate = Double.parseDouble(ptCoordinate[1]);
                bufferTimeList.add(yCoordinate);

                seriesBufferFill.add(xCoordinate, yCoordinate);
            }
        }

        Collections.sort(bufferTimeList);
        BufferTimeBPResult bufferTimeResult = bufferInSecondsCalculatorImpl
                .updateBufferTimeResult(bufferTimeList);
        analysis.getAnalyzerResult().setBufferTimeResult(bufferTimeResult);
        // populate collection
        bufferFillDataCollection.addSeries(seriesBufferFill);

        XYItemRenderer renderer = new StandardXYItemRenderer();
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {

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

                // Tooltip value
                Number timestamp = dataset.getX(series, item);
                Number bufferTime = dataset.getY(series, item);
                StringBuffer tooltipValue = new StringBuffer();

                Map<Double, Long> segmentEndTimeMap = bufferInSecondsCalculatorImpl.getSegmentEndTimeMap();
                Map<Long, Double> segmentStartTimeMap = bufferInSecondsCalculatorImpl.getSegmentStartTimeMap();
                double firstSegmentNo = videoUsage.getChunksBySegmentNumber().get(0).getSegment();

                DecimalFormat decimalFormat = new DecimalFormat("0.##");
                if (segmentStartTimeMap == null || segmentStartTimeMap.isEmpty()) {
                    return "-,-,-";
                }

                List<Long> segmentList = new ArrayList<Long>(segmentEndTimeMap.values());
                Collections.sort(segmentList);
                Long lastSegmentNo = segmentList.get(segmentList.size() - 1);

                Long segmentNumber = 0L;
                boolean isSegmentPlaying = false;
                boolean startup = false;
                boolean endPlay = false;

                for (double segmentEndTime : segmentEndTimeMap.keySet()) {
                    if (segmentEndTime > timestamp.doubleValue()) {
                        segmentNumber = segmentEndTimeMap.get(segmentEndTime);
                        if (segmentNumber == firstSegmentNo) {
                            startup = true;
                        }
                        if (segmentStartTimeMap.get(segmentNumber) <= timestamp.doubleValue()) {
                            tooltipValue.append(decimalFormat.format(segmentNumber) + ",");
                            isSegmentPlaying = true;
                            startup = false;
                        }
                    } else if (lastSegmentNo.equals(segmentEndTimeMap.get(segmentEndTime))
                            && segmentEndTime == timestamp.doubleValue()) {
                        endPlay = true;
                    }
                }

                if (endPlay || startup) {
                    tooltipValue.append("-,");
                } else if (!isSegmentPlaying && !startup) {
                    tooltipValue.append("Stall,");
                }

                tooltipValue.append(String.format("%.2f", bufferTime) + "," + String.format("%.2f", timestamp));

                String[] value = tooltipValue.toString().split(",");
                return (MessageFormat.format(BUFFER_TIME_OCCUPANCY_TOOLTIP, value[0], value[1], value[2]));
            }

        });
        renderer.setSeriesStroke(0, new BasicStroke(2.0f));
        renderer.setSeriesPaint(0, Color.MAGENTA);

        renderer.setSeriesShape(0, shape);

        plot.setRenderer(renderer);

    }
    plot.setDataset(bufferFillDataCollection);
}

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

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

    // create the dataset...
    final XYIntervalSeriesCollection wifiData = new XYIntervalSeriesCollection();
    if (analysis != null) {

        Map<WifiState, XYIntervalSeries> seriesMap = new EnumMap<WifiState, XYIntervalSeries>(WifiState.class);
        for (WifiState eventType : WifiState.values()) {
            XYIntervalSeries series = new XYIntervalSeries(eventType);
            seriesMap.put(eventType, series);
            switch (eventType) {
            case WIFI_UNKNOWN:
            case WIFI_DISABLED:
                // Don't chart these
                break;
            default:
                wifiData.addSeries(series);
                break;
            }/*from   ww w. ja va2 s. c  o  m*/
        }

        // Populate the data set
        List<WifiInfo> wifiInfos = analysis.getWifiInfos();
        final Map<Double, WifiInfo> eventMap = new HashMap<Double, WifiInfo>(wifiInfos.size());
        Iterator<WifiInfo> iter = wifiInfos.iterator();
        if (iter.hasNext()) {
            while (iter.hasNext()) {
                WifiInfo wifiEvent = iter.next();
                seriesMap.get(wifiEvent.getWifiState()).add(wifiEvent.getBeginTimeStamp(),
                        wifiEvent.getBeginTimeStamp(), wifiEvent.getEndTimeStamp(), 0.5, 0, 1);
                eventMap.put(wifiEvent.getBeginTimeStamp(), wifiEvent);
            }
        }

        XYItemRenderer renderer = plot.getRenderer();
        for (WifiState eventType : WifiState.values()) {
            Color paint;
            switch (eventType) {
            case WIFI_CONNECTED:
            case WIFI_CONNECTING:
            case WIFI_DISCONNECTING:
                paint = new Color(34, 177, 76);
                break;
            case WIFI_DISCONNECTED:
            case WIFI_SUSPENDED:
                paint = Color.YELLOW;
                break;
            default:
                paint = Color.WHITE;
                break;
            }

            int index = wifiData.indexOf(eventType);
            if (index >= 0) {
                renderer.setSeriesPaint(index, paint);
            }
        }

        // Assign ToolTip to renderer
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                WifiState eventType = (WifiState) wifiData.getSeries(series).getKey();

                StringBuffer message = new StringBuffer(rb.getString("wifi.tooltip.prefix"));
                message.append(MessageFormat.format(rb.getString("wifi.tooltip"), dataset.getX(series, item),
                        ResourceBundleManager.getEnumString(eventType)));
                switch (eventType) {
                case WIFI_CONNECTED:
                    WifiInfo info = eventMap.get(dataset.getX(series, item));
                    if (info != null && info.getWifiState() == WifiState.WIFI_CONNECTED) {
                        message.append(MessageFormat.format(rb.getString("wifi.connTooltip"),
                                info.getWifiMacAddress(), info.getWifiRSSI(), info.getWifiSSID()));
                    }
                    break;
                default:
                    break;
                }
                message.append(rb.getString("wifi.tooltip.suffix"));
                return message.toString();
            }
        });

    }

    plot.setDataset(wifiData);
}

From source file:Debrief.Tools.FilterOperations.ShowTimeVariablePlot3.java

public final MWC.GUI.Tools.Action getData() {
    // check that some tracks are selected
    if (_theTracks == null) {
        MWC.GUI.Dialogs.DialogFactory.showMessage("Reformat Tracks", "Please select one or more tracks");
        return null;
    }/*from   www  .j  a va2  s .c o m*/

    // find out what the user wants to view
    final CalculationHolder theHolder = getChoice();

    // check it worked
    if (theHolder != null) {
        // retrieve the necessary input data
        final toteCalculation myOperation = theHolder._theCalc;

        // declare the primary track (even though we may end up not using
        // it)
        WatchableList thePrimary = null;

        // is this a relative calculation?
        if (theHolder._isRelative) {
            // retrieve the necessary input data
            thePrimary = getPrimary();
        }

        // ////////////////////////////////////////////////
        // sort out the title
        // ////////////////////////////////////////////////
        // get the title to use
        String theTitle = myOperation.getTitle() + " vs Time plot";

        // is this a relative operation
        if (theHolder.isARelativeCalculation()) {
            if (thePrimary != null) {
                // if it's relative, we use the primary track name in the
                // title
                theTitle = thePrimary.getName() + " " + theTitle;
            }
        }

        // ///////////////////////////////////////////////////////
        // prepare the plot
        // ///////////////////////////////////////////////////////

        // the working variables we rely on later
        NewFormattedJFreeChart jChart = null;
        XYPlot plot = null;
        ValueAxis xAxis = null;

        XYToolTipGenerator tooltipGenerator = null;

        // the y axis is common to hi & lo res. Format it here
        final NumberAxis yAxis = new NumberAxis(myOperation.getTitle() + " " + myOperation.getUnits());

        // hmm, see if we are in hi-res mode. If we are, don't use a
        // formatted
        // y-axis, just use the plain long microseconds
        // value
        if (HiResDate.inHiResProcessingMode()) {

            //            final SimpleDateFormat _secFormat = new SimpleDateFormat("ss");

            System.err
                    .println("XY Plot of HiRes data support is incomplete. Tick formatter (below) is missing.");

            // ok, simple enough for us...
            final NumberAxis nAxis = new NumberAxis("time (secs.micros)");
            //            {
            //               /**
            //                                        *
            //                                        */
            //               private static final long serialVersionUID = 1L;
            //
            //               @SuppressWarnings("unused")
            //               public String getTickLabel(final double currentTickValue)
            //               {
            //                  final long time = (long) currentTickValue;
            //                  final Date dtg = new HiResDate(0, time).getDate();
            //                  final String res = _secFormat.format(dtg) + "."
            //                        + DebriefFormatDateTime.formatMicros(new HiResDate(0, time));
            //                  return res;
            //               }
            //            };
            nAxis.setAutoRangeIncludesZero(false);
            xAxis = nAxis;

            // just show the raw data values
            tooltipGenerator = new StandardXYToolTipGenerator();
        } else {
            // create a date-formatting axis
            final DateAxis dAxis = new RelativeDateAxis();
            dAxis.setStandardTickUnits(DateAxisEditor.createStandardDateTickUnitsAsTickUnits());
            xAxis = dAxis;

            // also create the date-knowledgable tooltip writer
            tooltipGenerator = new DatedToolTipGenerator();
        }

        // create the special stepper plot
        final ColourStandardXYItemRenderer renderer = new ColourStandardXYItemRenderer(tooltipGenerator, null,
                null);
        plot = getPlot((RelativeDateAxis) xAxis, yAxis, _theStepper, renderer);
        renderer.setPlot(plot);

        // apply any formatting for this choice
        final formattingOperation fo = theHolder._theFormatter;
        if (fo != null) {
            fo.format(plot);
        }

        jChart = new NewFormattedJFreeChart(theTitle, JFreeChart.DEFAULT_TITLE_FONT, plot, true, _theStepper);

        // ////////////////////////////////////////////////////
        // get the data
        // ////////////////////////////////////////////////////
        final AbstractDataset theDataset = getDataSeries(thePrimary, theHolder, _theTracks, _start_time,
                _end_time, jChart.getTimeOffsetProvider());

        // ////////////////////////////////////////////////
        // put the holder into one of our special items
        // ////////////////////////////////////////////////
        final ChartPanel chartInPanel = new StepperChartPanel(jChart, true, _theStepper);

        // format the chart
        chartInPanel.setName(theTitle);
        chartInPanel.setMouseZoomable(true, true);

        // and insert into the panel
        insertPanel(chartInPanel, jChart);

        // ////////////////////////////////////////////////////
        // put the time series into the plot
        // ////////////////////////////////////////////////////
        plot.setDataset((XYDataset) theDataset);

    } // whether we have a primary

    // return the new action
    return null;
}

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

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

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

        Map<RRCState, XYIntervalSeries> seriesMap = new EnumMap<RRCState, XYIntervalSeries>(RRCState.class);
        for (RRCState eventType : RRCState.values()) {
            XYIntervalSeries series = new XYIntervalSeries(eventType);
            seriesMap.put(eventType, series);
            rrcDataCollection.addSeries(series);
        }//from w  w w .j  av a2 s  .  c om
        List<RrcStateRange> rrcStates = analysis.getRrcStateMachine().getRRcStateRanges();
        Iterator<RrcStateRange> iter = rrcStates.iterator();
        while (iter.hasNext()) {
            RrcStateRange currEvent = iter.next();
            RRCState state = currEvent.getState();
            if (state == RRCState.STATE_FACH || state == RRCState.TAIL_FACH) {
                seriesMap.get(state).add(currEvent.getBeginTime(), currEvent.getBeginTime(),
                        currEvent.getEndTime(), 0.25, 0, 0.5);
            } else {
                seriesMap.get(state).add(currEvent.getBeginTime(), currEvent.getBeginTime(),
                        currEvent.getEndTime(), 0.5, 0, 1);
            }

        }
        XYItemRenderer renderer = plot.getRenderer();
        Color dchGreen = new Color(34, 177, 76);
        Color fachOrange = new Color(255, 201, 14);

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.STATE_IDLE), Color.white);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_IDLE), Color.white);

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.PROMO_IDLE_DCH), Color.red);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_PROMOTION), Color.red);

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.STATE_DCH), fachOrange);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_CONTINUOUS), fachOrange);

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.TAIL_DCH), getTailPaint(fachOrange));
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_CR_TAIL), getTailPaint(fachOrange));
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_DRX_SHORT), getTailPaint(fachOrange));
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_DRX_LONG), getTailPaint(fachOrange));

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.STATE_FACH), dchGreen);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.TAIL_FACH), getTailPaint(dchGreen));

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.PROMO_FACH_DCH), Color.red);

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.WIFI_IDLE), Color.white);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.WIFI_ACTIVE), fachOrange);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.WIFI_TAIL), getTailPaint(fachOrange));

        // Assign ToolTip to renderer
        final Profile profile = analysis.getProfile();
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                RRCState eventType = (RRCState) rrcDataCollection.getSeries(series).getKey();
                final String PREFIX = "RRCTooltip.";
                if (eventType == RRCState.LTE_IDLE) {
                    return MessageFormat.format(rb.getString(PREFIX + eventType),
                            ((ProfileLTE) profile).getIdlePingPeriod());
                }
                return rb.getString(PREFIX + eventType);
            }
        });

    }

    plot.setDataset(rrcDataCollection);
}

From source file:org.jfree.eastwood.ChartEngine.java

/**
 * Creates and returns a new <code>JFreeChart</code> instance that
 * reflects the specified parameters (which should be equivalent to
 * a parameter map returned by HttpServletRequest.getParameterMap() for
 * a valid URI for the Google Chart API.
 *
 * @param params  the parameters (<code>null</code> not permitted).
 * @param font    the font to use to draw titles, labels and legends.
 *
 * @return A chart corresponding to the specification in the supplied
 *         parameters.//www . java  2  s .co  m
 */
public static JFreeChart buildChart(Map params, Font font) {
    if (params == null) {
        throw new IllegalArgumentException("Null 'params' argument.");
    }

    JFreeChart chart = null;

    // *** CHART TYPE **
    String[] chartType = (String[]) params.get("cht");
    int dataType = -1; // 0 = PieDataset; 1 = XYDataset; 2 = special

    // pie charts: 'p' and 'p3'
    if (chartType[0].equals("p")) {
        chart = createPieChart();
        dataType = 0;
    } else if (chartType[0].equals("p3")) {
        chart = createPieChart3D();
        dataType = 0;
    }
    // line chart: 'lc'
    else if (chartType[0].equals("lc")) {
        chart = createLineChart();
        dataType = 1;
    }
    // sparkline: 'ls'
    else if (chartType[0].equals("ls")) {
        chart = createSparklineChart();
        dataType = 1;
    }
    // xy chart: 'lxy'
    else if (chartType[0].equals("lxy")) {
        chart = createLineChart();
        dataType = 3;
    }
    // bar charts: 'bhs', 'bhg', 'bhs' and 'bhg'
    else if (chartType[0].equals("bhs")) {
        chart = createStackedBarChart(PlotOrientation.HORIZONTAL);
        dataType = 2;
    } else if (chartType[0].equals("bhg")) {
        chart = createBarChart(PlotOrientation.HORIZONTAL);
        dataType = 2;
    } else if (chartType[0].equals("bvs")) {
        chart = createStackedBarChart(PlotOrientation.VERTICAL);
        dataType = 2;
    } else if (chartType[0].equals("bvg")) {
        chart = createBarChart(PlotOrientation.VERTICAL);
        dataType = 2;
    } else if (chartType[0].equals("bhs3")) {
        chart = createStackedBarChart3D(PlotOrientation.HORIZONTAL);
        dataType = 2;
    } else if (chartType[0].equals("bhg3")) {
        chart = createBarChart3D(PlotOrientation.HORIZONTAL);
        dataType = 2;
    } else if (chartType[0].equals("bvs3")) {
        chart = createStackedBarChart3D(PlotOrientation.VERTICAL);
        dataType = 2;
    } else if (chartType[0].equals("bvg3")) {
        chart = createBarChart3D(PlotOrientation.VERTICAL);
        dataType = 2;
    }
    // scatter chart: 's'
    else if (chartType[0].equals("s")) {
        chart = createScatterChart();
        dataType = 4;
    } else if (chartType[0].equals("v")) {
        throw new RuntimeException("Venn diagrams not implemented.");
        // TODO: fix this.
    } else {
        throw new RuntimeException("Unknown chart type: " + chartType[0]);
    }

    chart.getPlot().setOutlineVisible(false);

    // *** CHART AXES ***
    List axes = new java.util.ArrayList();
    String[] axisStr = (String[]) params.get("chxt");
    if (axisStr != null) {
        if (chart.getPlot() instanceof XYPlot) {
            XYPlot plot = (XYPlot) chart.getPlot();
            processAxisStr(plot, axisStr[0], axes);
        } else if (chart.getPlot() instanceof CategoryPlot) {
            CategoryPlot plot = (CategoryPlot) chart.getPlot();
            if (plot.getOrientation() == PlotOrientation.VERTICAL) {
                processAxisStrV(plot, axisStr[0], axes);
            } else {
                processAxisStrH(plot, axisStr[0], axes);
            }
        }
    }

    // *** AXIS RANGES ***
    String[] axisRangeStr = (String[]) params.get("chxr");
    if (axisRangeStr != null) {
        String[] ranges = breakString(axisRangeStr[0], '|');
        for (int i = 0; i < ranges.length; i++) {
            int comma1 = ranges[i].indexOf(',');
            int comma2 = ranges[i].indexOf(',', comma1 + 1);
            int axisIndex = Integer.parseInt(ranges[i].substring(0, comma1));
            float lowerBound = Float.parseFloat(ranges[i].substring(comma1 + 1, comma2));
            float upperBound = Float.parseFloat(ranges[i].substring(comma2 + 1));
            Axis axis = (Axis) axes.get(axisIndex);
            if (axis instanceof GValueAxis) {
                GValueAxis gaxis = (GValueAxis) axis;
                gaxis.setLabelAxisStart(lowerBound);
                gaxis.setLabelAxisEnd(upperBound);
            }
        }
    }

    // *** AXIS LABELS ***
    String[] axisLabelStr = (String[]) params.get("chxl");
    if (axisLabelStr != null) {
        Pattern p = Pattern.compile("\\d+:\\|");
        Matcher m = p.matcher(axisLabelStr[0]);
        if (m.find()) {
            int keyStart = m.start();
            int labelStart = m.end();
            while (m.find(labelStart)) {
                String keyStr = axisLabelStr[0].substring(keyStart, labelStart - 2);
                int axisIndex = Integer.parseInt(keyStr);
                keyStart = m.start();
                String labelStr = axisLabelStr[0].substring(labelStart, keyStart - 1);
                String[] labels = breakString(labelStr, '|');
                GLabelledAxis axis = (GLabelledAxis) axes.get(axisIndex);
                axis.setTickLabels(Arrays.asList(labels));
                labelStart = m.end();
            }
            // process the final item
            String keyStr = axisLabelStr[0].substring(keyStart, labelStart - 2);
            String labelStr = axisLabelStr[0].substring(labelStart);
            int axisIndex = Integer.parseInt(keyStr);
            if (labelStr.endsWith("|")) {
                labelStr = labelStr.substring(0, labelStr.length() - 1);
            }
            String[] labels = breakString(labelStr, '|');
            GLabelledAxis axis = (GLabelledAxis) axes.get(axisIndex);
            axis.setTickLabels(Arrays.asList(labels));

        } else {
            throw new RuntimeException("No matching pattern!");
        }

    }

    // ** EXPLICIT AXIS LABEL POSITIONS
    String[] axisPositionStr = (String[]) params.get("chxp");
    if (axisPositionStr != null) {
        String[] positions = breakString(axisPositionStr[0], '|');
        for (int i = 0; i < positions.length; i++) {
            int c1 = positions[i].indexOf(',');
            int axisIndex = Integer.parseInt(positions[i].substring(0, c1));
            String remainingStr = positions[i].substring(c1 + 1);
            String[] valueStr = breakString(remainingStr, ',');
            List tickValues = new java.util.ArrayList(valueStr.length);
            Axis axis = (Axis) axes.get(axisIndex);
            if (axis instanceof GValueAxis) {
                GValueAxis gaxis = (GValueAxis) axes.get(axisIndex);
                for (int j = 0; j < valueStr.length; j++) {
                    float pos = Float.parseFloat(valueStr[j]);
                    tickValues.add(new Float(pos));
                }
                gaxis.setTickLabelPositions(tickValues);
            }
            // FIXME: what about a CategoryAxis?
        }
    }

    // *** CHART TITLE ***
    String[] titleStr = (String[]) params.get("chtt");
    if (titleStr != null) {
        // process the title
        String[] s = breakString(titleStr[0], '|');
        for (int i = 0; i < s.length; i++) {
            TextTitle t = new TextTitle(s[i].replace('+', ' '));
            t.setPaint(Color.darkGray);
            // Google seems to use 14pt fonts for titles and 12pt fonts for
            // all other text. Make sure this relationship remains.
            t.setFont(font.deriveFont(font.getSize2D() * 14f / 12f));
            chart.addSubtitle(t);
        }
        // and the font and colour
        String[] fontStr = (String[]) params.get("chts");
        if (fontStr != null) {
            int c1 = fontStr[0].indexOf(',');
            String colorStr = null;
            String fontSizeStr = null;
            if (c1 != -1) {
                colorStr = fontStr[0].substring(0, c1);
                fontSizeStr = fontStr[0].substring(c1 + 1);
            } else {
                colorStr = fontStr[0];
            }
            Color color = parseColor(colorStr);
            int size = 12;
            if (fontSizeStr != null) {
                size = Integer.parseInt(fontSizeStr);
            }
            for (int i = 0; i < chart.getSubtitleCount(); i++) {
                Title t = chart.getSubtitle(i);
                if (t instanceof TextTitle) {
                    TextTitle tt = (TextTitle) t;
                    tt.setPaint(color);
                    tt.setFont(font.deriveFont((float) size));
                }
            }
        }
    }

    // *** CHART DATA ***
    String[] dataStr = (String[]) params.get("chd");
    String scalingStr = null;
    if (dataStr.length > 0 && dataStr[0].startsWith("t:")) {
        // Only look at chds when text encoding is used
        String[] chds = (String[]) params.get("chds");
        if (chds != null && chds.length > 0) {
            scalingStr = chds[0];
        }
    }

    // we'll also process an optional second dataset that is provided as
    // an Eastwood extension...this isn't part of the Google Chart API
    String[] d2Str = (String[]) params.get("ewd2");

    // 'p' and 'p3' - create PieDataset
    if (dataType == 0) {
        PieDataset dataset = DataUtilities.parsePieDataset(dataStr[0], scalingStr);
        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setDataset(dataset);

        // ignore d2Str as there is currently no need for a second pie
        // dataset.
    }

    // 'lc' - create XYDataset
    else if (dataType == 1) {
        XYPlot plot = (XYPlot) chart.getPlot();
        XYDataset dataset = DataUtilities.parseXYDataset(dataStr[0], scalingStr);
        plot.setDataset(dataset);

        if (d2Str != null) { // an Eastwood extension
            XYDataset d2 = DataUtilities.parseXYDataset(d2Str[0], scalingStr);
            plot.setDataset(1, d2);
        }
    }

    // 'bhs', 'bhg', 'bvs', 'bvg'
    else if (dataType == 2) {
        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        CategoryDataset dataset = DataUtilities.parseCategoryDataset(dataStr[0], scalingStr);
        plot.setDataset(dataset);

        if (d2Str != null) { // an Eastwood extension
            CategoryDataset d2 = DataUtilities.parseCategoryDataset(d2Str[0], scalingStr);
            plot.setDataset(1, d2);
        }
    }

    // 'lxy'
    else if (dataType == 3) {
        XYPlot plot = (XYPlot) chart.getPlot();
        XYDataset dataset = DataUtilities.parseXYDataset2(dataStr[0], scalingStr);
        plot.setDataset(dataset);

        if (d2Str != null) { // an Eastwood extension
            XYDataset d2 = DataUtilities.parseXYDataset2(d2Str[0], scalingStr);
            plot.setDataset(1, d2);
        }
    } else if (dataType == 4) {
        XYPlot plot = (XYPlot) chart.getPlot();
        XYSeriesCollection dataset = DataUtilities.parseScatterDataset(dataStr[0], scalingStr);
        if (dataset.getSeriesCount() > 1) {
            dataset.removeSeries(1);
        }
        plot.setDataset(dataset);
        if (d2Str != null) { // an Eastwood extension
            XYDataset d2 = DataUtilities.parseXYDataset2(d2Str[0], scalingStr);
            plot.setDataset(1, d2);
        }
    }

    if (chart.getPlot() instanceof XYPlot) {
        XYPlot plot = (XYPlot) chart.getPlot();
        plot.getDomainAxis().setLabelFont(font);
        plot.getDomainAxis().setTickLabelFont(font);
        plot.getRangeAxis().setLabelFont(font);
        plot.getRangeAxis().setTickLabelFont(font);
    } else if (chart.getPlot() instanceof CategoryPlot) {
        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        plot.getDomainAxis().setLabelFont(font);
        plot.getDomainAxis().setTickLabelFont(font);
        plot.getRangeAxis().setLabelFont(font);
        plot.getRangeAxis().setTickLabelFont(font);
    }

    // *** CHART COLOURS ***
    String[] colorStr = (String[]) params.get("chco");
    if (colorStr != null) {
        Color[] colors = parseColors(colorStr[0]);
        if (dataType == 0) {
            PiePlot plot = (PiePlot) chart.getPlot();
            applyColorsToPiePlot(plot, colors);
        } else {
            AbstractRenderer renderer = null;
            if (chart.getPlot() instanceof CategoryPlot) {
                CategoryPlot plot = (CategoryPlot) chart.getPlot();
                renderer = (AbstractRenderer) plot.getRenderer();
                renderer.setBasePaint(colors[0]);
            } else if (chart.getPlot() instanceof XYPlot) {
                XYPlot plot = (XYPlot) chart.getPlot();
                renderer = (AbstractRenderer) plot.getRenderer();
                renderer.setBasePaint(colors[colors.length - 1]);
            }
            for (int i = 0; i < colors.length; i++) {
                renderer.setSeriesPaint(i, colors[i]);
            }
        }
    } else {
        Plot plot = chart.getPlot();
        if (plot instanceof PiePlot) {
            applyColorsToPiePlot((PiePlot) chart.getPlot(), new Color[] { new Color(255, 153, 0) });
        }
    }

    // *** CHART LINE STYLES ***
    String[] lineStr = (String[]) params.get("chls");
    if (lineStr != null && chart.getPlot() instanceof XYPlot) {
        Stroke[] strokes = parseLineStyles(lineStr[0]);
        XYPlot plot = (XYPlot) chart.getPlot();
        XYItemRenderer renderer = plot.getRenderer();
        for (int i = 0; i < strokes.length; i++) {
            renderer.setSeriesStroke(i, strokes[i]);
        }
        renderer.setBaseStroke(strokes[strokes.length - 1]);
    }

    // *** CHART GRID LINES
    if (dataType != 0) {
        String[] gridStr = (String[]) params.get("chg");
        if (gridStr != null) {
            processGridLinesSpec(gridStr[0], chart);
        }
    }

    // *** CHART LABELS
    if (dataType == 0) { // pie chart
        String[] labelStr = (String[]) params.get("chl");
        if (labelStr != null) {
            String[] s = breakString(labelStr[0], '|');
            List labels = Arrays.asList(s);
            PiePlot plot = (PiePlot) chart.getPlot();
            if (labels.size() > 0) {
                plot.setLabelGenerator(new GPieSectionLabelGenerator(labels));
                plot.setLabelFont(font);
                plot.setLabelPaint(Color.darkGray);
            }
        }
    }

    String[] legendStr = (String[]) params.get("chdl");
    if (legendStr != null) {
        // process the title
        String[] s = breakString(legendStr[0], '|');
        List labels = Arrays.asList(s);
        if (labels.size() > 0) {
            Plot p = chart.getPlot();
            if (p instanceof CategoryPlot) {
                CategoryPlot plot = (CategoryPlot) chart.getPlot();
                BarRenderer renderer = (BarRenderer) plot.getRenderer();
                renderer.setLegendItemLabelGenerator(new GSeriesLabelGenerator(labels));
                renderer.setBaseSeriesVisibleInLegend(false);
                for (int i = 0; i < labels.size(); i++) {
                    renderer.setSeriesVisibleInLegend(i, Boolean.TRUE);
                }
            } else if (p instanceof XYPlot) {
                XYPlot plot = (XYPlot) chart.getPlot();
                XYItemRenderer renderer = plot.getRenderer();
                renderer.setLegendItemLabelGenerator(new GSeriesLabelGenerator(labels));
                renderer.setBaseSeriesVisibleInLegend(false);
                for (int i = 0; i < labels.size(); i++) {
                    renderer.setSeriesVisibleInLegend(i, Boolean.TRUE);
                }
            } else if (p instanceof PiePlot) {
                PiePlot plot = (PiePlot) chart.getPlot();
                plot.setLegendLabelGenerator(new GPieSectionLabelGenerator(labels));
            }

            LegendTitle legend = new LegendTitle(chart.getPlot());
            RectangleEdge pos = RectangleEdge.RIGHT;
            String[] chdlp = (String[]) params.get("chdlp");
            if (chdlp != null) {
                if ("b".equals(chdlp[0])) {
                    pos = RectangleEdge.BOTTOM;
                } else if ("t".equals(chdlp[0])) {
                    pos = RectangleEdge.TOP;
                } else if ("l".equals(chdlp[0])) {
                    pos = RectangleEdge.LEFT;
                }
            }
            legend.setPosition(pos);
            legend.setItemFont(font);
            legend.setItemPaint(Color.darkGray);
            chart.addSubtitle(legend);
        }
    }

    // *** CHART MARKERS ***
    String[] markerStr = (String[]) params.get("chm");
    if (markerStr != null) {
        String[] markers = breakString(markerStr[0], '|');
        for (int i = 0; i < markers.length; i++) {
            addMarker(markers[i], chart);
        }
    }

    // *** CHART FILL ***/
    String[] fillStr = (String[]) params.get("chf");
    if (fillStr != null) {
        // process the 1 or 2 fill specs
        int i = fillStr[0].indexOf('|');
        if (i == -1) {
            processFillSpec(fillStr[0], chart);
        } else {
            String fs1 = fillStr[0].substring(0, i);
            String fs2 = fillStr[0].substring(i + 1);
            processFillSpec(fs1, chart);
            processFillSpec(fs2, chart);
        }
    }

    // process the 'ewtr' tag, if present
    processEWTR(params, chart);

    return chart;

}

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

@Override
public void populate(XYPlot plot, AROTraceData analysis) {
    if (analysis == null) {
        logger.info("analysis data is null");
    } else {/*  w  w  w  .  j  a  v a 2s .  c  o  m*/
        alarmDataCollection.removeAllSeries();
        pointerAnnotation.clear();

        TraceResultType resultType = analysis.getAnalyzerResult().getTraceresult().getTraceResultType();
        if (resultType.equals(TraceResultType.TRACE_FILE)) {
            logger.info("didn't get analysis trace data!");

        } else {
            // Remove old annotation from previous plots
            Iterator<XYPointerAnnotation> pointers = pointerAnnotation.iterator();
            while (pointers.hasNext()) {
                plot.removeAnnotation(pointers.next());
            }

            for (AlarmType eventType : AlarmType.values()) {
                XYIntervalSeries series = new XYIntervalSeries(eventType);
                seriesMap.put(eventType, series);
                alarmDataCollection.addSeries(series);
            }
            TraceDirectoryResult traceresult = (TraceDirectoryResult) analysis.getAnalyzerResult()
                    .getTraceresult();
            List<AlarmInfo> alarmInfos = traceresult.getAlarmInfos();
            List<ScheduledAlarmInfo> pendingAlarms = getHasFiredAlarms(traceresult.getScheduledAlarms());
            Iterator<ScheduledAlarmInfo> iterPendingAlarms = pendingAlarms.iterator();
            double firedTime = 0;
            while (iterPendingAlarms.hasNext()) {
                ScheduledAlarmInfo scheduledEvent = iterPendingAlarms.next();
                AlarmType pendingAlarmType = scheduledEvent.getAlarmType();
                if (pendingAlarmType != null) {
                    firedTime = (scheduledEvent.getTimeStamp() - scheduledEvent.getRepeatInterval()) / 1000;
                    seriesMap.get(pendingAlarmType).add(firedTime, firedTime, firedTime, 1, 0.8, 1);
                    eventMapPending.put(firedTime, scheduledEvent);
                    // logger.fine("populateAlarmScheduledPlot type:\n" +
                    // pendingAlarmType
                    // + "\ntime " + scheduledEvent.getTimeStamp()
                    // + "\nrepeating " + firedTime);
                }
            }

            Iterator<AlarmInfo> iter = alarmInfos.iterator();
            while (iter.hasNext()) {
                AlarmInfo currEvent = iter.next();
                if (currEvent != null) {
                    AlarmType alarmType = currEvent.getAlarmType();
                    if (alarmType != null) {
                        firedTime = currEvent.getTimeStamp() / 1000;

                        /*
                         * Catching any alarms align to quanta as being
                         * inexactRepeating alarms
                         */
                        if ((currEvent.getTimestampElapsed() / 1000) % 900 < 1) {
                            seriesMap.get(alarmType).add(firedTime, firedTime, firedTime, 1, 0, 0.7);

                            // Adding an arrow to mark these
                            // inexactRepeating alarms
                            XYPointerAnnotation xypointerannotation = new XYPointerAnnotation(alarmType.name(),
                                    firedTime, 0.6, 3.92699082D);
                            xypointerannotation.setBaseRadius(20D);
                            xypointerannotation.setTipRadius(1D);
                            pointerAnnotation.add(xypointerannotation);
                            plot.addAnnotation(xypointerannotation);

                            // logger.info("SetInexactRepeating alarm type: "
                            // + alarmType
                            // + " time " + firedTime
                            // + " epoch " + currEvent.getTimestampEpoch()
                            // + " elapsed:\n" +
                            // currEvent.getTimestampElapsed()/1000);
                        } else {
                            seriesMap.get(alarmType).add(firedTime, firedTime, firedTime, 1, 0, 0.5);
                        }
                        eventMap.put(firedTime, currEvent);
                    }
                }
            }
            XYItemRenderer renderer = plot.getRenderer();
            renderer.setSeriesPaint(alarmDataCollection.indexOf(AlarmType.RTC_WAKEUP), Color.red);

            renderer.setSeriesPaint(alarmDataCollection.indexOf(AlarmType.RTC), Color.pink);

            renderer.setSeriesPaint(alarmDataCollection.indexOf(AlarmType.ELAPSED_REALTIME_WAKEUP), Color.blue);

            renderer.setSeriesPaint(alarmDataCollection.indexOf(AlarmType.ELAPSED_REALTIME), Color.cyan);

            renderer.setSeriesPaint(alarmDataCollection.indexOf(AlarmType.UNKNOWN), Color.black);

            // Assign ToolTip to renderer
            renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
                @Override
                public String generateToolTip(XYDataset dataset, int series, int item) {
                    AlarmInfo info = eventMap.get(dataset.getX(series, item));
                    Date epochTime = new Date();
                    if (info != null) {

                        epochTime.setTime((long) info.getTimestampEpoch());

                        StringBuffer displayInfo = new StringBuffer(
                                ResourceBundleHelper.getMessageString("alarm.tooltip.prefix"));
                        displayInfo.append(MessageFormat.format(
                                ResourceBundleHelper.getMessageString("alarm.tooltip.content"),
                                info.getAlarmType(), info.getTimeStamp() / 1000, epochTime.toString()));
                        if ((info.getTimestampElapsed() / 1000) % 900 < 1) {
                            displayInfo.append(
                                    ResourceBundleHelper.getMessageString("alarm.tooltip.setInexactRepeating"));
                        }
                        displayInfo.append(ResourceBundleHelper.getMessageString("alarm.tooltip.suffix"));
                        return displayInfo.toString();
                    }
                    ScheduledAlarmInfo infoPending = eventMapPending.get(dataset.getX(series, item));
                    if (infoPending != null) {

                        epochTime.setTime(
                                (long) (infoPending.getTimestampEpoch() - infoPending.getRepeatInterval()));

                        StringBuffer displayInfo = new StringBuffer(
                                ResourceBundleHelper.getMessageString("alarm.tooltip.prefix"));
                        displayInfo.append(MessageFormat.format(
                                ResourceBundleHelper.getMessageString("alarm.tooltip.contentWithName"),
                                infoPending.getAlarmType(),
                                (infoPending.getTimeStamp() - infoPending.getRepeatInterval()) / 1000,
                                epochTime.toString(), infoPending.getApplication(),
                                infoPending.getRepeatInterval() / 1000));
                        displayInfo.append(ResourceBundleHelper.getMessageString("alarm.tooltip.suffix"));
                        return displayInfo.toString();
                    }
                    return null;
                }
            });

        }
    }
    plot.setDataset(alarmDataCollection);
    //      return plot;
}

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

/**
 * Creating Alarm triggered data for graph plot
 *//*from   ww  w  . j  ava2 s  .co  m*/
private static void populateAlarmPlot(XYPlot plot, TraceData.Analysis analysis) {

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

        // Remove old annotation from previous plots
        Iterator<XYPointerAnnotation> pointers = pointerAnnotation.iterator();
        while (pointers.hasNext()) {
            plot.removeAnnotation(pointers.next());
        }
        pointerAnnotation.clear();

        final Map<AlarmType, XYIntervalSeries> seriesMap = new EnumMap<AlarmType, XYIntervalSeries>(
                AlarmType.class);
        for (AlarmType eventType : AlarmType.values()) {
            XYIntervalSeries series = new XYIntervalSeries(eventType);
            seriesMap.put(eventType, series);
            alarmDataCollection.addSeries(series);
        }
        final List<AlarmInfo> alarmInfos = analysis.getAlarmInfos();
        final Map<Double, AlarmInfo> eventMap = new HashMap<Double, AlarmInfo>();
        final Map<Double, ScheduledAlarmInfo> eventMapPending = new HashMap<Double, ScheduledAlarmInfo>();
        List<ScheduledAlarmInfo> pendingAlarms = getHasFiredAlarms(analysis.getScheduledAlarms());
        Iterator<ScheduledAlarmInfo> iterPendingAlarms = pendingAlarms.iterator();
        double firedTime = 0;
        while (iterPendingAlarms.hasNext()) {
            ScheduledAlarmInfo scheduledEvent = iterPendingAlarms.next();
            AlarmType pendingAlarmType = scheduledEvent.getAlarmType();
            if (pendingAlarmType != null) {
                firedTime = (scheduledEvent.getTimeStamp() - scheduledEvent.getRepeatInterval()) / 1000;
                seriesMap.get(pendingAlarmType).add(firedTime, firedTime, firedTime, 1, 0.8, 1);
                eventMapPending.put(firedTime, scheduledEvent);
                logger.fine("populateAlarmScheduledPlot type:\n" + pendingAlarmType + "\ntime "
                        + scheduledEvent.getTimeStamp() + "\nrepeating " + firedTime);
            }
        }

        Iterator<AlarmInfo> iter = alarmInfos.iterator();
        while (iter.hasNext()) {
            AlarmInfo currEvent = iter.next();
            if (currEvent != null) {
                AlarmType alarmType = currEvent.getAlarmType();
                if (alarmType != null) {
                    firedTime = currEvent.getTimeStamp() / 1000;

                    /*
                     * Catching any alarms align to quanta as being
                     * inexactRepeating alarms
                     */
                    if ((currEvent.getTimestampElapsed() / 1000) % 900 < 1) {
                        seriesMap.get(alarmType).add(firedTime, firedTime, firedTime, 1, 0, 0.7);

                        // Adding an arrow to mark these inexactRepeating alarms
                        XYPointerAnnotation xypointerannotation = new XYPointerAnnotation(alarmType.name(),
                                firedTime, 0.6, 3.92699082D);
                        xypointerannotation.setBaseRadius(20D);
                        xypointerannotation.setTipRadius(1D);
                        pointerAnnotation.add(xypointerannotation);
                        plot.addAnnotation(xypointerannotation);

                        logger.info("SetInexactRepeating alarm type: " + alarmType + " time " + firedTime
                                + " epoch " + currEvent.getTimestampEpoch() + " elapsed:\n"
                                + currEvent.getTimestampElapsed() / 1000);
                    } else {
                        seriesMap.get(alarmType).add(firedTime, firedTime, firedTime, 1, 0, 0.5);
                    }
                    eventMap.put(firedTime, currEvent);
                }
            }
        }
        XYItemRenderer renderer = plot.getRenderer();
        renderer.setSeriesPaint(alarmDataCollection.indexOf(AlarmType.RTC_WAKEUP), Color.red);

        renderer.setSeriesPaint(alarmDataCollection.indexOf(AlarmType.RTC), Color.pink);

        renderer.setSeriesPaint(alarmDataCollection.indexOf(AlarmType.ELAPSED_REALTIME_WAKEUP), Color.blue);

        renderer.setSeriesPaint(alarmDataCollection.indexOf(AlarmType.ELAPSED_REALTIME), Color.cyan);

        renderer.setSeriesPaint(alarmDataCollection.indexOf(AlarmType.UNKNOWN), Color.black);

        // Assign ToolTip to renderer
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                AlarmInfo info = eventMap.get(dataset.getX(series, item));
                Date epochTime = new Date();
                if (info != null) {

                    epochTime.setTime((long) info.getTimestampEpoch());

                    StringBuffer displayInfo = new StringBuffer(rb.getString("alarm.tooltip.prefix"));
                    displayInfo.append(MessageFormat.format(rb.getString("alarm.tooltip.content"),
                            info.getAlarmType(), info.getTimeStamp() / 1000, epochTime.toString()));
                    if ((info.getTimestampElapsed() / 1000) % 900 < 1) {
                        displayInfo.append(rb.getString("alarm.tooltip.setInexactRepeating"));
                    }
                    displayInfo.append(rb.getString("alarm.tooltip.suffix"));
                    return displayInfo.toString();
                }
                ScheduledAlarmInfo infoPending = eventMapPending.get(dataset.getX(series, item));
                if (infoPending != null) {

                    epochTime.setTime(
                            (long) (infoPending.getTimestampEpoch() - infoPending.getRepeatInterval()));

                    StringBuffer displayInfo = new StringBuffer(rb.getString("alarm.tooltip.prefix"));
                    displayInfo.append(MessageFormat.format(rb.getString("alarm.tooltip.contentWithName"),
                            infoPending.getAlarmType(),
                            (infoPending.getTimeStamp() - infoPending.getRepeatInterval()) / 1000,
                            epochTime.toString(), infoPending.getApplication(),
                            infoPending.getRepeatInterval() / 1000));
                    displayInfo.append(rb.getString("alarm.tooltip.suffix"));
                    return displayInfo.toString();
                }
                return null;
            }
        });

    }

    plot.setDataset(alarmDataCollection);
}