// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dataquality.datamasking.semantic; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import org.apache.log4j.Logger; import org.talend.dataquality.datamasking.functions.Function; public class DateFunctionAdapter extends Function<String> { private static final long serialVersionUID = -2845447810365033162L; private static final Logger LOG = Logger.getLogger(DateFunctionAdapter.class); private Function<Date> function; private List<SimpleDateFormat> dataFormatList = new ArrayList<SimpleDateFormat>(); @Override public void setRandom(Random rand) { super.setRandom(rand); function.setRandom(rand); } public DateFunctionAdapter(Function<Date> functionToAdapt, List<String> datePatternList) { function = functionToAdapt; rnd = functionToAdapt.getRandom(); if (datePatternList != null) { for (String pattern : datePatternList) { try { dataFormatList.add(new SimpleDateFormat(pattern)); } catch (IllegalArgumentException e) { LOG.warn(e.getMessage(), e); } } } } @Override protected String doGenerateMaskedField(String input) { if (input == null || EMPTY_STRING.equals(input.trim())) { return input; } for (SimpleDateFormat sdf : dataFormatList) { try { if (!sdf.toPattern().contains("H") && input.contains(":")) { continue; } final Date inputDate = sdf.parse(input); final Date result = function.generateMaskedRow(inputDate); return sdf.format(result); } catch (ParseException e) { LOG.warn(e.getMessage()); } } // no pattern from column metadata is applicable to the input, continue to guess and parse final String guess = DatePatternHelper.guessDatePattern(input); if (!EMPTY_STRING.equals(guess)) { final SimpleDateFormat sdf = new SimpleDateFormat(guess); try { final Date inputDate = sdf.parse(input); final Date result = function.generateMaskedRow(inputDate); return sdf.format(result); } catch (ParseException e) { LOG.warn(e.getMessage()); } } return ReplaceCharacterHelper.replaceCharacters(input, rnd); } }