All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.javersion.object.ObjectVersionManager Maven / Gradle / Ivy

There is a newer version: 0.15.3
Show newest version
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