diff --git a/src/Model/BoundaryCondition/BoundaryConditionList.py b/src/Model/BoundaryCondition/BoundaryConditionList.py index 2514f32694a598ee1a2c690cf38dc58e4013d560..d4ffc6bf60999f8e4187418f822c861249eff69c 100644 --- a/src/Model/BoundaryCondition/BoundaryConditionList.py +++ b/src/Model/BoundaryCondition/BoundaryConditionList.py @@ -20,6 +20,7 @@ from copy import copy from tools import trace, timer from Model.DB import SQLSubModel +from Model.Tools.PamhyrList import PamhyrModelListWithTab from Model.Except import NotImplementedMethodeError from Model.BoundaryCondition.BoundaryCondition import BoundaryCondition @@ -30,30 +31,12 @@ from Model.BoundaryCondition.BoundaryConditionTypes import ( Solid, ) -class BoundaryConditionList(SQLSubModel): +class BoundaryConditionList(PamhyrModelListWithTab): + _tabs_list = ["liquid", "solid", "suspenssion"] _sub_classes = [ BoundaryCondition, ] - def __init__(self, status = None): - super(BoundaryConditionList, self).__init__() - - self._status = status - - self._tabs = { - "liquid" : [], - "solid" : [], - "suspenssion" : [] - } - - @classmethod - def _sql_create(cls, execute): - return cls._create_submodel(execute) - - @classmethod - def _sql_update(cls, execute, version): - return True - @classmethod def _sql_load(cls, execute, data = None): new = cls(status = data['status']) @@ -82,66 +65,12 @@ class BoundaryConditionList(SQLSubModel): return True - def len(self, lst): - return len(self._tabs[lst]) - - def get_tab(self, lst): - return self._tabs[lst].copy() - - def get(self, lst, row): - return self._tabs[lst][row] - - def set(self, lst, row, new): - self._tabs[lst][row] = new - self._status.modified() - def new(self, lst, index): n = NotDefined(status=self._status) self._tabs[lst].insert(index, n) self._status.modified() return n - def insert(self, lst, index, new): - self._tabs[lst].insert(index, new) - self._status.modified() - - def delete(self, lst, bcs): - for bc in bcs: - self._tabs[lst].remove(bc) - self._status.modified() - - def delete_i(self, lst, indexes): - bcs = list( - map( - lambda x: x[1], - filter( - lambda x: x[0] in indexes, - enumerate(self._tabs[lst]) - ) - ) - ) - self.delete(lst, bcs) - - def sort(self, lst, reverse=False, key=None): - self._tabs[lst].sort(reverse=reverse, key=key) - self._status.modified() - - def move_up(self, lst, index): - if index < len(self._tabs[lst]): - next = index - 1 - - l = self._tabs[lst] - l[index], l[next] = l[next], l[index] - self._status.modified() - - def move_down(self, lst, index): - if index >= 0: - prev = index + 1 - - l = self._tabs[lst] - l[index], l[prev] = l[prev], l[index] - self._status.modified() - def __copy__(self): new = BoundaryConditionList() diff --git a/src/Model/LateralContribution/LateralContributionList.py b/src/Model/LateralContribution/LateralContributionList.py index ca7c111e1dd92abe56dbec2bb7eda237a6dabf34..6622a94f961dcdc2302e3f55f1a7ff8b494d6380 100644 --- a/src/Model/LateralContribution/LateralContributionList.py +++ b/src/Model/LateralContribution/LateralContributionList.py @@ -20,6 +20,7 @@ from copy import copy from tools import trace, timer from Model.DB import SQLSubModel +from Model.Tools.PamhyrList import PamhyrModelListWithTab from Model.Except import NotImplementedMethodeError from Model.LateralContribution.LateralContribution import LateralContribution @@ -27,30 +28,12 @@ from Model.LateralContribution.LateralContributionTypes import ( NotDefined, LateralContrib, Rain, Evaporation, ) -class LateralContributionList(SQLSubModel): +class LateralContributionList(PamhyrModelListWithTab): + _tabs_list = ["liquid", "solid", "suspenssion"] _sub_classes = [ LateralContribution, ] - def __init__(self, status = None): - super(LateralContributionList, self).__init__() - - self._status = status - - self._tabs = { - "liquid" : [], - "solid" : [], - "suspenssion" : [] - } - - @classmethod - def _sql_create(cls, execute): - return cls._create_submodel(execute) - - @classmethod - def _sql_update(cls, execute, version): - return True - @classmethod def _sql_load(cls, execute, data = None): new = cls(status = data['status']) @@ -79,66 +62,12 @@ class LateralContributionList(SQLSubModel): return True - def len(self, lst): - return len(self._tabs[lst]) - - def get_tab(self, lst): - return self._tabs[lst].copy() - - def get(self, lst, row): - return self._tabs[lst][row] - - def set(self, lst, row, new): - self._tabs[lst][row] = new - self._status.modified() - def new(self, lst, index): n = NotDefined(status=self._status) self._tabs[lst].insert(index, n) self._status.modified() return n - def insert(self, lst, index, new): - self._tabs[lst].insert(index, new) - self._status.modified() - - def delete(self, lst, bcs): - for bc in bcs: - self._tabs[lst].remove(bc) - self._status.modified() - - def delete_i(self, lst, indexes): - bcs = list( - map( - lambda x: x[1], - filter( - lambda x: x[0] in indexes, - enumerate(self._tabs[lst]) - ) - ) - ) - self.delete(lst, bcs) - - def sort(self, lst, reverse=False, key=None): - self._tabs[lst].sort(reverse=reverse, key=key) - self._status.modified() - - def move_up(self, lst, index): - if index < len(self._tabs[lst]): - next = index - 1 - - l = self._tabs[lst] - l[index], l[next] = l[next], l[index] - self._status.modified() - - def move_down(self, lst, index): - if index >= 0: - prev = index + 1 - - l = self._tabs[lst] - l[index], l[prev] = l[prev], l[index] - self._status.modified() - def __copy__(self): new = LateralContributionList() diff --git a/src/Model/Tools/PamhyrList.py b/src/Model/Tools/PamhyrList.py index bf8537dd1c0c3ab2003831d9f64bd627b2d598a7..8807c1493a3aa12b176494f41084b15ed7e78982 100644 --- a/src/Model/Tools/PamhyrList.py +++ b/src/Model/Tools/PamhyrList.py @@ -81,7 +81,7 @@ class PamhyrModelList(SQLSubModel): Returns: The new elements """ - raise NotImplementedMethodeError(self, self._sql_save) + raise NotImplementedMethodeError(self, self.new) def insert(self, index, new): self._lst.insert(index, new) @@ -123,3 +123,106 @@ class PamhyrModelList(SQLSubModel): l = self._lst l[index], l[prev] = l[prev], l[index] self._status.modified() + + +class PamhyrModelListWithTab(SQLSubModel): + _tabs_list = [] + _sub_classes = [ + ] + + def __init__(self, status = None): + super(PamhyrModelListWithTab, self).__init__() + + self._status = status + self._tabs = {} + for tab in self._tabs_list: + self._tabs[tab] = [] + + ####### + # SQL # + ####### + + @classmethod + def _sql_create(cls, execute): + return cls._create_submodel(execute) + + @classmethod + def _sql_update(cls, execute, version): + return cls._update_submodel(execute, version) + + @classmethod + def _sql_load(cls, execute, data = None): + raise NotImplementedMethodeError(cls, cls._sql_load) + + def _sql_save(self, execute, data = None): + raise NotImplementedMethodeError(self, self._sql_save) + + ################ + # MODEL METHOD # + ################ + + def len(self, lst): + return len(self._tabs[lst]) + + def get_tab(self, lst): + return self._tabs[lst].copy() + + def get(self, lst, row): + return self._tabs[lst][row] + + def set(self, lst, row, new): + self._tabs[lst][row] = new + self._status.modified() + + def new(self, lst, index): + """Create new elements and add it to list + + Args: + lst: The tab name + index: The index of new elements + + Returns: + The new elements + """ + raise NotImplementedMethodeError(self, self.new) + + def insert(self, lst, index, new): + self._tabs[lst].insert(index, new) + self._status.modified() + + def delete(self, lst, els): + for el in els: + self._tabs[lst].remove(el) + self._status.modified() + + def delete_i(self, lst, indexes): + els = list( + map( + lambda x: x[1], + filter( + lambda x: x[0] in indexes, + enumerate(self._tabs[lst]) + ) + ) + ) + self.delete(lst, els) + + def sort(self, lst, reverse=False, key=None): + self._tabs[lst].sort(reverse=reverse, key=key) + self._status.modified() + + def move_up(self, lst, index): + if index < len(self._tabs[lst]): + next = index - 1 + + l = self._tabs[lst] + l[index], l[next] = l[next], l[index] + self._status.modified() + + def move_down(self, lst, index): + if index >= 0: + prev = index + 1 + + l = self._tabs[lst] + l[index], l[prev] = l[prev], l[index] + self._status.modified()