package Common.UI.VisualCache; import Common.Database.DBObject; import TestingSystem.Common.Configuration.Configuration; import TestingSystem.Common.TestingPackage.TestingPackage; import java.util.LinkedHashMap; //нужен для серверных объектов, чтобы в сокет не класть лишнего. public class VisualCaches { static LinkedHashMap> allData = new LinkedHashMap<>(); static LinkedHashMap getDataForClass(Class class_) { LinkedHashMap 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 Configuration) return new ConfigurationCache((Configuration) object); if (object instanceof TestingPackage) return new PackageCache((TestingPackage) object); return new VisualCache(); } public static VisualCache GetCache(DBObject object) { VisualCache res = null; LinkedHashMap 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 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 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()); } } }