Search in sources :

Example 1 with DateTimeConverter

use of org.apache.commons.beanutils.converters.DateTimeConverter in project apex-malhar by apache.

the class RegexParser method processTuple.

@Override
public void processTuple(byte[] tuple) {
    if (tuple == null) {
        if (err.isConnected()) {
            err.emit(new KeyValPair<String, String>(null, "Blank/null tuple"));
        }
        errorTupleCount++;
        return;
    }
    String incomingString = new String(tuple);
    if (StringUtils.isBlank(incomingString)) {
        if (err.isConnected()) {
            err.emit(new KeyValPair<String, String>(incomingString, "Blank tuple"));
        }
        errorTupleCount++;
        return;
    }
    try {
        if (out.isConnected() && clazz != null) {
            Matcher matcher = pattern.matcher(incomingString);
            boolean patternMatched = false;
            Constructor<?> ctor = clazz.getConstructor();
            Object object = ctor.newInstance();
            if (matcher.find()) {
                for (int i = 0; i <= matcher.groupCount() - 1; i++) {
                    if (delimitedParserSchema.getFields().get(i).getType() == DelimitedSchema.FieldType.DATE) {
                        DateTimeConverter dtConverter = new DateConverter();
                        dtConverter.setPattern((String) delimitedParserSchema.getFields().get(i).getConstraints().get(DelimitedSchema.DATE_FORMAT));
                        ConvertUtils.register(dtConverter, Date.class);
                    }
                    BeanUtils.setProperty(object, delimitedParserSchema.getFields().get(i).getName(), matcher.group(i + 1));
                }
                patternMatched = true;
            }
            if (!patternMatched) {
                throw new ConversionException("The incoming tuple do not match with the Regex pattern defined.");
            }
            out.emit(object);
            emittedObjectCount++;
        }
    } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException | InstantiationException | ConversionException e) {
        if (err.isConnected()) {
            err.emit(new KeyValPair<String, String>(incomingString, e.getMessage()));
            logger.debug("Regex Expression : {} Incoming tuple : {}", splitRegexPattern, incomingString);
        }
        errorTupleCount++;
        logger.error("Tuple could not be parsed. Reason {}", e.getMessage());
    }
}
Also used : ConversionException(org.apache.commons.beanutils.ConversionException) DateConverter(org.apache.commons.beanutils.converters.DateConverter) Matcher(java.util.regex.Matcher) InvocationTargetException(java.lang.reflect.InvocationTargetException) DateTimeConverter(org.apache.commons.beanutils.converters.DateTimeConverter) KeyValPair(org.apache.apex.malhar.lib.util.KeyValPair)

Aggregations

InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Matcher (java.util.regex.Matcher)1 KeyValPair (org.apache.apex.malhar.lib.util.KeyValPair)1 ConversionException (org.apache.commons.beanutils.ConversionException)1 DateConverter (org.apache.commons.beanutils.converters.DateConverter)1 DateTimeConverter (org.apache.commons.beanutils.converters.DateTimeConverter)1