DateTimeFormatParserLegacy.java

package emissary.util;

import emissary.config.ConfigUtil;
import emissary.config.Configurator;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Deprecated
@SuppressWarnings("all")
public class DateTimeFormatParserLegacy {

    protected static final Logger logger = LoggerFactory.getLogger(DateTimeFormatParserLegacy.class);

    /** Date formats we can use to parse event date strings */
    @Deprecated
    protected static final List<SimpleDateFormat> dateFormats = new ArrayList<>();

    static {
        configure();
    }

    protected static void configure() {
        try {
            Configurator configG = ConfigUtil.getConfigInfo(DateTimeFormatParserLegacy.class);
            for (final String dfentry : configG.findEntries("DATE_FORMAT")) {
                try {
                    final SimpleDateFormat sdf = new SimpleDateFormat(dfentry);
                    sdf.setLenient(true);
                    dateFormats.add(sdf);
                } catch (Exception ex) {
                    logger.debug("DATE_FORMAT entry '{}' cannot be parsed", dfentry, ex);
                }
            }
            logger.debug("Loaded {} DATE_FORMAT entries", dateFormats.size());
        } catch (IOException e) {
            logger.error("Cannot open default config file", e);
        }
    }


    /**
     * Parse an RFC-822 Date or one of the thousands of variants make a quick attempt to normalize the timezone information
     * and get the timestamp in GMT. Should change to pass in a default from the U124 header
     *
     * @param dateString the string date from the RFC 822 Date header
     * @param supplyDefaultOnBad when true use current date if sentDate is unparseable
     * @return the GMT time of the event or NOW if unparseable, or null if supplyDefaultOnBad is false
     */
    @Deprecated
    public static Date parseEventDate(final String dateString, final boolean supplyDefaultOnBad) {
        Date date = null;
        if (dateString != null && dateString.length() > 0) {
            // Take it apart and stick it back together to get
            // get rid of multiple contiguous spaces
            String instr = dateString.replaceAll("\t+", " "); // tabs
            instr = instr.replaceAll("[ ]+", " "); // multiple spaces
            instr = instr.replaceAll("=0D$", ""); // common qp'ified ending

            // try each date format in turn until one works
            synchronized (dateFormats) {
                for (final SimpleDateFormat sdf : dateFormats) {
                    try {
                        date = sdf.parse(instr);
                        break;
                    } catch (Exception e) {
                        // Ignore.
                        logger.debug("Error parsing date", e);
                    }
                }
            }
        }

        // Use the default if required
        if (date == null && supplyDefaultOnBad) {
            date = new Date();
        }

        // Let them have it.
        return date;
    }


    private DateTimeFormatParserLegacy() {}
}