private static ProductData.UTC[] parseSingleDayDate(String productName, String pattern) { final int beginIndex = findPaternStart(productName, pattern); return parseSingleDayDate(productName, pattern, beginIndex); }
static ProductData.UTC[] tryToGetDateRange(String productName) { final String singleDateMonthPattern = "\\d{6}_.*"; final String startEndPattern = "\\d{8}_\\d{8}_.*"; final String singleDateDayPattern = "\\d{8}_.*"; final String singleDateDayPattern_leadingCharacters = ".*_\\d{8}_.*"; if (productName.matches(singleDateMonthPattern)) { return parseSingleMonthDate(productName); } else if (productName.matches(startEndPattern)) { return parseStartEndDate(productName); } else if (productName.matches(singleDateDayPattern)) { return parseSingleDayDate(productName); } else if (productName.matches(singleDateDayPattern_leadingCharacters)) { return parseSingleDayDate(productName); } throw new IllegalArgumentException("Unable to derive date from product name '" + productName + "'."); }
@Test(expected = IllegalArgumentException.class) public void testNotMatchAnyPattern() throws Exception { DateRangeParser.tryToGetDateRange("doesNotMatchAnyPattern"); } }
private static ProductData.UTC[] parseSingleDayDate(String productName) { return parseSingleDayDate(productName, "yyyyMMdd"); }
private static Product readSingleProduct(File path) throws IOException { final Product product = ProductIO.readProduct(path); if (product == null) { return null; } if (product.getStartTime() != null) { return product; } final String productName = product.getName(); try { final ProductData.UTC[] utcs = DateRangeParser.tryToGetDateRange(productName); product.setStartTime(utcs[0]); product.setEndTime(utcs[1]); return product; } catch (IllegalArgumentException e) { //todo inform the User with Popup Dialog BeamLogManager.getSystemLogger().log(Level.WARNING, "Product '" + productName + "' does not contain readable time information.", e); return null; } } }
private static ProductData.UTC[] parseSingleMonthDate(String productName) { return parseSingleDayDate(productName, "yyyyMM"); }
@Test public void testTryToGetDateRangeFromValidDailyProduct() throws Exception { ProductData.UTC[] dateRange = DateRangeParser.tryToGetDateRange("20111103_est_wac_wew_1200.dim"); assertEquals(dateRange.length, 2); assertEquals(ProductData.UTC.parse("2011-11-03", "yyyy-MM-dd").getAsDate().getTime(), dateRange[0].getAsDate().getTime()); assertEquals(dateRange[0].getAsDate().getTime(), dateRange[1].getAsDate().getTime()); }
@Test public void testTryToGetDateRangeFromValidDailyProductWithLeadingCharacters() throws Exception { ProductData.UTC[] dateRange = DateRangeParser.tryToGetDateRange("leading_characters_20111103_est_wac_wew_1200.dim"); assertEquals(dateRange.length, 2); assertEquals(ProductData.UTC.parse("2011-11-03", "yyyy-MM-dd").getAsDate().getTime(), dateRange[0].getAsDate().getTime()); assertEquals(dateRange[0].getAsDate().getTime(), dateRange[1].getAsDate().getTime()); }
@Test public void testTryToGetDateRangeFromValidMonthlyProduct() throws Exception { ProductData.UTC[] dateRange = DateRangeParser.tryToGetDateRange("201106_bas_wac_acr_1200.dim"); assertEquals(dateRange.length, 2); assertEquals(ProductData.UTC.parse("2011-06", "yyyy-MM").getAsDate().getTime(), dateRange[0].getAsDate().getTime()); assertEquals(dateRange[0].getAsDate().getTime(), dateRange[1].getAsDate().getTime()); }
@Test public void testTryToGetDateRangeFromValidWeeklyProduct() throws Exception { ProductData.UTC[] dateRange = DateRangeParser.tryToGetDateRange("20110917_20110923_bas_wac_acr_1200.dim"); assertEquals(dateRange.length, 2); assertEquals(ProductData.UTC.parse("2011-09-17", "yyyy-MM-dd").getAsDate().getTime(), dateRange[0].getAsDate().getTime()); assertEquals(ProductData.UTC.parse("2011-09-23", "yyyy-MM-dd").getAsDate().getTime(), dateRange[1].getAsDate().getTime()); }