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

net.intelie.liverig.plugin.settings.SettingLogReader Maven / Gradle / Ivy

The newest version!
package net.intelie.liverig.plugin.settings;

import net.intelie.live.*;
import net.intelie.live.model.SettingLog;
import net.intelie.live.queries.AllSettingLogs;
import net.intelie.live.util.PathUtils;
import org.hibernate.criterion.Conjunction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.stream.Stream;

public class SettingLogReader {
    private final String settingsPathId;
    private final EntityContext context;
    private final SettingsNode settingsNode;

    public SettingLogReader(@NotNull EntityContext entityContext, @NotNull SettingsNode settingsNode) {
        this.context = entityContext;
        this.settingsPathId = settingsNode.path();
        this.settingsNode = settingsNode;
    }

    private void flush() {
        settingsNode.flush();
    }

    @NotNull
    public Stream loggedSettingsPrefix(@Nullable Integer page, @Nullable Integer pageSize) {
        flush();

        int startingLevel = PathUtils.level(settingsPathId);
        CriteriaSpecificationBase spec = new AllSettingLogs()
                .byIdPrefixAndLevel(settingsPathId, startingLevel, Integer.MAX_VALUE)
                .orderByDescending("dateCreated");

        if (pageSize != null)
            spec = spec
                    .pageSize(pageSize)
                    .page(page == null ? 0 : page);
        else if (page != null)
            spec = spec.page(page);

        return context.find(spec).stream();
    }

    @NotNull
    public Stream loggedSettingsExact() {
        flush();

        int level = PathUtils.level(settingsPathId);
        EntityList settingLogs = context.find(new AllSettingLogs()
                .byIdPrefixAndLevel(settingsPathId, level, level)
                .orderByDescending("dateCreated"));
        return settingLogs.stream();
    }

    @Nullable
    public  T loggedSettingsById(Integer id, Class cls) {
        // No need to flush here; the only way to obtain the id is if the setting had been flushed earlier.

        InnerSpecification spec = new InnerSpecification<>(SettingLog.class).where(
                new Conjunction()
                        .add(Restrictions.like("settingId", settingsPathId, MatchMode.START))
                        .add(Restrictions.eq("id", id)
                        ));

        SettingLog settingLog = context.findOneOf(new CriteriaSpecificationBase<>(spec));
        return settingLog != null ? LiveJson.fromJson(settingLog.getNewValue(), cls) : null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy