/** * Returns the data item for a specific period. Note that the returned * object is a clone of the item in the series, so modifying it will have * no effect on the data series. * * @param period the period of interest ({@code null} not allowed). * * @return The data item matching the specified period (or * {@code null} if there is no match). * * @see #getDataItem(int) */ public TimeSeriesDataItem getDataItem(RegularTimePeriod period) { int index = getIndex(period); if (index >= 0) { return getDataItem(index); } return null; }
/** * Returns the data item for a specific period. Note that the returned * object is a clone of the item in the series, so modifying it will have * no effect on the data series. * * @param period the period of interest (<code>null</code> not allowed). * * @return The data item matching the specified period (or * <code>null</code> if there is no match). * * @see #getDataItem(int) */ public TimeSeriesDataItem getDataItem(RegularTimePeriod period) { int index = getIndex(period); if (index >= 0) { return getDataItem(index); } else { return null; } }
public String generateToolTip(XYDataset xyDataset, int row, int col) { final TimeSeriesCollection timeSeriesCollection = (TimeSeriesCollection) xyDataset; final TimeSeries timeSeries = timeSeriesCollection.getSeries(row); final TimeSeriesDataItem item = timeSeries.getDataItem(col); final RegularTimePeriod period = item.getPeriod(); int total = matchingIssues.get(period).intValue(); return period.toString() + ": " + total + " " + StringEscapeUtils.escapeHtml(dateField.getName()) + " " + i18nBean.getText("datacollector.tooltip.issues") + "."; } });
List<AverageStatusDataRow> generateDataSet(XYDataset dataset, XYURLGenerator urlGenerator) { TimeSeriesCollection timeSeries = (TimeSeriesCollection) dataset; Map<Number, AverageStatusDataRow> dataRowMap = new LinkedHashMap<Number, AverageStatusDataRow>(); TimePeriodUtils timePeriodUtils = new TimePeriodUtils(timeZoneManager); for (int seriesIndex = 0, seriesCount = timeSeries.getSeriesCount(); seriesIndex < seriesCount; ++seriesIndex) { Comparable status = timeSeries.getSeriesKey(seriesIndex); for (int xyItemIndex = 0, itemCount = timeSeries.getItemCount(seriesIndex); xyItemIndex < itemCount; ++xyItemIndex) { TimeSeriesDataItem dataItem = timeSeries.getSeries(seriesIndex).getDataItem(xyItemIndex); Number periodInMillis = timeSeries.getX(seriesIndex, xyItemIndex); AverageStatusDataRow averageStatusDataRow = dataRowMap.containsKey(periodInMillis) ? dataRowMap.get(periodInMillis) : new AverageStatusDataRow(timePeriodUtils.prettyPrint(dataItem.getPeriod())); dataRowMap.put(periodInMillis, averageStatusDataRow); Number value = dataset.getY(seriesIndex, xyItemIndex); String url = urlGenerator.generateURL(dataset, seriesIndex, xyItemIndex); averageStatusDataRow.setStatusValue(status.toString(), value.doubleValue(), url); } } return new ArrayList<AverageStatusDataRow>(dataRowMap.values()); }
@Override public TimeSeries validate(TimeSeries timeSeries, String sourceName, TimeSeriesType type) throws ParseException { String qualifiedSourceName = createQualifiedSourcename(sourceName, type); final Symbol symbol = namespace.resolveSymbol(qualifiedSourceName); if (symbol == null) { throw new ParseException("No variable for identifier '" + qualifiedSourceName + "' registered."); } final String expression = getExpressionFor(qualifiedSourceName); if (expression == null || expression.trim().isEmpty()) { return timeSeries; } final Variable variable = (Variable) symbol; final Term term = parser.parse(expression, namespace); final int seriesCount = timeSeries.getItemCount(); final TimeSeries validatedSeries = new TimeSeries(timeSeries.getKey()); for (int i = 0; i < seriesCount; i++) { final TimeSeriesDataItem dataItem = timeSeries.getDataItem(i); final Number value = dataItem.getValue(); variable.assignD(null, value.doubleValue()); if (term.evalB(null)) { validatedSeries.add(dataItem); } } return validatedSeries; }
/** * Retrieves a DataSet - a collection of DataPoints - from the current * (JFreeChart) TimeSeries. The DataSet should contain all DataPoints * defined by the TimeSeries. * * <p>In general, build will attempt to convert all values in the * TimeSeries to data points. * @return a DataSet built from the current TimeSeries. */ public DataSet build() { DataSet dataSet = new DataSet(); dataSet.setTimeVariable( getTimeVariable() ); // Iterate through TimeSeries, // creating new DataPoint instance for each row int numberOfPeriods = timeSeries.getItemCount(); for ( int t=0; t<numberOfPeriods; t++ ) dataSet.add( build(timeSeries.getDataItem(t)) ); return dataSet; }
/** * Retrieves a DataSet - a collection of DataPoints - from the current * (JFreeChart) TimeSeries. The DataSet should contain all DataPoints * defined by the TimeSeries. * * <p>In general, build will attempt to convert all values in the * TimeSeries to data points. * @return a DataSet built from the current TimeSeries. */ public DataSet build() { DataSet dataSet = new DataSet(); dataSet.setTimeVariable( getTimeVariable() ); // Iterate through TimeSeries, // creating new DataPoint instance for each row int numberOfPeriods = timeSeries.getItemCount(); for ( int t=0; t<numberOfPeriods; t++ ) dataSet.add( build(timeSeries.getDataItem(t)) ); return dataSet; }
public String generateURL(XYDataset xyDataset, int row, int col) { final TimeSeriesCollection timeSeriesCollection = (TimeSeriesCollection) xyDataset; final TimeSeries timeSeries = timeSeriesCollection.getSeries(row); final TimeSeriesDataItem item = timeSeries.getDataItem(col); final RegularTimePeriod period = item.getPeriod(); final JqlQueryBuilder jqlQueryBuilder = JqlQueryBuilder.newBuilder(searchRequest.getQuery()); final Date startDate = period.getStart(); final Date endDate = new Date(period.getEnd().getTime()); jqlQueryBuilder.where().defaultAnd().addDateRangeCondition(getJqlFieldIdFor(dateField), startDate, endDate); jqlQueryBuilder.orderBy().addSortForFieldName(dateFieldId, SortOrder.DESC, true); final QueryOptimizer optimizer = new RedundantClausesQueryOptimizer(); final Query query = optimizer.optimizeQuery(jqlQueryBuilder.buildQuery()); return velocityRequestContext.getCanonicalBaseUrl() + "/issues/?" + searchService.getQueryString(remoteUser, query); } };
@Test public void testValidateWithDefaultExpression() throws Exception { final TimeSeries unvalidatedTimeSeries = new TimeSeries("insitu1"); unvalidatedTimeSeries.add(ITEM_NAN); unvalidatedTimeSeries.add(ITEM_0); unvalidatedTimeSeries.add(ITEM_24_5); final TimeSeries validatedTimeSeries = validator.validate(unvalidatedTimeSeries, "insitu1", TimeSeriesType.INSITU); assertSame(unvalidatedTimeSeries, validatedTimeSeries); assertEquals(3, validatedTimeSeries.getItemCount()); assertEquals(ITEM_NAN, validatedTimeSeries.getDataItem(0)); assertEquals(ITEM_0, validatedTimeSeries.getDataItem(1)); assertEquals(ITEM_24_5, validatedTimeSeries.getDataItem(2)); }
@Test public void testValidate() throws Exception { final TimeSeries unvalidatedTimeSeries = new TimeSeries("raster1"); unvalidatedTimeSeries.add(ITEM_0); unvalidatedTimeSeries.add(ITEM_4); unvalidatedTimeSeries.add(ITEM_7); unvalidatedTimeSeries.add(ITEM_24_5); assertTrue(validator.setExpression("r.raster1", "r.raster1 > 5")); final TimeSeries validated = validator.validate(unvalidatedTimeSeries, "raster1", TimeSeriesType.PIN); assertNotSame(unvalidatedTimeSeries, validated); assertEquals(2, validated.getItemCount()); assertEquals(ITEM_7, validated.getDataItem(0)); assertEquals(ITEM_24_5, validated.getDataItem(1)); }
public String generateURL(final XYDataset xyDataset, final int row, final int col) { TimeSeriesCollection timeSeriesCollection = (TimeSeriesCollection) xyDataset; TimeSeries timeSeries = timeSeriesCollection.getSeries(row); if (row == 0) // only generate urls for the first row in the dataset { final TimeSeriesDataItem item = timeSeries.getDataItem(col); final RegularTimePeriod period = item.getPeriod(); final StatisticsMapper createdMapper = new DatePeriodStatisticsMapper(ChartUtil.getTimePeriodClass(periodName), dateFieldId, timeZoneManager.getLoggedInUserTimeZone()); final SearchRequest searchUrlSuffix = createdMapper.getSearchUrlSuffix(period, searchRequest); Query query; if (searchUrlSuffix == null) { query = new QueryImpl(); } else { QueryOptimizer optimizer = new RedundantClausesQueryOptimizer(); query = optimizer.optimizeQuery(searchUrlSuffix.getQuery()); } return velocityRequestContext.getCanonicalBaseUrl() + "/issues/?" + searchService.getQueryString(remoteUser, query); } else { return null; } } };
@Test public void testValidateWithExpression() throws Exception { final TimeSeries unvalidatedTimeSeries = new TimeSeries("insitu1"); unvalidatedTimeSeries.add(ITEM_NAN); unvalidatedTimeSeries.add(ITEM_0); unvalidatedTimeSeries.add(ITEM_24_5); assertTrue(validator.setExpression("i.insitu1", "i.insitu1 > 0")); final TimeSeries validatedTimeSeries = validator.validate(unvalidatedTimeSeries, "insitu1", TimeSeriesType.INSITU); assertNotSame(unvalidatedTimeSeries, validatedTimeSeries); assertEquals(1, validatedTimeSeries.getItemCount()); assertEquals(ITEM_24_5, validatedTimeSeries.getDataItem(0)); }