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 extends RepositoryPass> { protected Class d; //класс объектов. //--- public DeleteServerObjects(S server_in, Class 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 selected_or_current_objects = table.getUI().getSelectedOrCurrent(); Vector res = new Vector<>(); //ключи объектов после фильтрации. Vector 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); } } }