package org.javers.shadow; import org.javers.core.commit.CommitMetadata; import org.javers.core.json.JsonConverter; import org.javers.core.metamodel.object.CdoSnapshot; import org.javers.core.metamodel.object.GlobalId; import org.javers.core.metamodel.type.TypeMapper; import java.util.function.BiFunction; import java.util.function.Function; /** * @author bartosz.walacik */ public class ShadowFactory { private final JsonConverter jsonConverter; private final TypeMapper typeMapper; public ShadowFactory(JsonConverter jsonConverter, TypeMapper typeMapper) { this.jsonConverter = jsonConverter; this.typeMapper = typeMapper; } public Shadow createShadow(CdoSnapshot cdoSnapshot, CommitMetadata rootContext, BiFunction<CommitMetadata, GlobalId, CdoSnapshot> referenceResolver) { ShadowGraphBuilder builder = new ShadowGraphBuilder(jsonConverter, referenceResolver, typeMapper, rootContext); return new Shadow(rootContext, builder.buildDeepShadow(cdoSnapshot)); } Object createShadow(CdoSnapshot cdoSnapshot) { return createShadow(cdoSnapshot, cdoSnapshot.getCommitMetadata(), (source, target) -> null).get(); } Object createShadow(CdoSnapshot cdoSnapshot, BiFunction<CommitMetadata, GlobalId, CdoSnapshot> referenceResolver) { return createShadow(cdoSnapshot, cdoSnapshot.getCommitMetadata(), referenceResolver).get(); } }