package Common.Passes; import Common.Database.Objects.DBObject; public abstract class DeleteObjectsPass extends ObjectsPass{ public DeleteObjectsPass(Class d_in) { super(d_in); } @Override public String getIconPath() { return "/Common/icons/Delete.png"; } @Override protected boolean canStart(Object... args) throws Exception { target = getTable().getSelectedOrCurrent(); return getTable().CheckCurrent(Log) && getTable().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().tables.get(dep).ClearUI(); break; } } } @Override protected void body() throws Exception { getDb().BeginTransaction(); 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; } } } getDb().Commit(); } //тут именно на финише, чтобы в любом случае вся таблица всегда была видна. @Override protected void performFinish() throws Exception { getTable().ShowUI(); for (Class dep : getTable().getFKDependencies().keySet()) { getDb().tables.get(dep).RefreshUI(); } } }