All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.intercom.api.CustomAttribute Maven / Gradle / Ivy

The newest version!
package io.intercom.api;

import com.google.common.collect.Lists;

import java.io.Serializable;
import java.util.ArrayList;

@SuppressWarnings("UnusedDeclaration")
public class CustomAttribute {

    @SuppressWarnings("unchecked")
    private static final ArrayList> CLASSES = Lists.newArrayList(String.class, Long.class, Float.class, Double.class, Boolean.class, Integer.class);

    public static StringAttribute newStringAttribute(String name, String value) {
        return new StringAttribute(name, value);
    }

    public static BooleanAttribute newBooleanAttribute(String name, boolean value) {
        return new BooleanAttribute(name, value);
    }

    public static DoubleAttribute newDoubleAttribute(String name, double value) {
        return new DoubleAttribute(name, value);
    }

    public static LongAttribute newLongAttribute(String name, long value) {
        return new LongAttribute(name, value);
    }

    public static IntegerAttribute newIntegerAttribute(String name, int value) {
        return new IntegerAttribute(name, value);
    }

    public static FloatAttribute newFloatAttribute(String name, float value) {
        return new FloatAttribute(name, value);
    }

    public static class StringAttribute extends CustomAttribute {

        private StringAttribute(String name, String value) {
            super(name, value, String.class);
        }

        private StringAttribute(String name, String value, Class clazz) {
            super(name, value, clazz);
        }
    }

    public static class BooleanAttribute extends CustomAttribute {

        private BooleanAttribute(String name, boolean value) {
            super(name, value, Boolean.class);
        }

        private BooleanAttribute(String name, boolean value, Class clazz) {
            super(name, value, clazz);
        }
    }

    public static class DoubleAttribute extends CustomAttribute {

        private DoubleAttribute(String name, double value, Class clazz) {
            super(name, value, clazz);
        }

        private DoubleAttribute(String name, double value) {
            super(name, value, Double.class);
        }
    }

    public static class FloatAttribute extends CustomAttribute {

        private FloatAttribute(String name, float value, Class clazz) {
            super(name, value, clazz);
        }

        private FloatAttribute(String name, float value) {
            super(name, value, Float.class);
        }
    }

    public static class IntegerAttribute extends CustomAttribute {

        private IntegerAttribute(String name, int value) {
            super(name, value, Integer.class);
        }

        private IntegerAttribute(String name, int value, Class clazz) {
            super(name, value, clazz);
        }
    }

    public static class LongAttribute extends CustomAttribute {

        public LongAttribute(String name, long value, Class clazz) {
            super(name, value, clazz);
        }

        public LongAttribute(String name, long value) {
            super(name, value, Long.class);
        }

    }

    private String name;

    private T value;

    private Class clazz;

    public CustomAttribute(String name, T value, Class clazz) {
        //noinspection SuspiciousMethodCalls
        if (!CLASSES.contains(clazz)) {
            throw new InvalidException(String.format("cannot accept class type [%s] for custom attribute", clazz.getName()));
        }
        this.name = name;
        this.value = value;
        this.clazz = clazz;

    }

    public Class getValueClass() {
        return clazz;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }

    public  C as(Class c) {
        //noinspection unchecked
        return (C) getValue();
    }

    public long longValue() {
        return as(Long.class);
    }

    public String textValue() {
        return as(String.class);
    }

    public boolean booleanValue() {
        return as(Boolean.class);
    }

    public float floatValue() {
        return as(Float.class);
    }

    public double doubleValue() {
        return as(Double.class);
    }

    public int integerValue() {
        return as(Integer.class);
    }

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

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

        CustomAttribute that = (CustomAttribute) o;

        if (clazz != null ? !clazz.equals(that.clazz) : that.clazz != null) return false;
        if (name != null ? !name.equals(that.name) : that.name != null) return false;
        //noinspection RedundantIfStatement
        if (value != null ? !value.equals(that.value) : that.value != null) return false;

        return true;
    }

    @Override
    public String toString() {
        return "CustomAttribute{" +
            "name='" + name + '\'' +
            ", value=" + value +
            ", clazz=" + clazz +
            '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy