Files
VisualSapfor/src/Common/MainModule_.java
2024-10-14 12:54:52 +03:00

118 lines
4.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package Common;
import Common.Database.Objects.PassStats.PassStats;
import Common.Database.Objects.iDBObject;
import Common.Database.VisualiserDatabase;
import Common.Passes.Pass;
import Common.Passes.PassCode_;
import Common.Utils.TextLog;
import Common.Visual.Windows.PassForm;
import _VisualDVM.Current;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.Vector;
//Основной объект визуализатора.
public abstract class MainModule_<D extends VisualiserDatabase> {
public static MainModule_ object = null; //текущий экземпляр. всегда один.
//--
D db;
Class<D> db_class;
LinkedHashMap<Current_, Object> objects; //Current
//--
LinkedHashMap<PassCode_, Pass> passes;
//--
public MainModule_(Class<D> db_class_in) {
objects = new LinkedHashMap<>();
createPasses();
try {
db_class = db_class_in;
} catch (Exception ex) {
ex.printStackTrace();
}
//---
object = this;
System.out.println("main module created");
}
//БАЗА ДАННЫХ И ТЕКУЩИЕ ОБЪЕКТЫ
public D getDb() {
return db;
}
public void ActivateDB() throws Exception {
db = db_class.newInstance();
db.Connect();
db.CreateAllTables();
db.prepareTablesStatements();
db.Synchronize();
}
public void DeactivateDB() throws Exception {
if (db != null) db.Disconnect();
}
public Object get(Current_ name) {
if (!objects.containsKey(name))
objects.put(name, null);
return objects.get(name);
}
public Object set(Current_ name, Object object) {
if (objects.containsKey(name))
objects.replace(name, object);
else objects.put(name, object);
return object;
}
public boolean Check(TextLog Log, Current_... names) {
for (Current_ name : names)
if (get(name) == null)
Log.Writeln_(name.getDescription() + " не выбран(а)");
return Log.isEmpty();
}
public boolean matchCurrentID(Current_ name, int id) {
return (get(name) != null) && (((iDBObject) get(name)).id == id);
}
//ПРОХОДЫ
public abstract Class getPassCodesEnum();
public abstract String getAllPassesClassPrefix();
private void createPasses() {
passes = new LinkedHashMap<>();
for (Object code : getPassCodesEnum().getEnumConstants()) {
try {
Class<?> clazz = Class.forName(getAllPassesClassPrefix() + code.toString());
Pass pass = ((Pass) clazz.newInstance());
passes.put((PassCode_) code, pass);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public void setPassesControlsVisible(boolean flag, PassCode_... codes_in) {
for (PassCode_ code_in : codes_in)
getPass(code_in).setControlsVisible(flag);
}
public boolean HasPassForm() {
return get(Current.PassForm) != null;
}
public PassForm getPassForm() {
return (PassForm) get(Current.PassForm);
}
public Pass getPass(PassCode_ code) {
return passes.get(code);
}
public String getPassDescription(String passName) {
return ((PassCode_) Enum.valueOf(MainModule_.object.getPassCodesEnum(), passName)).getDescription();
}
public Vector<Pass> getFirstAccessPasses() {
Vector<PassStats> sortedStats = new Vector<>(getDb().passStats.Data.values());
sortedStats.sort(new Comparator<PassStats>() {
@Override
public int compare(PassStats o1, PassStats o2) {
return Integer.compare(o2.Usages, o1.Usages);
}
});
Vector<Pass> res = new Vector<>();
for (PassStats passStats : sortedStats) {
PassCode_ passCode = (PassCode_) Enum.valueOf(getPassCodesEnum(), passStats.code);
res.add(getPass(passCode));
}
return res;
}
//---
}