
org.javersion.object.ObjectVersionManager Maven / Gradle / Ivy
package org.javersion.object;
import static com.google.common.collect.ImmutableSet.of;
import static java.util.Arrays.asList;
import static org.javersion.core.Version.DEFAULT_BRANCH;
import java.util.Collection;
import java.util.Set;
import javax.annotation.concurrent.NotThreadSafe;
import org.javersion.core.Merge;
import org.javersion.core.Revision;
import org.javersion.core.Version;
import org.javersion.core.VersionGraph;
import org.javersion.core.VersionNode;
import org.javersion.object.types.ValueType;
import org.javersion.path.PropertyPath;
import org.javersion.path.Schema;
@NotThreadSafe
public class ObjectVersionManager {
protected VersionGraph versionGraph;
protected Set heads;
protected final ObjectSerializer serializer;
final boolean useSchemaFilter;
public ObjectVersionManager(Class clazz) {
this(new ObjectSerializer<>(clazz), false);
}
public ObjectVersionManager(ObjectSerializer serializer, boolean useSchemaFilter) {
this.serializer = serializer;
this.useSchemaFilter = useSchemaFilter;
}
public ObjectVersionManager init() {
this.versionGraph = ObjectVersionGraph.init();
return this;
}
public ObjectVersionManager init(Iterable> versions) {
return init(ObjectVersionGraph.init(versions));
}
public ObjectVersionManager init(VersionGraph versionGraph) {
this.versionGraph = versionGraph;
heads = null;
return this;
}
public ManagedObjectVersionBuilder versionBuilder(O object) {
ManagedObjectVersionBuilder builder = new ManagedObjectVersionBuilder(this, serializer.toPropertyMap(object));
builder.parents(heads);
return builder;
}
public MergeObject mergeBranches(String... branches) {
return mergeBranches(asList(branches));
}
public MergeObject mergeBranches(Collection branches) {
if (branches.isEmpty()) {
return mergeObject(versionGraph.mergeBranches(DEFAULT_BRANCH));
}
return mergeObject(versionGraph.mergeBranches(branches));
}
public MergeObject mergeRevisions(Collection revisions) {
return mergeObject(versionGraph.mergeRevisions(revisions));
}
private MergeObject mergeObject(Merge merge) {
MergeObject mergeObject = new MergeObject<>(toObject(merge), merge);
heads = merge.getMergeHeads();
return mergeObject;
}
private O toObject(Merge merge) {
return serializer.fromPropertyMap(merge.getProperties());
}
public VersionNode commit(Version version) {
versionGraph = versionGraph.commit(version);
heads = of(version.revision);
return versionGraph.getTip();
}
public VersionGraph getVersionGraph() {
return versionGraph;
}
public Set getHeads() {
return heads;
}
public VersionNode getVersionNode(Revision revision) {
return versionGraph.getVersionNode(revision);
}
public Set getBranches() {
return versionGraph.getBranches();
}
public Schema getSchema() {
return serializer.schemaRoot;
}
public boolean isEmpty() {
return versionGraph.isEmpty();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy