package sk.stuba.fiit.perconik.activity.serializers;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Nullable;
import sk.stuba.fiit.perconik.data.AnyStructuredData;
import sk.stuba.fiit.perconik.data.content.StructuredContent;
import static java.lang.System.identityHashCode;
import static com.google.common.collect.Lists.newArrayListWithExpectedSize;
import static sk.stuba.fiit.perconik.data.content.StructuredContents.key;
import static sk.stuba.fiit.perconik.utilities.MoreLists.newArrayListSuitableFor;
// TODO remove all (most of) serialization from listeners?
public final class Serializations {
private Serializations() {}
public static StructuredContent newStructuredContent() {
return new AnyStructuredData();
}
public static <T> List<T> newEmptyListSuitableFor(final Iterable<?> iterable) {
return newArrayListSuitableFor(iterable);
}
public static <T> List<T> newEmptyListSuitableFor(@SuppressWarnings("unused") final Iterator<?> iterator) {
return newArrayListWithExpectedSize(16);
}
public static StructuredContent identifyObject(@Nullable final Object object) {
if (object == null) {
return null;
}
StructuredContent content = newStructuredContent();
putObjectIdentity(content, object);
return content;
}
public static StructuredContent describeObject(@Nullable final Object object) {
if (object == null) {
return null;
}
StructuredContent content = newStructuredContent();
putObjectDescription(content, object);
return content;
}
public static void putObjectIdentity(final StructuredContent content, final Object object) {
content.put(key("class"), object.getClass().getName());
content.put(key("hash", "identity"), identityHashCode(object));
content.put(key("hash", "implementation"), object.hashCode());
}
public static void putObjectDescription(final StructuredContent content, final Object object) {
putObjectIdentity(content, object);
content.put(key("string"), object.toString());
}
}