
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