Package Gnumed :: Package timelinelib :: Package editors :: Module container |
[frames] | no frames]

# Source Code for Module Gnumed.timelinelib.editors.container

      1  # Copyright (C) 2009, 2010, 2011  Rickard Lindberg, Roger Lindberg
      2  #
      3  # This file is part of Timeline.
      4  #
      5  # Timeline is free software: you can redistribute it and/or modify
      6  # it under the terms of the GNU General Public License as published by
      7  # the Free Software Foundation, either version 3 of the License, or
      8  # (at your option) any later version.
      9  #
     10  # Timeline is distributed in the hope that it will be useful,
     11  # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  # GNU General Public License for more details.
     14  #
     15  # You should have received a copy of the GNU General Public License
     16  # along with Timeline.  If not, see <http://www.gnu.org/licenses/>.
     17
     18
     19  from timelinelib.db.objects import Container
     20  from timelinelib.repositories.dbwrapper import DbWrapperEventRepository
     21
     22
     23 -class ContainerEditor(object):
     24      """
     25      This controller is responsible for two things:
     26        1. creating a new Container event
     27        2. updating properties of an existing Container event
     28      When creating a new Container event the result is NOT stored in the
     29      timeline database. This happens later when the first event added to the
     30      container is saved to the database.
     31      The reason for this behavior is that we don't want to have empty Conatiners
     32      in the database.
     33      When updating the properties of an existing Container event the changes
     34      are stored in the timeline database.
     35      """
     36 -    def __init__(self, view, db, container):
     37          self._set_initial_values_to_member_variables(view, db, container)
     38          self._set_view_initial_values()
     39
     40 -    def _set_initial_values_to_member_variables(self, view, db, container):
     41          self.view = view
     42          self.db = db
     43          self.container = container
     44          self.container_exists = (self.container != None)
     45          if self.container_exists:
     46              self.name = self.container.text
     47              self.category = self.container.category
     48          else:
     49              self.name = ""
     50              self.category = None
     51
     52 -    def _set_view_initial_values(self):
     53          self.view.set_name(self.name)
     54          self.view.set_category(self.category)
     55
     56      #
     57      # Dialog API
     58      #
     59 -    def save(self):
     60          self.name = self.view.get_name()
     61          self.category = self.view.get_category()
     62          try:
     63              self._verify_name()
     64              if self.container_exists:
     65                  self._update_container()
     66              else:
     67                  self._create_container()
     68              self.view.close()
     69          except ValueError:
     70              pass
     71
     72 -    def get_container(self):
     73          return self.container
     74
     75      #
     76      # Internals
     77      #
     78 -    def _verify_name(self):
     79          name_is_invalid = (self.name == "")
     80          if name_is_invalid:
     81              msg = _("Field '%s' can't be empty.") % _("Name")
     82              self.view.display_invalid_name(msg)
     83              raise ValueError()
     84
     85 -    def _update_container(self):
     86          self.container.update_properties(self.name, self.category)
     87          self._save_to_db()
     88
     89 -    def _save_to_db(self):
     90          try:
     91              DbWrapperEventRepository(self.db).save(self.container)
     92          except Exception, ex:
     93              self.view.display_db_exception(ex)
     94              raise ex
     95
     96 -    def _create_container(self):
     97          time_type = self.db.get_time_type()
     98          start = time_type.now()
     99          end = start
    100          self.container = Container(time_type, start, end, self.name,
    101                                     self.category)
    102