package Common.Passes; import Common.Database.Objects.DBObject; public abstract class DeleteObjectsPass extends ObjectsPass { public DeleteObjectsPass(Class d_in) { super(d_in); } public String getDescription_() { return "удаление"; } @Override public String getIconPath() { return "/Common/icons/Delete.png"; } @Override protected boolean canStart(Object... args) throws Exception { if (!getTable().getUI().CheckSelectedOrCurrent(Log)) return false; target = getTable().getUI().getSelectedOrCurrent(); return getTable().getUI().ShowDeleteObjectsDialog(target.size()); } //Очищаем все связанные таблицы, чтобы не допустить перерисовки во время удаления объекта. @Override protected void showPreparation() throws Exception { getTable().ClearUI(); for (Class dep : getTable().getFKDependencies().keySet()) { switch (getTable().getFKDependencies().get(dep).data) { case NONE: case DROP: break; case DELETE: getDb().getTable(dep).ClearUI(); break; } } } @Override protected void body() throws Exception { for (D d : target) { getDb().Delete(d); for (Class dep : getTable().getFKDependencies().keySet()) { switch (getTable().getFKDependencies().get(dep).data) { case NONE: break; case DROP: getDb().DropByFK(d, dep); break; case DELETE: getDb().DeleteByFK(d, dep); break; } } } } @Override protected void showFinish() throws Exception { getTable().ShowUI(); } }