package org.mockserver.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.common.annotations.VisibleForTesting;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author jamesdbloom
*/
public abstract class ObjectWithReflectiveEqualsHashCodeToString {
@JsonIgnore
private String[] fieldsExcludedFromEqualsAndHashCode = new String[]{"logger", "fieldsExcludedFromEqualsAndHashCode"};
@JsonIgnore
@VisibleForTesting
public Logger logger = LoggerFactory.getLogger(this.getClass());
static {
ReflectionToStringBuilder.setDefaultStyle(ToStringStyle.SHORT_PREFIX_STYLE);
}
protected String[] fieldsExcludedFromEqualsAndHashCode() {
return fieldsExcludedFromEqualsAndHashCode;
}
protected void addFieldsExcludedFromEqualsAndHashCode(String... toExclude) {
fieldsExcludedFromEqualsAndHashCode = ArrayUtils.addAll(fieldsExcludedFromEqualsAndHashCode, toExclude);
}
@Override
public String toString() {
return ReflectionToStringBuilder.toStringExclude(this, fieldsExcludedFromEqualsAndHashCode());
}
@Override
public boolean equals(Object other) {
return EqualsBuilder.reflectionEquals(this, other, fieldsExcludedFromEqualsAndHashCode());
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this, fieldsExcludedFromEqualsAndHashCode());
}
}