
net.intelie.liverig.plugin.widgets.DisplayUnitsService Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of plugin-assets Show documentation
Show all versions of plugin-assets Show documentation
Asset framework for industries solutions
The newest version!
package net.intelie.liverig.plugin.widgets;
import net.intelie.live.EntityContext;
import net.intelie.live.LiveJson;
import net.intelie.live.SettingsNode;
import net.intelie.live.SettingsOptions;
import net.intelie.liverig.plugin.settings.SettingLogData;
import net.intelie.liverig.plugin.settings.SettingLogReader;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
public class DisplayUnitsService {
private static final Logger LOGGER = LoggerFactory.getLogger(DisplayUnitsService.class);
private static final String DISPLAY_UNITS_PATH = "display-units";
private static final String ENTITIES_PATH = "display-units";
private static final String ID_PATH = "display-units-id";
private final SettingsNode entitiesSettings;
private final SettingsNode idSettings;
private final EntityContext entityContext;
private Map cache = new ConcurrentHashMap<>();
private Map> displayUnitDataCache = new ConcurrentHashMap<>();
public DisplayUnitsService(@NotNull SettingsNode node, @NotNull EntityContext entityContext) {
SettingsNode settingsHome = node.cd(DISPLAY_UNITS_PATH);
this.entitiesSettings = settingsHome.cd(ENTITIES_PATH);
this.idSettings = settingsHome.cd(ID_PATH);
this.entityContext = entityContext;
}
@NotNull
private SettingLogReader getSettingLogReader(@NotNull String id) {
return new SettingLogReader(entityContext, entitiesSettings.cd(id));
}
@NotNull
public Collection getLogsForId(@NotNull String id) {
return getSettingLogReader(id).loggedSettingsExact().map(SettingLogData::new).collect(Collectors.toList());
}
public List getList() {
return entitiesSettings.children().stream()
.filter(Objects::nonNull)
.map(s -> s.get(DisplayUnit.class))
.collect(Collectors.toList());
}
public DisplayUnit get(@NotNull String id) {
return cache.computeIfAbsent(id, (key) -> entitiesSettings.cd(key).get(DisplayUnit.class));
}
Map getDisplayUnitDataForMnemonic(String id, String mnemonic) {
return displayUnitDataCache.computeIfAbsent(id, (idKey) -> new ConcurrentHashMap<>()).computeIfAbsent(mnemonic, (mnemonicKey) -> {
DisplayUnitData dataForMnemonic = get(id).getDataForMnemonic(mnemonicKey);
return LiveJson.fromJson(LiveJson.toJson(dataForMnemonic), Map.class);
});
}
private void invalidateCache(@NotNull String id) {
cache.remove(id);
displayUnitDataCache.remove(id);
}
public Boolean delete(@NotNull String id) {
DisplayUnit displayUnit = get(id);
invalidateCache(id);
entitiesSettings.cd(id).delete();
return displayUnit != null;
}
public List getSimpleList() {
return entitiesSettings.children().stream()
.filter(Objects::nonNull)
.map(s -> s.get(DisplayUnit.class)).filter(Objects::nonNull)
.peek(s -> s.setData(null))
.collect(Collectors.toList());
}
public DisplayUnit save(@NotNull DisplayUnit displayUnit) {
if (displayUnit.getId() == null) {
displayUnit.setId(nextId());
}
String id = displayUnit.getId().toString();
SettingsNode cd = entitiesSettings.cd(id);
cd.set(displayUnit);
invalidateCache(id);
cache.put(id, displayUnit);
LOGGER.debug("Display unit saved: {}", displayUnit);
return displayUnit;
}
@NotNull
private Long nextId() {
synchronized (idSettings) {
return idSettings.withOptions(new SettingsOptions().enableLog(false), () -> {
Long id = idSettings.get(Long.class);
if (id == null || id == 0)
id = 1L;
idSettings.set(id + 1);
return id;
});
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy