package org.javers.core.commit;
import org.javers.common.exception.JaversException;
import org.javers.common.exception.JaversExceptionCode;
import org.javers.core.JaversCoreConfiguration;
import org.javers.repository.api.JaversExtendedRepository;
import static org.javers.core.CommitIdGenerator.RANDOM;
import static org.javers.core.CommitIdGenerator.SYNCHRONIZED_SEQUENCE;
class CommitIdFactory {
private final JaversCoreConfiguration javersCoreConfiguration;
private final JaversExtendedRepository javersRepository;
private final CommitSeqGenerator commitSeqGenerator;
private final DistributedCommitSeqGenerator distributedCommitSeqGenerator;
CommitIdFactory(JaversCoreConfiguration javersCoreConfiguration, JaversExtendedRepository javersRepository, CommitSeqGenerator commitSeqGenerator, DistributedCommitSeqGenerator distributedCommitSeqGenerator) {
this.javersCoreConfiguration = javersCoreConfiguration;
this.javersRepository = javersRepository;
this.commitSeqGenerator = commitSeqGenerator;
this.distributedCommitSeqGenerator = distributedCommitSeqGenerator;
}
CommitId nextId() {
if (javersCoreConfiguration.getCommitIdGenerator().equals(SYNCHRONIZED_SEQUENCE)) {
CommitId head = javersRepository.getHeadId();
return commitSeqGenerator.nextId(head);
}
if (javersCoreConfiguration.getCommitIdGenerator().equals(RANDOM)) {
return distributedCommitSeqGenerator.nextId();
}
throw new JaversException(JaversExceptionCode.NOT_IMPLEMENTED);
}
}