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

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

The newest version!
package org.javersion.object;

import java.util.Map;

import javax.annotation.concurrent.NotThreadSafe;

import org.javersion.core.Revision;
import org.javersion.core.Version;
import org.javersion.core.VersionNode;
import org.javersion.path.PropertyPath;
import org.javersion.path.SchemaPathFilter;

@NotThreadSafe
public class ManagedObjectVersionBuilder extends Version.BuilderBase> {

    private final ObjectVersionManager manager;

    private final Map newProperties;

    private Iterable rebaseOn;

    public ManagedObjectVersionBuilder(ObjectVersionManager manager, Map newProperties) {
        this.manager = manager;
        this.newProperties = newProperties;
    }

    public ObjectVersion build(boolean commit) {
        if (manager.useSchemaFilter) {
            changeset(newProperties, manager.getVersionGraph(), new SchemaPathFilter(manager.getSchema()));
        } else {
            changeset(newProperties, manager.getVersionGraph());
        }
        if (rebaseOn != null) {
            parents(rebaseOn);
        }
        ObjectVersion version = new ObjectVersion<>(this);
        if (commit) {
            manager.commit(version);
        }
        return version;
    }

    public ManagedObjectVersionBuilder rebaseOn(Iterable revisions) {
        this.rebaseOn = revisions;
        return this;
    }

    @Override
    public ObjectVersion build() {
        return build(true);
    }

    public VersionNode buildVersionNode() {
        ObjectVersion version = build(true);
        return manager.getVersionNode(version.revision);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy