package org.finra.datagenerator.scaffolding.transformer.service;
import org.finra.datagenerator.scaffolding.transformer.TransformDirection;
/**
* Created by dkopel on 11/21/16.
*/
public abstract class TransformationContainer<T> implements Comparable<TransformationContainer<T>> {
public final String alias;
public final Class<T> clazz;
public final T value;
public final TransformDirection direction;
public final Long order;
public final Boolean join;
public TransformationContainer(String alias, Class<T> clazz, TransformDirection direction, Long order) {
this.alias = alias;
this.clazz = clazz;
this.value = null;
this.direction = direction;
this.order = order;
this.join = false;
}
public TransformationContainer(String alias, Class<T> clazz, TransformDirection direction, Long order, Boolean join) {
this.alias = alias;
this.clazz = clazz;
this.value = null;
this.direction = direction;
this.order = order;
this.join = join;
}
public TransformationContainer(String alias, T value, TransformDirection direction, Long order) {
this.alias = alias;
this.clazz = (Class<T>) value.getClass();
this.value = value;
this.direction = direction;
this.order = order;
this.join = false;
}
public TransformationContainer(String alias, T value, TransformDirection direction, Long order, Boolean join) {
this.alias = alias;
this.clazz = (Class<T>) value.getClass();
this.value = value;
this.direction = direction;
this.order = order;
this.join = join;
}
public TransformationContainer(String alias, Class<T> clazz, T value, TransformDirection direction, Long order) {
this.alias = alias;
this.clazz = clazz;
this.value = value;
this.direction = direction;
this.order = order;
this.join = false;
}
public TransformationContainer(String alias, Class<T> clazz, T value, TransformDirection direction, Long order, Boolean join) {
this.alias = alias;
this.clazz = clazz;
this.value = value;
this.direction = direction;
this.order = order;
this.join = join;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof TransformationContainer)) return false;
TransformationContainer<?> that = (TransformationContainer<?>) o;
if (alias != null ? !alias.equals(that.alias) : that.alias != null) return false;
if (clazz != null ? !clazz.equals(that.clazz) : that.clazz != null) return false;
if (value != null ? !value.equals(that.value) : that.value != null) return false;
if (direction != that.direction) return false;
if (order != null ? !order.equals(that.order) : that.order != null) return false;
return join != null ? join.equals(that.join) : that.join == null;
}
@Override
public int hashCode() {
int result = alias != null ? alias.hashCode() : 0;
result = 31 * result + (clazz != null ? clazz.hashCode() : 0);
result = 31 * result + (value != null ? value.hashCode() : 0);
result = 31 * result + (direction != null ? direction.hashCode() : 0);
result = 31 * result + (order != null ? order.hashCode() : 0);
result = 31 * result + (join != null ? join.hashCode() : 0);
return result;
}
@Override
public int compareTo(TransformationContainer<T> o) {
int j = join.compareTo(o.join);
if(j != 0) return j;
return order.compareTo(o.order);
}
}