Skip to content

Instantly share code, notes, and snippets.

@junwen12221
Created October 23, 2021 15:46
Show Gist options
  • Save junwen12221/d2a0972968cf36be2d049b78baccc3d0 to your computer and use it in GitHub Desktop.
Save junwen12221/d2a0972968cf36be2d049b78baccc3d0 to your computer and use it in GitHub Desktop.
package io.mycat.sqlhandler.config;
import io.mycat.config.DatasourceConfig;
import io.mycat.config.KVObject;
import io.mycat.util.JsonUtil;
import io.vertx.core.json.Json;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
public class DbKVImpl<T extends KVObject> implements KV<T> {
final DatasourceConfig datasourceConfig;
private String path;
final Class aClass;
public DbKVImpl(DatasourceConfig datasourceConfig, String path, Class aClass) {
this.datasourceConfig = datasourceConfig;
this.path = path;
this.aClass = aClass;
}
@Override
public Optional<T> get(String key) {
Config config = DbStorageManagerImpl.readConfig(datasourceConfig);
Map<String, String> stringStringMap = config.config.get(this.path);
if (stringStringMap == null) return null;
Optional<String> sOptional = Optional.ofNullable(stringStringMap.get(key));
if (sOptional.isPresent()){
String s = sOptional.get();
return Optional.of((T)JsonUtil.from(s, aClass));
}
return Optional.empty();
}
@Override
public void removeKey(String key) {
Config config = DbStorageManagerImpl.readConfig(datasourceConfig);
Map<String, String> stringStringMap = new HashMap<>(config.config.getOrDefault(this.path, Collections.emptyMap()));
stringStringMap.remove(key);
config.config.put(this.path,stringStringMap);
DbStorageManagerImpl.removeBy(datasourceConfig,config.version);
DbStorageManagerImpl.writeString(datasourceConfig, config.config);
}
@Override
public void put(String key, T value) {
Config config = DbStorageManagerImpl.readConfig(datasourceConfig);
Map<String, String> stringStringMap = new HashMap<>(config.config.getOrDefault(this.path, Collections.emptyMap()));
stringStringMap.put(key, Json.encode(value));
config.config.put(this.path,stringStringMap);
DbStorageManagerImpl.writeString(datasourceConfig, config.config);
}
@Override
public List<T> values() {
Config config = DbStorageManagerImpl.readConfig(datasourceConfig);
Map<String, String> stringStringMap = config.config.getOrDefault(this.path, Collections.emptyMap());
return (List) stringStringMap.values().stream().map(i -> JsonUtil.from(i, aClass)).collect(Collectors.toList());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment