package org.javers.core.snapshot;
import org.javers.common.string.ShaDigest;
import org.javers.core.graph.LiveCdoFactory;
import org.javers.core.json.JsonConverter;
import org.javers.core.metamodel.object.CdoSnapshotState;
import org.javers.core.metamodel.object.CdoWrapper;
/**
* @author bartosz.walacik
*/
public class ObjectHasher {
private final SnapshotFactory snapshotFactory;
private final JsonConverter jsonConverter;
private final LiveCdoFactory liveCdoFactory;
public ObjectHasher(SnapshotFactory snapshotFactory, JsonConverter jsonConverter, LiveCdoFactory liveCdoFactory) {
this.snapshotFactory = snapshotFactory;
this.jsonConverter = jsonConverter;
this.liveCdoFactory = liveCdoFactory;
}
public String hash(Object object) {
CdoWrapper cdo = liveCdoFactory.create(object, null);
CdoSnapshotState state = snapshotFactory.createSnapshotState(cdo);
String jsonState = jsonConverter.toJson(state);
return ShaDigest.longDigest(jsonState);
}
}