package org.javersion.json.web; import static java.util.Arrays.asList; import static org.javersion.json.web.JsonStoreConfig.UnreferencedUpdateStrategy.BRANCH_HEADS; import static org.javersion.json.web.JsonStoreConfig.UnreferencedUpdateStrategy.TOP; import java.util.List; import org.javersion.core.Revision; import org.javersion.core.VersionGraph; import org.javersion.core.VersionNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; public class JsonStoreConfig { public List<UnreferencedUpdateStrategy> unreferencedUpdateStrategy = ImmutableList.of( BRANCH_HEADS, TOP ); public static enum UnreferencedUpdateStrategy { TIP { @Override Iterable<Revision> getParents(VersionGraph<?, ?, ?, ?, ?> versionGraph, String branch) { VersionNode<?, ?, ?> tip = versionGraph.getTip(); if (tip == null) { return null; } return asList(tip.getRevision()); } }, BRANCH_HEAD { @Override Iterable<Revision> getParents(VersionGraph<?, ?, ?, ?, ?> versionGraph, String branch) { VersionNode<?, ?, ?> branchHead = versionGraph.getHead(branch); if (branchHead != null) { return asList(branchHead.getRevision()); } else { return null; } } }, BRANCH_HEADS { @Override Iterable<Revision> getParents(VersionGraph<?, ?, ?, ?, ?> versionGraph, String branch) { Iterable<? extends VersionNode<?, ?, ?>> heads = versionGraph.getHeads(branch); if (heads.iterator().hasNext()) { return Iterables.transform(heads, n -> n.getRevision()); } else { return null; } } }, TOP { @Override Iterable<Revision> getParents(VersionGraph<?, ?, ?, ?, ?> versionGraph, String branch) { return asList(); } }; abstract Iterable<Revision> getParents(VersionGraph<?, ?, ?, ?, ?> versionGraph, String branch); } }