package com.brightgenerous.orm;
import static com.brightgenerous.commons.ObjectUtils.*;
import static com.brightgenerous.orm.ICloneable.Utils.*;
import java.io.Serializable;
import com.brightgenerous.commons.EqualsUtils;
import com.brightgenerous.commons.HashCodeUtils;
import com.brightgenerous.commons.ToStringUtils;
public class Field<T extends Serializable> implements IField<T>, Clearable, EmptyChackable,
ICloneable<Field<T>>, Serializable {
private static final long serialVersionUID = -4799336684504013338L;
private final UpdatedCallback callback;
private T value;
private T notValue;
private Boolean isNull;
private Boolean isNotNull;
private String prefixValue;
private String notPrefixValue;
private String suffixValue;
private String notSuffixValue;
private String broadValue;
private String notBroadValue;
private T greaterThanValue;
private T greaterEqualValue;
private T lowerThanValue;
private T lowerEqualValue;
protected Field(UpdatedCallback callback) {
this.callback = callback;
}
@Override
public T getValue() {
return value;
}
public void setValue(T value) {
if (!equalsValueOrNull(this.value, value)) {
this.value = value;
callbackUpdated();
}
}
@Override
public T getNotValue() {
return notValue;
}
public void setNotValue(T notValue) {
if (!equalsValueOrNull(this.notValue, notValue)) {
this.notValue = notValue;
callbackUpdated();
}
}
@Override
public Boolean getIsNull() {
return isNull;
}
public void setIsNull(Boolean isNull) {
if (!equalsValueOrNull(this.isNull, isNull)) {
this.isNull = isNull;
callbackUpdated();
}
}
@Override
public Boolean getIsNotNull() {
return isNotNull;
}
public void setIsNotNull(Boolean isNotNull) {
if (!equalsValueOrNull(this.isNotNull, isNotNull)) {
this.isNotNull = isNotNull;
callbackUpdated();
}
}
@Override
public String getPrefixValue() {
return prefixValue;
}
public void setPrefixValue(String prefixValue) {
if (!equalsEscapeNull(this.prefixValue, prefixValue)) {
this.prefixValue = prefixValue;
callbackUpdated();
}
}
@Override
public String getNotPrefixValue() {
return notPrefixValue;
}
public void setNotPrefixValue(String notPrefixValue) {
if (!equalsEscapeNull(this.notPrefixValue, notPrefixValue)) {
this.notPrefixValue = notPrefixValue;
callbackUpdated();
}
}
@Override
public String getSuffixValue() {
return suffixValue;
}
public void setSuffixValue(String suffixValue) {
if (!equalsEscapeNull(this.suffixValue, suffixValue)) {
this.suffixValue = suffixValue;
callbackUpdated();
}
}
@Override
public String getNotSuffixValue() {
return notSuffixValue;
}
public void setNotSuffixValue(String notSuffixValue) {
if (!equalsEscapeNull(this.notSuffixValue, notSuffixValue)) {
this.notSuffixValue = notSuffixValue;
callbackUpdated();
}
}
@Override
public String getBroadValue() {
return broadValue;
}
public void setBroadValue(String broadValue) {
if (!equalsEscapeNull(this.broadValue, broadValue)) {
this.broadValue = broadValue;
callbackUpdated();
}
}
@Override
public String getNotBroadValue() {
return notBroadValue;
}
public void setNotBroadValue(String notBroadValue) {
if (!equalsEscapeNull(this.notBroadValue, notBroadValue)) {
this.notBroadValue = notBroadValue;
callbackUpdated();
}
}
@Override
public T getGreaterThanValue() {
return greaterThanValue;
}
public void setGreaterThanValue(T greaterThanValue) {
if (!equalsValueOrNull(this.greaterThanValue, greaterThanValue)) {
this.greaterThanValue = greaterThanValue;
callbackUpdated();
}
}
@Override
public T getGreaterEqualValue() {
return greaterEqualValue;
}
public void setGreaterEqualValue(T greaterEqualValue) {
if (!equalsValueOrNull(this.greaterEqualValue, greaterEqualValue)) {
this.greaterEqualValue = greaterEqualValue;
callbackUpdated();
}
}
@Override
public T getLowerThanValue() {
return lowerThanValue;
}
public void setLowerThanValue(T lowerThanValue) {
if (!equalsValueOrNull(this.lowerThanValue, lowerThanValue)) {
this.lowerThanValue = lowerThanValue;
callbackUpdated();
}
}
@Override
public T getLowerEqualValue() {
return lowerEqualValue;
}
public void setLowerEqualValue(T lowerEqualValue) {
if (!equalsValueOrNull(this.lowerEqualValue, lowerEqualValue)) {
this.lowerEqualValue = lowerEqualValue;
callbackUpdated();
}
}
@Override
public void clear() {
boolean changed = false;
if (value != null) {
value = null;
changed |= true;
}
if (notValue != null) {
notValue = null;
changed |= true;
}
if (isNull != null) {
isNull = null;
changed |= true;
}
if (isNotNull != null) {
isNotNull = null;
changed |= true;
}
if (prefixValue != null) {
prefixValue = null;
changed |= true;
}
if (notPrefixValue != null) {
notPrefixValue = null;
changed |= true;
}
if (suffixValue != null) {
suffixValue = null;
changed |= true;
}
if (notSuffixValue != null) {
notSuffixValue = null;
changed |= true;
}
if (broadValue != null) {
broadValue = null;
changed |= true;
}
if (notBroadValue != null) {
notBroadValue = null;
changed |= true;
}
if (greaterThanValue != null) {
greaterThanValue = null;
changed |= true;
}
if (greaterEqualValue != null) {
greaterEqualValue = null;
changed |= true;
}
if (lowerThanValue != null) {
lowerThanValue = null;
changed |= true;
}
if (lowerEqualValue != null) {
lowerEqualValue = null;
changed |= true;
}
if (changed) {
callbackUpdated();
}
}
@Override
public boolean isEmpty() {
return (getValue() == null) && (getNotValue() == null) && (getIsNull() == null)
&& (getIsNotNull() == null) && (getPrefixValue() == null)
&& (getNotPrefixValue() == null) && (getSuffixValue() == null)
&& (getNotSuffixValue() == null) && (getBroadValue() == null)
&& (getNotBroadValue() == null) && (getGreaterThanValue() == null)
&& (getGreaterEqualValue() == null) && (getLowerThanValue() == null)
&& (getLowerEqualValue() == null);
}
@Override
public Field<T> clone() {
Field<T> ret;
try {
ret = (Field<T>) super.clone();
} catch (CloneNotSupportedException e) {
throw new InternalError(e.getMessage());
}
ret.value = getIfClone(value);
ret.notValue = getIfClone(notValue);
ret.isNull = getIfClone(isNull);
ret.isNotNull = getIfClone(isNotNull);
ret.prefixValue = getIfClone(prefixValue);
ret.notPrefixValue = getIfClone(notPrefixValue);
ret.suffixValue = getIfClone(suffixValue);
ret.notSuffixValue = getIfClone(notSuffixValue);
ret.broadValue = getIfClone(broadValue);
ret.notBroadValue = getIfClone(notBroadValue);
ret.greaterThanValue = getIfClone(greaterThanValue);
ret.greaterEqualValue = getIfClone(greaterEqualValue);
ret.lowerThanValue = getIfClone(lowerThanValue);
ret.lowerEqualValue = getIfClone(lowerEqualValue);
return ret;
}
private void callbackUpdated() {
if (callback != null) {
callback.updated();
}
}
@Override
public int hashCode() {
if (HashCodeUtils.resolved()) {
return HashCodeUtils.hashCodeAlt(null, this);
}
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
if (EqualsUtils.resolved()) {
return EqualsUtils.equalsAlt(null, this, obj);
}
return super.equals(obj);
}
@Override
public String toString() {
if (ToStringUtils.resolved()) {
return ToStringUtils.toStringAlt(this);
}
return super.toString();
}
public IField<Object> getWrap() {
return new FieldWrapper(this);
}
static class FieldWrapper implements IField<Object>, Serializable {
private static final long serialVersionUID = 6921835409204919730L;
private final Field<? extends Serializable> deleg;
public FieldWrapper(Field<? extends Serializable> deleg) {
this.deleg = deleg;
}
@Override
public Object getValue() {
return deleg.getValue();
}
@Override
public Object getNotValue() {
return deleg.getNotValue();
}
@Override
public Boolean getIsNull() {
return deleg.getIsNull();
}
@Override
public Boolean getIsNotNull() {
return deleg.getIsNotNull();
}
@Override
public String getPrefixValue() {
return deleg.getPrefixValue();
}
@Override
public String getNotPrefixValue() {
return deleg.getNotPrefixValue();
}
@Override
public String getSuffixValue() {
return deleg.getSuffixValue();
}
@Override
public String getNotSuffixValue() {
return deleg.getNotSuffixValue();
}
@Override
public String getBroadValue() {
return deleg.getBroadValue();
}
@Override
public String getNotBroadValue() {
return deleg.getNotBroadValue();
}
@Override
public Object getGreaterThanValue() {
return deleg.getGreaterThanValue();
}
@Override
public Object getGreaterEqualValue() {
return deleg.getGreaterEqualValue();
}
@Override
public Object getLowerThanValue() {
return deleg.getLowerThanValue();
}
@Override
public Object getLowerEqualValue() {
return deleg.getLowerEqualValue();
}
}
}