treasure-data/embulk-input-marketo

View on GitHub
src/main/java/org/embulk/input/marketo/model/MarketoField.java

Summary

Maintainability
A
35 mins
Test Coverage
package org.embulk.input.marketo.model;

import com.google.common.base.Optional;
import org.embulk.input.marketo.MarketoUtils;
import org.embulk.spi.type.Type;
import org.embulk.spi.type.Types;

/**
 * Created by tai.khuu on 9/22/17.
 */

public class MarketoField
{
    private String name;

    private MarketoDataType marketoDataType;

    public MarketoField(){}

    public MarketoField(String name, String dataType)
    {
        this.name = name;
        try {
            marketoDataType = MarketoDataType.valueOf(dataType.toUpperCase());
        }
        catch (IllegalArgumentException ex) {
            marketoDataType = MarketoDataType.STRING;
        }
    }

    public MarketoField(String name, MarketoDataType marketoDataType)
    {
        this.name = name;
        this.marketoDataType = marketoDataType;
    }

    public String getName()
    {
        return name;
    }

    public MarketoDataType getMarketoDataType()
    {
        return marketoDataType;
    }

    @Override
    public boolean equals(Object o)
    {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }

        MarketoField field = (MarketoField) o;

        if (name != null ? !name.equals(field.name) : field.name != null) {
            return false;
        }
        return marketoDataType == field.marketoDataType;
    }

    @Override
    public int hashCode()
    {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + (marketoDataType != null ? marketoDataType.hashCode() : 0);
        return result;
    }

    public enum MarketoDataType
    {
        DATETIME(Types.TIMESTAMP, MarketoUtils.MARKETO_DATE_TIME_FORMAT),
        EMAIL(Types.STRING),
        FLOAT(Types.DOUBLE),
        INTEGER(Types.LONG),
        FORMULA(Types.STRING),
        PERCENT(Types.DOUBLE),
        URL(Types.STRING),
        PHONE(Types.STRING),
        TEXTAREA(Types.STRING),
        TEXT(Types.STRING),
        STRING(Types.STRING),
        SCORE(Types.LONG),
        BOOLEAN(Types.BOOLEAN),
        CURRENCY(Types.DOUBLE),
        DATE(Types.TIMESTAMP, MarketoUtils.MARKETO_DATE_FORMAT),
        REFERENCE(Types.STRING);

        private Type type;

        private String format;

        MarketoDataType(Type type, String format)
        {
            this.type = type;
            this.format = format;
        }

        MarketoDataType(Type type)
        {
            this.type = type;
        }

        public Type getType()
        {
            return type;
        }

        public Optional<String> getFormat()
        {
            return Optional.fromNullable(format);
        }
    }

    @Override
    public String toString()
    {
        return "MarketoField{" +
                "name='" + name + '\'' +
                ", marketoDataType=" + marketoDataType +
                '}';
    }
}