001 002package io.vrap.rmf.base.client; 003 004import java.time.ZonedDateTime; 005import java.util.HashSet; 006import java.util.Set; 007 008import org.apache.commons.lang3.builder.RecursiveToStringStyle; 009import org.apache.commons.lang3.builder.ReflectionToStringBuilder; 010import org.apache.commons.lang3.builder.ToStringStyle; 011 012public interface ModelBase { 013 014 class FilteredRecursiveToStringStyle extends RecursiveToStringStyle { 015 static Set<Class<?>> filter; 016 static { 017 filter = new HashSet<>(); 018 filter.add(ZonedDateTime.class); 019 filter.add(Enum.class); 020 } 021 022 public FilteredRecursiveToStringStyle() { 023 this.setUseShortClassName(true); 024 this.setUseIdentityHashCode(false); 025 } 026 027 @Override 028 protected boolean accept(Class<?> clazz) { 029 return filter.stream().noneMatch(aClass -> aClass.isAssignableFrom(clazz)); 030 } 031 } 032 033 default public String reflectionString() { 034 return ReflectionToStringBuilder.reflectionToString(this, new FilteredRecursiveToStringStyle()); 035 } 036 037 default public String reflectionString(ToStringStyle toStringStyle) { 038 return ReflectionToStringBuilder.reflectionToString(this, toStringStyle); 039 } 040 041 static ModelBase asModelBase(Object object) { 042 if (!(object instanceof ModelBase)) { 043 throw new IllegalArgumentException("argument must be of type " + ModelBase.class); 044 } 045 return (ModelBase) object; 046 } 047 048 static String reflectionString(Object object) { 049 return ReflectionToStringBuilder.reflectionToString(object, new FilteredRecursiveToStringStyle()); 050 } 051 052 static String reflectionString(Object object, ToStringStyle toStringStyle) { 053 return ReflectionToStringBuilder.reflectionToString(object, toStringStyle); 054 } 055}