Skip to content

Commit

Permalink
[git] Add Delete Dataset support
Browse files Browse the repository at this point in the history
  • Loading branch information
gacarrillor committed Sep 28, 2024
1 parent 8802d2c commit 67f47c7
Showing 1 changed file with 92 additions and 1 deletion.
93 changes: 92 additions & 1 deletion QgisModelBaker/gui/dataset_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@
from QgisModelBaker.gui.basket_manager import BasketManagerDialog
from QgisModelBaker.gui.edit_dataset_name import EditDatasetDialog
from QgisModelBaker.libs.modelbaker.db_factory.db_simple_factory import DbSimpleFactory
from QgisModelBaker.libs.modelbaker.iliwrapper import ilideleter
from QgisModelBaker.libs.modelbaker.iliwrapper.globals import DbIliMode
from QgisModelBaker.libs.modelbaker.iliwrapper.ili2dbconfig import (
DeleteConfiguration,
Ili2DbCommandConfiguration,
)
from QgisModelBaker.utils import gui_utils
Expand Down Expand Up @@ -163,6 +165,18 @@ def _edit_dataset(self):

def _delete_dataset(self):
if self._valid_selection():
db_connector = db_utils.get_db_connector(self.configuration)
if not db_connector.get_basket_handling():
QMessageBox.warning(
self,
self.tr("Delete Dataset"),
self.tr(
"Delete datasets is only available for database schemas created with --createBasketCol parameter."
),
QMessageBox.Close,
)
return

if (
QMessageBox.warning(
self,
Expand All @@ -174,7 +188,84 @@ def _delete_dataset(self):
)
== QMessageBox.Yes
):
print("DELETED! (TODO)")
dataset = self.dataset_tableview.selectedIndexes()[0].data(
int(DatasetModel.Roles.DATASETNAME)
)
res, msg = self._do_delete(dataset)
if res:
# Refresh layer data sources and also their symbology (including feature count)
layer_tree_view = self.iface.layerTreeView()
for tree_layer in (
QgsProject.instance().layerTreeRoot().findLayers()
):
layer = tree_layer.layer()
layer.dataProvider().reloadData()
layer_tree_view.refreshLayerSymbology(layer.id())

# Refresh dataset table view
self._refresh_datasets()

warning_box = QMessageBox(self)
warning_box.setIcon(
QMessageBox.Information if res else QMessageBox.Warning
)
warning_box.setWindowTitle(self.tr("Delete Dataset"))
warning_box.setText(msg)
warning_box.exec_()

def _do_delete(self, dataset):
from qgis.core import Qgis, QgsMessageLog

from QgisModelBaker.libs.modelbaker.iliwrapper.ili2dbutils import (
JavaNotFoundError,
)
from QgisModelBaker.libs.modelbaker.utils.qt_utils import OverrideCursor

deleter = ilideleter.Deleter()
deleter.tool = self.configuration.tool
deleter.configuration = DeleteConfiguration(self.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.stderr.connect(self.stderr)
# ili_executable.stdout.connect(self.stdout)
ili_executable.process_started.connect(self._on_process_started)
ili_executable.stderr.connect(self._on_stderr)

def _disconnect_ili_executable_signals(self, ili_executable):
# ili_executable.stderr.disconnect(self.stderr)
# ili_executable.stdout.disconnect(self.stdout)
ili_executable.process_started.disconnect(self._on_process_started)
ili_executable.stderr.disconnect(self._on_stderr)

def _on_process_started(self, command):
self._log += command + "\n"

def _on_stderr(self, text):
self._log += text

def _open_basket_manager(self):
if self._valid_selection():
Expand Down

0 comments on commit 67f47c7

Please sign in to comment.