diff --git a/QgisModelBaker/gui/basket_manager.py b/QgisModelBaker/gui/basket_manager.py index 35ca2680..331a8a6b 100644 --- a/QgisModelBaker/gui/basket_manager.py +++ b/QgisModelBaker/gui/basket_manager.py @@ -17,7 +17,7 @@ ***************************************************************************/ """ -from qgis.core import QgsApplication, QgsProject +from qgis.core import Qgis, QgsApplication, QgsMessageLog, QgsProject from qgis.PyQt.QtWidgets import QDialog, QMessageBox from QgisModelBaker.gui.create_baskets import CreateBasketDialog @@ -26,8 +26,8 @@ from QgisModelBaker.libs.modelbaker.iliwrapper.ili2dbconfig import ( Ili2DbCommandConfiguration, ) +from QgisModelBaker.libs.modelbaker.utils.ili2db_utils import Ili2DbUtils from QgisModelBaker.utils import gui_utils -from QgisModelBaker.utils.ili2db_utils import Ili2DbUtils DIALOG_UI = gui_utils.get_ui_class("basket_manager.ui") @@ -188,7 +188,9 @@ def _do_delete_basket(self, basket_config): ) # Remove temporary dataset - res, msg = Ili2DbUtils().delete_dataset(tmp_dataset_name, self.configuration) + ili2db_utils = Ili2DbUtils() + ili2db_utils.log_on_error.connect(self._log_on_delete_dataset_error) + res, msg = ili2db_utils.delete_dataset(tmp_dataset_name, self.configuration) # If anything went bad, leave everything as the original status, # i.e., move the basket to its original dataset @@ -210,3 +212,6 @@ def _do_delete_basket(self, basket_config): ) return res, msg + + def _log_on_delete_dataset_error(self, log): + QgsMessageLog.logMessage(log, self.tr("Delete dataset from DB"), Qgis.Critical) diff --git a/QgisModelBaker/gui/dataset_manager.py b/QgisModelBaker/gui/dataset_manager.py index 1967e23a..459dbe4a 100644 --- a/QgisModelBaker/gui/dataset_manager.py +++ b/QgisModelBaker/gui/dataset_manager.py @@ -16,7 +16,7 @@ ***************************************************************************/ """ -from qgis.core import QgsApplication, QgsMapLayer, QgsProject +from qgis.core import Qgis, QgsApplication, QgsMapLayer, QgsMessageLog, QgsProject from qgis.gui import QgsMessageBar from qgis.PyQt.QtCore import QSettings, Qt from qgis.PyQt.QtWidgets import ( @@ -35,9 +35,9 @@ from QgisModelBaker.libs.modelbaker.iliwrapper.ili2dbconfig import ( Ili2DbCommandConfiguration, ) +from QgisModelBaker.libs.modelbaker.utils.ili2db_utils import Ili2DbUtils from QgisModelBaker.utils import gui_utils from QgisModelBaker.utils.gui_utils import DatasetModel -from QgisModelBaker.utils.ili2db_utils import Ili2DbUtils DIALOG_UI = gui_utils.get_ui_class("dataset_manager.ui") @@ -190,7 +190,9 @@ def _delete_dataset(self): dataset = self.dataset_tableview.selectedIndexes()[0].data( int(DatasetModel.Roles.DATASETNAME) ) - res, msg = Ili2DbUtils().delete_dataset(dataset, self.configuration) + ili2db_utils = Ili2DbUtils() + ili2db_utils.log_on_error.connect(self._log_on_delete_dataset_error) + res, msg = ili2db_utils.delete_dataset(dataset, self.configuration) if res: # After deletion, make sure canvas is refreshed self._refresh_map_layers() @@ -206,6 +208,9 @@ def _delete_dataset(self): warning_box.setText(msg) warning_box.exec_() + def _log_on_delete_dataset_error(self, log): + QgsMessageLog.logMessage(log, self.tr("Delete dataset from DB"), Qgis.Critical) + def _refresh_map_layers(self): # Refresh layer data sources and also their symbology (including feature count) layer_tree_view = self.iface.layerTreeView() diff --git a/QgisModelBaker/utils/ili2db_utils.py b/QgisModelBaker/utils/ili2db_utils.py deleted file mode 100644 index 9ef4b6df..00000000 --- a/QgisModelBaker/utils/ili2db_utils.py +++ /dev/null @@ -1,99 +0,0 @@ -""" -/*************************************************************************** - ------------------- - begin : 27.09.2024 - git sha : :%H$ - copyright : (C) 2024 by Germán Carrillo - email : german at opengis ch - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ -""" -from qgis.core import Qgis, QgsMessageLog -from qgis.PyQt.QtCore import QObject, Qt, pyqtSignal - -from QgisModelBaker.libs.modelbaker.iliwrapper import ilideleter -from QgisModelBaker.libs.modelbaker.iliwrapper.ili2dbconfig import ( - DeleteConfiguration, - Ili2DbCommandConfiguration, -) -from QgisModelBaker.libs.modelbaker.iliwrapper.ili2dbutils import JavaNotFoundError -from QgisModelBaker.libs.modelbaker.utils.qt_utils import OverrideCursor - - -class Ili2DbUtils(QObject): - """ - Execute ili2db operations via Model Baker Library - """ - - stdout = pyqtSignal(str) - stderr = pyqtSignal(str) - process_started = pyqtSignal(str) - process_finished = pyqtSignal(int, int) - - def __init__(self): - QObject.__init__(self) - - self._log = "" - - def delete_dataset( - self, dataset: str, configuration: Ili2DbCommandConfiguration = None - ): - deleter = ilideleter.Deleter() - deleter.tool = configuration.tool - deleter.configuration = DeleteConfiguration(configuration) - deleter.configuration.dataset = dataset - - with OverrideCursor(Qt.WaitCursor): - self._connect_ili_executable_signals(deleter) - self._log = "" - - res = True - msg = self.tr("Dataset '{}' successfully deleted!").format(dataset) - try: - if deleter.run() != ilideleter.Deleter.SUCCESS: - msg = self.tr( - "An error occurred when deleting the dataset '{}' from the DB (check the QGIS log panel)." - ).format(dataset) - res = False - QgsMessageLog.logMessage( - self._log, self.tr("Delete dataset from DB"), Qgis.Critical - ) - except JavaNotFoundError as e: - msg = e.error_string - res = False - - self._disconnect_ili_executable_signals(deleter) - - return res, msg - - def _connect_ili_executable_signals(self, ili_executable): - ili_executable.process_started.connect(self.process_started) - ili_executable.stderr.connect(self.stderr) - ili_executable.stdout.connect(self.stdout) - ili_executable.process_finished.connect(self.process_finished) - - ili_executable.process_started.connect(self._log_on_process_started) - ili_executable.stderr.connect(self._log_on_stderr) - - def _disconnect_ili_executable_signals(self, ili_executable): - ili_executable.process_started.disconnect(self.process_started) - ili_executable.stderr.disconnect(self.stderr) - ili_executable.stdout.disconnect(self.stdout) - ili_executable.process_finished.disconnect(self.process_finished) - - ili_executable.process_started.disconnect(self._log_on_process_started) - ili_executable.stderr.disconnect(self._log_on_stderr) - - def _log_on_process_started(self, command): - self._log += command + "\n" - - def _log_on_stderr(self, text): - self._log += text