private boolean filterIntervals(Grib2Record gr, FeatureCollectionConfig.GribIntvFilter intvFilter) { // hack a whack - filter out records with unknown time units int timeUnit = gr.getPDS().getTimeUnit(); if (Grib2Utils.getCalendarPeriod(timeUnit) == null) { logger.info("Skip record with unknown time Unit= {}", timeUnit); return true; } int[] intv = cust.getForecastTimeIntervalOffset(gr); if (intv == null) return false; // not an interval int haveLength = intv[1] - intv[0]; // discard zero length intervals (default) if (haveLength == 0 && (intvFilter == null || intvFilter.isZeroExcluded())) return true; // HACK if (intvFilter != null && intvFilter.hasFilter()) { int discipline = gr.getIs().getDiscipline(); Grib2Pds pds = gr.getPDS(); int category = pds.getParameterCategory(); int number = pds.getParameterNumber(); int id = (discipline << 16) + (category << 8) + number; int prob = Integer.MIN_VALUE; if (pds.isProbability()) { Grib2Pds.PdsProbability pdsProb = (Grib2Pds.PdsProbability) pds; prob = (int) (1000 * pdsProb.getProbabilityUpperLimit()); } // true means discard return intvFilter.filter(id, intv[0], intv[1], prob); } return false; }
private boolean filterIntervals(Grib1Record gr, FeatureCollectionConfig.GribIntvFilter intvFilter) { Grib1SectionProductDefinition pdss = gr.getPDSsection(); Grib1ParamTime ptime = gr.getParamTime(cust); if (!ptime.isInterval()) return false; int[] intv = ptime.getInterval(); if (intv == null) return false; int haveLength = intv[1] - intv[0]; // keep zero length intervals unless configured otherwise if (haveLength == 0 && intvFilter != null && intvFilter.isZeroExcluded()) return true; if (intvFilter != null && intvFilter.hasFilter()) { int center = pdss.getCenter(); int subcenter = pdss.getSubCenter(); int version = pdss.getTableVersion(); int param = pdss.getParameterNumber(); int id = (center << 8) + (subcenter << 16) + (version << 24) + param; return intvFilter.filter(id, intv[0], intv[1], Integer.MIN_VALUE); } return false; }