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

org.javers.repository.sql.JaversSqlRepository Maven / Gradle / Ivy

There is a newer version: 7.6.2
Show newest version
package org.javers.repository.sql;

import org.javers.common.collections.Optional;
import org.javers.common.exception.JaversException;
import org.javers.common.exception.JaversExceptionCode;
import org.javers.core.commit.Commit;
import org.javers.core.commit.CommitId;
import org.javers.core.json.JsonConverter;
import org.javers.core.metamodel.object.CdoSnapshot;
import org.javers.core.metamodel.object.GlobalId;
import org.javers.core.metamodel.type.EntityType;
import org.javers.core.metamodel.type.ManagedType;
import org.javers.repository.api.JaversRepository;
import org.javers.repository.sql.finders.CdoSnapshotFinder;
import org.javers.repository.sql.reposiotries.CdoSnapshotRepository;
import org.javers.repository.sql.reposiotries.CommitMetadataRepository;
import org.javers.repository.sql.reposiotries.GlobalIdRepository;
import org.javers.repository.sql.schema.JaversSchemaManager;

import java.util.List;

public class JaversSqlRepository implements JaversRepository {

    private final CommitMetadataRepository commitRepository;
    private final GlobalIdRepository globalIdRepository;
    private final CdoSnapshotRepository cdoSnapshotRepository;
    private final CdoSnapshotFinder finder;
    private final JaversSchemaManager schemaManager;

    public JaversSqlRepository(CommitMetadataRepository commitRepository, GlobalIdRepository globalIdRepository, CdoSnapshotRepository cdoSnapshotRepository, CdoSnapshotFinder finder, JaversSchemaManager schemaManager) {
        this.commitRepository = commitRepository;
        this.globalIdRepository = globalIdRepository;
        this.cdoSnapshotRepository = cdoSnapshotRepository;
        this.finder = finder;
        this.schemaManager = schemaManager;
    }

    @Override
    public Optional getLatest(GlobalId globalId) {
        return finder.getLatest(globalId);
    }

    @Override
    public void persist(Commit commit) {
        if (commitRepository.isPersisted(commit)) {
            throw new JaversException(JaversExceptionCode.CANT_SAVE_ALREADY_PERSISTED_COMMIT, commit.getId());
        }

        long commitPk = commitRepository.save(commit.getAuthor(), commit.getCommitDate(), commit.getId());
        cdoSnapshotRepository.save(commitPk, commit.getSnapshots());
    }

    @Override
    public CommitId getHeadId() {
        return commitRepository.getCommitHeadId();
    }

    @Override
    public void setJsonConverter(JsonConverter jsonConverter) {
        globalIdRepository.setJsonConverter(jsonConverter);
        cdoSnapshotRepository.setJsonConverter(jsonConverter);
        finder.setJsonConverter(jsonConverter);
        commitRepository.setJsonConverter(jsonConverter);
    }

    @Override
    public void ensureSchema() {
        schemaManager.ensureSchema();
    }

    @Override
    public List getStateHistory(GlobalId globalId, int limit) {
        return finder.getStateHistory(globalId, Optional.empty(), limit);
    }

    @Override
    public List getPropertyStateHistory(GlobalId globalId, String propertyName, int limit) {
        return finder.getStateHistory(globalId, Optional.of(propertyName), limit);
    }

    @Override
    public List getStateHistory(ManagedType givenClass, int limit) {
        return finder.getStateHistory(givenClass, Optional.empty(), limit);
    }

    @Override
    public List getPropertyStateHistory(ManagedType givenClass, String propertyName, int limit) {
        return finder.getStateHistory(givenClass, Optional.of(propertyName), limit);
    }

    @Override
    public List getValueObjectStateHistory(EntityType ownerEntity, String path, int limit) {
        return finder.getVOStateHistory(ownerEntity, path, limit);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy