package nl.ipo.cds.etl.operations.transform;
import java.sql.Date;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import nl.ipo.cds.attributemapping.operations.annotation.Execute;
import nl.ipo.cds.attributemapping.operations.annotation.Input;
import nl.ipo.cds.attributemapping.operations.annotation.MappingOperation;
@MappingOperation
public class ToDateTransform {
private final Pattern datePattern;
private final Pattern datePatternNL;
public ToDateTransform () {
datePattern = Pattern.compile ("^([0-9]{4})[-\\/]([0-9]{2})[-\\/]([0-9]{2})$");
datePatternNL = Pattern.compile ("^([0-9]{2})[-\\/]([0-9]{2})[-\\/]([0-9]{4})$");
}
@Execute
public Date execute (final @Input ("value") String value) {
if (value == null || value.trim ().length () == 0) {
return null;
}
Matcher matcher = datePattern.matcher (value);
final int year;
final int month;
final int day;
if ((matcher = datePattern.matcher (value)).matches ()) {
year = Integer.valueOf (matcher.group (1));
month = Integer.valueOf (matcher.group (2));
day = Integer.valueOf (matcher.group (3));
} else if ((matcher = datePatternNL.matcher (value)).matches ()) {
year = Integer.valueOf (matcher.group (3));
month = Integer.valueOf (matcher.group (2));
day = Integer.valueOf (matcher.group (1));
} else {
return null;
}
final Calendar calendar = Calendar.getInstance ();
calendar.set (year, month - 1, day);
return new Date (calendar.getTime ().getTime ());
}
}