Files
VisualSapfor/src/_VisualDVM/Passes/Server/DeleteServerObjects.java
2025-03-13 00:32:20 +03:00

93 lines
3.4 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 _VisualDVM.Passes.Server;
import Common.Database.Database;
import Common.Database.Objects.DBObject;
import Common.Database.Objects.riDBObject;
import Common.Database.Tables.DBTable;
import _VisualDVM.Global;
import _VisualDVM.Repository.Server.RepositoryServer;
import _VisualDVM.Repository.Server.SafeServerExchangeUnit;
import _VisualDVM.Repository.Server.ServerCode;
import _VisualDVM.ServerObjectsCache.VisualCaches;
import javafx.util.Pair;
import java.util.Vector;
public class DeleteServerObjects<S extends RepositoryServer, D extends DBObject> extends RepositoryPass<S, Vector<Object>> {
protected Class<D> d; //класс объектов.
//---
public DeleteServerObjects(S server_in, Class<D> d_in) {
super(server_in);
d = d_in;
}
//---
@Override
public String getIconPath() {
return "/Common/icons/Delete.png";
}
@Override
public String getDescription() {
return getDb().getTable(d).getPluralDescription() + ": удаление";
}
@Override
public String getButtonText() {
return "";
}
//---
protected Database getDb() {
return server.db;
}
protected String getEmail() {
return null;
}
@Override
protected boolean canStart(Object... args) throws Exception {
DBTable table = getDb().getTable(d);
if (!table.getUI().CheckSelectedOrCurrent(Log))
return false;
Vector<D> selected_or_current_objects = table.getUI().getSelectedOrCurrent();
Vector<Object> res = new Vector<>(); //ключи объектов после фильтрации.
Vector<Object> forbidden = new Vector<>();
for (D object : selected_or_current_objects) {
if (object instanceof riDBObject) {
riDBObject r = (riDBObject) object;
if (Global.mainModule.getAccount().CheckAuthorship(r.sender_address, null))
res.add(r.getPK());
else
forbidden.add(r.getPK());
}
}
if (!forbidden.isEmpty()) {
Log.Writeln_("У вас нет прав на удаление " + forbidden.size() + " объектов!");
return false;
}
target = res;
return table.getUI().ShowDeleteObjectsDialog(target.size());
}
//Очищаем все связанные таблицы, чтобы не допустить перерисовки во время удаления объекта.
@Override
protected void showPreparation() throws Exception {
getDb().getTable(d).ClearUI();
for (Class dep : getDb().getTable(d).getFKDependencies().keySet()) {
switch (getDb().getTable(d).getFKDependencies().get(dep).data) {
case NONE:
case DROP:
break;
case DELETE:
getDb().getTable(dep).ClearUI();
break;
}
}
}
@Override
protected void ServerAction() throws Exception {
Command(new SafeServerExchangeUnit(ServerCode.DeleteObjectsByPK, getEmail(), new Pair<>(d, target)));
}
@Override
protected void performFinish() throws Exception {
super.performFinish();
Global.mainModule.getPass(getDb().getSynchronizePassCode()).Do();
for (Object key : target) {
VisualCaches.DeleteCache(d, key);
}
}
}