Properly update state on children refresh

This commit is contained in:
crschnick
2023-12-08 04:39:44 +00:00
parent 0a8881a9cf
commit bdcc6a1295
7 changed files with 37 additions and 10 deletions
@@ -27,4 +27,13 @@ public class ShellStoreState extends DataStoreState implements OsNameState {
public boolean isRunning() {
return running != null ? running : false;
}
@Override
public void merge(DataStoreState newer) {
var shellStoreState = (ShellStoreState) newer;
osType = useNewer(osType, shellStoreState.getOsType());
osName = useNewer(osName, shellStoreState.getOsName());
shellDialect = useNewer(shellDialect, shellStoreState.getShellDialect());
running = useNewer(running, shellStoreState.getRunning());
}
}
@@ -5,10 +5,16 @@ import lombok.SneakyThrows;
import lombok.experimental.SuperBuilder;
@SuperBuilder
public class DataStoreState {
public abstract class DataStoreState {
public DataStoreState() {}
protected static <T> T useNewer(T older, T newer) {
return newer != null ? newer : older;
}
public abstract void merge(DataStoreState newer);
@SneakyThrows
public String toString() {
var tree = JacksonMapper.getDefault().valueToTree(this);
@@ -20,7 +20,7 @@ public abstract class DataStateProvider {
return INSTANCE;
}
public abstract void setState(DataStore store, Object value);
public abstract void setState(DataStore store, DataStoreState value);
public abstract <T extends DataStoreState> T getState(DataStore store, Supplier<T> def);