@Override
    public List<ColumnarFeature> process(String value) {
        try {
            LocalDate date = LocalDate.parse(value, formatter);
            List<ColumnarFeature> features = new ArrayList<>(featureTypes.size());
            for (DateFeatureType f : featureTypes) {
                int featureValue = f.extract(date);
                ColumnarFeature feature = new ColumnarFeature(fieldName,f.toString(),featureValue);
                features.add(feature);
            }
            return features;
        } catch (DateTimeParseException e) {
            logger.log(Level.WARNING, e.getParsedString());
            logger.log(Level.WARNING, String.format("Unable to parse date %s with formatter %s", value, formatter.toString()));
            return Collections.emptyList();
        }
    }
@Test
    public void testInvalidBehaviour() {
        String notADateFormatString = "not-a-date-format-string";
        try {
            DateFieldProcessor proc = new DateFieldProcessor("test",
                    EnumSet.of(DateFieldProcessor.DateFeatureType.DAY),
                    notADateFormatString);
            fail("Should have thrown on failing to parse the date format string");
        } catch (PropertyException e) {
            // pass
        }

        String isoFormat = "uuuu-MM-dd";
        DateFieldProcessor proc = new DateFieldProcessor("test",
                EnumSet.of(DateFieldProcessor.DateFeatureType.DAY),
                isoFormat);

        List<ColumnarFeature> extractedFeatures = proc.process("definitely-not-a-date");
        assertTrue(extractedFeatures.isEmpty());
    }