org.openestate.io.idx.IdxFormat.java Source code

Java tutorial

Introduction

Here is the source code for org.openestate.io.idx.IdxFormat.java

Source

/*
 * Copyright 2015-2016 OpenEstate.org.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.openestate.io.idx;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.lang3.StringUtils;
import org.openestate.io.core.CsvFormat;
import org.openestate.io.core.LocaleUtils;
import org.openestate.io.core.NumberUtils;

/**
 * Specification of the IDX format.
 *
 * @since 1.0
 * @author Andreas Rudolph
 */
public class IdxFormat extends CsvFormat<IdxParser, IdxPrinter> {
    /**
     * the implemented version of this format
     */
    public final static String VERSION = "3.01";

    /**
     * the encoding of this format
     */
    public final static String ENCODING = "ISO-8859-1";

    /**
     * the record separator of this format
     */
    public final static String RECORD_SEPARATOR = "\r\n";

    /**
     * Create IDX format.
     */
    public IdxFormat() {
        super(CSVFormat.newFormat('#').withRecordSeparator(RECORD_SEPARATOR).withNullString(StringUtils.EMPTY));
    }

    /**
     * Returns a country code, as it is preferred by this format.
     *
     * @param country
     * country name to convert
     *
     * @return
     * converted country code or null, if no matching country was found
     */
    public static String getCountryCode(String country) {
        return LocaleUtils.getCountryISO2(country);
    }

    /**
     * Returns the preferred date format for this format.
     *
     * @return
     * date format
     */
    private static DateFormat getDateFormat() {
        return new SimpleDateFormat("dd.MM.yyyy");
    }

    /**
     * Returns the preferred date-time format for this format.
     *
     * @return
     * date-time format
     */
    private static DateFormat getDateTimeFormat() {
        return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
    }

    @Override
    public String getEncoding() {
        return ENCODING;
    }

    @Override
    protected IdxParser newParser(CSVParser parser) {
        return new IdxParser(parser);
    }

    @Override
    protected IdxPrinter newPrinter(CSVPrinter printer) {
        return new IdxPrinter(printer);
    }

    @SuppressFBWarnings(value = "NP_BOOLEAN_RETURN_NULL", justification = "This behaviour is intended.")
    public static Boolean parseBoolean(String value) {
        value = StringUtils.trimToNull(value);
        if ("1".equalsIgnoreCase(value) || "Y".equalsIgnoreCase(value))
            return true;
        else if ("0".equalsIgnoreCase(value) || "N".equalsIgnoreCase(value))
            return false;
        else
            return null;
    }

    public static Date parseDate(String value) throws ParseException {
        value = StringUtils.trimToNull(value);
        return (value != null) ? getDateFormat().parse(value) : null;
    }

    public static Calendar parseDateAsCalendar(String value) throws ParseException {
        Date date = parseDate(value);
        if (date == null)
            return null;
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal;
    }

    public static Date parseDateTime(String value) throws ParseException {
        value = StringUtils.trimToNull(value);
        return (value != null) ? getDateTimeFormat().parse(value) : null;
    }

    public static Calendar parseDateTimeAsCalendar(String value) throws ParseException {
        Date date = parseDateTime(value);
        if (date == null)
            return null;
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal;
    }

    public static BigDecimal parseDecimal(String value) throws NumberFormatException {
        Number number = parseNumber(value, false);
        return (number != null) ? BigDecimal.valueOf(number.doubleValue()) : null;
    }

    public static Integer parseInteger(String value) throws NumberFormatException {
        Number number = parseNumber(value, false);
        return (number != null) ? number.intValue() : null;
    }

    public static Long parseLong(String value) throws NumberFormatException {
        Number number = parseNumber(value, false);
        return (number != null) ? number.longValue() : null;
    }

    public static Number parseNumber(String value) throws NumberFormatException {
        return parseNumber(value, false);
    }

    public static Number parseNumber(String value, boolean integerOnly) throws NumberFormatException {
        return NumberUtils.parseNumber(value, integerOnly, Locale.ENGLISH, Locale.GERMANY);
    }

    public static String printBoolean(Boolean value) {
        if (Boolean.TRUE.equals(value))
            return "1";
        else if (Boolean.FALSE.equals(value))
            return "0";
        else
            return StringUtils.EMPTY;
    }

    public static String printDate(Calendar value) {
        return printDate((value != null) ? value.getTime() : null);
    }

    public static String printDate(Date value) {
        return (value != null) ? getDateFormat().format(value) : null;
    }

    public static String printDateTime(Calendar value) {
        return printDateTime((value != null) ? value.getTime() : null);
    }

    public static String printDateTime(Date value) {
        return (value != null) ? getDateTimeFormat().format(value) : null;
    }

    public static String printNumber(Number value, int integerDigits) {
        return printNumber(value, integerDigits, 0);
    }

    public static String printNumber(Number value, int integerDigits, int fractionDigits) {
        return NumberUtils.printNumber(value, integerDigits, fractionDigits, Locale.ENGLISH);
    }

    public static String printString(String value) {
        return printString(value, 0);
    }

    public static String printString(String value, int maxLength) {
        value = StringUtils.trimToNull(value);
        if (maxLength < 1)
            return value;
        else if (maxLength < 4)
            return StringUtils.left(value, maxLength);
        else
            return StringUtils.abbreviate(value, maxLength);
    }
}