Search in sources :

Example 1 with DatePattern

use of org.talend.dataprep.transformation.actions.date.DatePattern in project data-prep by Talend.

the class AbstractFillWith method applyOnColumn.

// TODO : utility Overriden methdo WTF
public void applyOnColumn(DataSetRow row, ActionContext context) {
    final Map<String, String> parameters = context.getParameters();
    final String columnId = context.getColumnId();
    final ColumnMetadata columnMetadata = context.getRowMetadata().getById(columnId);
    if (shouldBeProcessed(row, columnId)) {
        String newValue;
        // First, get raw new value regarding mode (constant or other column):
        if (parameters.get(MODE_PARAMETER).equals(CONSTANT_MODE)) {
            newValue = parameters.get(DEFAULT_VALUE_PARAMETER);
        } else {
            final RowMetadata rowMetadata = context.getRowMetadata();
            final ColumnMetadata selectedColumn = rowMetadata.getById(parameters.get(SELECTED_COLUMN_PARAMETER));
            newValue = row.get(selectedColumn.getId());
        }
        // Second: if we're on a date column, format new value with the most frequent pattern of the column:
        Type type = columnMetadata == null ? Type.ANY : Type.get(columnMetadata.getType());
        if (type.equals(Type.DATE)) {
            try {
                final LocalDateTime date = Providers.get().parse(newValue, columnMetadata);
                final String mostUsedDatePattern = RowMetadataUtils.getMostUsedDatePattern(columnMetadata);
                DateTimeFormatter ourNiceFormatter = mostUsedDatePattern == null ? DEFAULT_FORMATTER : new DatePattern(mostUsedDatePattern).getFormatter();
                newValue = ourNiceFormatter.format(date);
            } catch (DateTimeException e) {
                // Nothing to do, if we can't get a valid pattern, keep the raw value
                LOGGER.debug("Unable to parse date {}.", row.get(columnId), e);
            }
        }
        // At the end, set the new value:
        row.set(ActionsUtils.getTargetColumnId(context), newValue);
    }
}
Also used : LocalDateTime(java.time.LocalDateTime) ColumnMetadata(org.talend.dataprep.api.dataset.ColumnMetadata) ParameterType(org.talend.dataprep.parameters.ParameterType) Type(org.talend.dataprep.api.type.Type) DateTimeException(java.time.DateTimeException) RowMetadata(org.talend.dataprep.api.dataset.RowMetadata) DateTimeFormatter(java.time.format.DateTimeFormatter) DatePattern(org.talend.dataprep.transformation.actions.date.DatePattern)

Aggregations

DateTimeException (java.time.DateTimeException)1 LocalDateTime (java.time.LocalDateTime)1 DateTimeFormatter (java.time.format.DateTimeFormatter)1 ColumnMetadata (org.talend.dataprep.api.dataset.ColumnMetadata)1 RowMetadata (org.talend.dataprep.api.dataset.RowMetadata)1 Type (org.talend.dataprep.api.type.Type)1 ParameterType (org.talend.dataprep.parameters.ParameterType)1 DatePattern (org.talend.dataprep.transformation.actions.date.DatePattern)1