package mil.nga.giat.geowave.format.geotools.vector.retyping.date; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.beust.jcommander.IStringConverter; import com.beust.jcommander.Parameter; public class DateFieldOptionProvider { private final static Logger LOGGER = LoggerFactory.getLogger(DateFieldOptionProvider.class); @Parameter(names = "--data", description = "A map of date field names to the date format of the file. Use commas to separate each entry, then the first ':' character will separate the field name from the format. Use '\\,' to include a comma in the format. For example: \"time:MM:dd:YYYY,time2:YYYY/MM/dd hh:mm:ss\" configures fields 'time' and 'time2' as dates with different formats", converter = StringToDateFieldConverter.class) private Map<String, String> fieldToFormatMap = null; public Map<String, String> getFieldToFormatMap() { return fieldToFormatMap; } /** * Class to convert from a String to Map */ public static class StringToDateFieldConverter implements IStringConverter<Map<String, String>> { @Override public Map<String, String> convert( final String arg ) { Map<String, String> fieldToFormatMap = new HashMap<>(); if (arg != null) { String[] values = arg.split(","); StringBuilder escapedStrs = new StringBuilder(); for (String entryRaw : values) { if (entryRaw.endsWith("\\")) { escapedStrs.append(entryRaw.substring( 0, entryRaw.length() - 1) + ","); } else { final String entry = escapedStrs.toString() + entryRaw; escapedStrs = new StringBuilder(); final int firstSemiCol = entry.indexOf(':'); if (firstSemiCol < 0) { LOGGER.error("Field entry: \"" + entry + "\" requires semi-colon to separate field Name from field Format"); } else { final String fieldName = entry.substring( 0, firstSemiCol).trim(); final String fieldValue = entry.substring( firstSemiCol + 1).trim(); LOGGER.debug("TRANSFORMATION: " + fieldName + " --- " + fieldValue); fieldToFormatMap.put( fieldName, fieldValue); } } } } return fieldToFormatMap; } } }