Files
VisualSapfor/src/_VisualDVM/ServerObjectsCache/VisualCaches.java
2024-10-09 22:21:57 +03:00

72 lines
3.2 KiB
Java

package _VisualDVM.ServerObjectsCache;
import Common.Database.Objects.DBObject;
import _VisualDVM.TestingSystem.Common.Configuration.Configuration;
import _VisualDVM.TestingSystem.Common.TestingPackage.TestingPackage;
import _VisualDVM.TestingSystem.DVM.DVMConfiguration.DVMConfiguration;
import _VisualDVM.TestingSystem.SAPFOR.SapforConfiguration.SapforConfiguration;
import java.util.LinkedHashMap;
//нужен для серверных объектов, чтобы в сокет не класть лишнего.
public class VisualCaches {
static LinkedHashMap<Class, LinkedHashMap<Object, VisualCache>> allData = new LinkedHashMap<>();
static LinkedHashMap<Object, VisualCache> getDataForClass(Class class_) {
LinkedHashMap<Object, VisualCache> data;
if (allData.containsKey(class_)) {
data = allData.get(class_);
} else {
data = new LinkedHashMap<>();
allData.put(class_, data);
}
return data;
}
//чтобы не трогать сами объекты и не сбить сериализацию
static VisualCache createCache(Object object) {
if (object instanceof SapforConfiguration)
return new SapforConfigurationCache((Configuration) object);
if (object instanceof DVMConfiguration)
return new DVMConfigurationCache((Configuration) object);
if (object instanceof TestingPackage)
return new PackageCache((TestingPackage) object);
return new VisualCache();
}
public static VisualCache GetCache(DBObject object) {
VisualCache res = null;
LinkedHashMap<Object, VisualCache> data = getDataForClass(object.getClass());
if (!data.containsKey(object.getPK())) {
// System.out.println("get visual cache for " + object.getPK()+" "+object.getClass());
// System.out.println("cache not found, creating...");
data.put(object.getPK(), res = createCache(object));
} else {
// System.out.println("cache found");
res = data.get(object.getPK());
}
return res;
}
//Принудительно удалить старый и записать новый.
public static void RefreshCache(DBObject object){
// System.out.println("refresh cache for " + object.getPK()+" "+object.getClass().getSimpleName());
LinkedHashMap<Object, VisualCache> data = getDataForClass(object.getClass());
//--
if (data.containsKey(object.getPK())) {
data.remove(object.getPK());
}
data.put(object.getPK(), createCache(object));
}
public static void DeleteCache(DBObject object){
DeleteCache(object.getClass(), object.getPK());
}
public static void DeleteCache(Class class_, Object pk){
// System.out.println("Delete cache for " + pk+" "+class_);
LinkedHashMap<Object, VisualCache> data = getDataForClass(class_);
if (data.containsKey(pk))
data.remove(pk);
}
public static void Print(){
System.out.println("alldata size="+allData.size());
for (Class class_: allData.keySet()){
System.out.println("class="+class_.getSimpleName()+" size="+allData.get(class_).size());
}
}
}