/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/save.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/save.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1989 by bh, Fri Nov 28 12:00:54 2003 UTC revision 2688 by frank, Fri Jun 30 12:27:20 2006 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001, 2002, 2003 by Intevation GmbH  # Copyright (c) 2001-2005 by Intevation GmbH
2  # Authors:  # Authors:
3  # Jan-Oliver Wagner <[email protected]>  # Jan-Oliver Wagner <[email protected]> (2004-2005)
4  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]> (2001-2004)
5  # Jonathan Coles <[email protected]>  # Jonathan Coles <[email protected]> (2003)
6    # Frank Koormann <[email protected]> (2003)
7  #  #
8  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
9  # Read the file COPYING coming with Thuban for details.  # Read the file COPYING coming with Thuban for details.
# Line 12  Functions to save a session to a file Line 13  Functions to save a session to a file
13  """  """
14    
15  __version__ = "$Revision$"  __version__ = "$Revision$"
16    # $Source$
17    # $Id$
18    
19  import os  import os
20    
# Line 20  import Thuban.Lib.fileutil Line 23  import Thuban.Lib.fileutil
23  from Thuban.Model.layer import Layer, RasterLayer  from Thuban.Model.layer import Layer, RasterLayer
24    
25  from Thuban.Model.classification import \  from Thuban.Model.classification import \
26      ClassGroupDefault, ClassGroupSingleton, ClassGroupRange, ClassGroupMap      ClassGroupDefault, ClassGroupSingleton, ClassGroupRange, \
27        ClassGroupPattern, ClassGroupMap
28  from Thuban.Model.transientdb import AutoTransientTable, TransientJoinedTable  from Thuban.Model.transientdb import AutoTransientTable, TransientJoinedTable
29  from Thuban.Model.table import DBFTable, FIELDTYPE_STRING  from Thuban.Model.table import DBFTable, FIELDTYPE_STRING
30  from Thuban.Model.data import DerivedShapeStore, ShapefileStore  from Thuban.Model.data import DerivedShapeStore, FileShapeStore, \
31                                  SHAPETYPE_POINT
32    
33  from Thuban.Model.xmlwriter import XMLWriter  from Thuban.Model.xmlwriter import XMLWriter
34  from postgisdb import PostGISConnection, PostGISShapeStore  from postgisdb import PostGISConnection, PostGISShapeStore
# Line 86  def sort_data_stores(stores): Line 91  def sort_data_stores(stores):
91              processed[id(container)] = 1              processed[id(container)] = 1
92      return result      return result
93    
94    def bool2str(b):
95        if b: return "true"
96        else: return "false"
97    
98  class SessionSaver(XMLWriter):  class SessionSaver(XMLWriter):
99    
# Line 131  class SessionSaver(XMLWriter): Line 139  class SessionSaver(XMLWriter):
139      def write(self, file_or_filename):      def write(self, file_or_filename):
140          XMLWriter.write(self, file_or_filename)          XMLWriter.write(self, file_or_filename)
141    
142          self.write_header("session", "thuban-1.0.dtd")          self.write_header("session", "thuban-1.1.dtd")
143          self.write_session(self.session)          self.write_session(self.session)
144          self.close()          self.close()
145    
# Line 158  class SessionSaver(XMLWriter): Line 166  class SessionSaver(XMLWriter):
166              attrs["xmlns:" + name] = uri              attrs["xmlns:" + name] = uri
167          # default name space          # default name space
168          attrs["xmlns"] = \          attrs["xmlns"] = \
169                 "http://thuban.intevation.org/dtds/thuban-1.0-dev.dtd"                 "http://thuban.intevation.org/dtds/thuban-1.1-dev.dtd"
170          self.open_element("session", attrs)          self.open_element("session", attrs)
171          self.write_db_connections(session)          self.write_db_connections(session)
172          self.write_data_containers(session)          self.write_data_containers(session)
# Line 194  class SessionSaver(XMLWriter): Line 202  class SessionSaver(XMLWriter):
202                  continue                  continue
203    
204              idvalue = self.define_id(container)              idvalue = self.define_id(container)
205              if isinstance(container, ShapefileStore):              if isinstance(container, FileShapeStore):
206                  self.define_id(container.Table(), idvalue)                  self.define_id(container.Table(), idvalue)
207                  filename = self.prepare_filename(container.FileName())                  filename = self.prepare_filename(container.FileName())
208                  self.write_element("fileshapesource",                  self.write_element("fileshapesource",
209                                     {"id": idvalue, "filename": filename,                                     {"id": idvalue, "filename": filename,
210                                      "filetype": "shapefile"})                                      "filetype": container.FileType()})
211              elif isinstance(container, DerivedShapeStore):              elif isinstance(container, DerivedShapeStore):
212                  shapesource, table = container.Dependencies()                  shapesource, table = container.Dependencies()
213                  self.write_element("derivedshapesource",                  self.write_element("derivedshapesource",
# Line 211  class SessionSaver(XMLWriter): Line 219  class SessionSaver(XMLWriter):
219                  self.write_element("dbshapesource",                  self.write_element("dbshapesource",
220                                     {"id": idvalue,                                     {"id": idvalue,
221                                      "dbconn": self.get_id(conn),                                      "dbconn": self.get_id(conn),
222                                      "tablename": container.TableName()})                                      "tablename": container.TableName(),
223                                        "id_column": container.IDColumn().name,
224                                        "geometry_column":
225                                          container.GeometryColumn().name,
226                                        })
227              elif isinstance(container, DBFTable):              elif isinstance(container, DBFTable):
228                  filename = self.prepare_filename(container.FileName())                  filename = self.prepare_filename(container.FileName())
229                  self.write_element("filetable",                  self.write_element("filetable",
# Line 276  class SessionSaver(XMLWriter): Line 288  class SessionSaver(XMLWriter):
288              attrs = {}              attrs = {}
289    
290          attrs["title"]   = layer.title          attrs["title"]   = layer.title
291          attrs["visible"] = ("false", "true")[int(layer.Visible())]          attrs["visible"] = bool2str(layer.Visible())
292    
293          if isinstance(layer, Layer):          if isinstance(layer, Layer):
294              attrs["shapestore"]   = self.get_id(layer.ShapeStore())              attrs["shapestore"]   = self.get_id(layer.ShapeStore())
   
             lc = layer.GetClassification()  
             attrs["stroke"] = lc.GetDefaultLineColor().hex()  
             attrs["stroke_width"] = str(lc.GetDefaultLineWidth())  
             attrs["fill"] = lc.GetDefaultFill().hex()  
   
295              self.open_element("layer", attrs)              self.open_element("layer", attrs)
296              self.write_projection(layer.GetProjection())              self.write_projection(layer.GetProjection())
297              self.write_classification(layer)              self.write_classification(layer)
298              self.close_element("layer")              self.close_element("layer")
299          elif isinstance(layer, RasterLayer):          elif isinstance(layer, RasterLayer):
300              attrs["filename"] = self.prepare_filename(layer.filename)              attrs["filename"] = self.prepare_filename(layer.filename)
301    
302                masknames = ["none", "bit", "alpha"]
303    
304                if layer.MaskType() != layer.MASK_BIT:
305                    attrs["masktype"] = masknames[layer.MaskType()]
306    
307                if layer.Opacity() != 1:
308                    attrs["opacity"] = str(layer.Opacity())
309    
310              self.open_element("rasterlayer", attrs)              self.open_element("rasterlayer", attrs)
311              self.write_projection(layer.GetProjection())              self.write_projection(layer.GetProjection())
312              self.close_element("rasterlayer")              self.close_element("rasterlayer")
# Line 306  class SessionSaver(XMLWriter): Line 321  class SessionSaver(XMLWriter):
321    
322          field = layer.GetClassificationColumn()          field = layer.GetClassificationColumn()
323    
324          #          if field is not None:
325          # there isn't a classification of anything so do nothing              attrs["field"] = field
326          #              attrs["field_type"] = str(layer.GetFieldType(field))
         if field is None: return  
327    
         attrs["field"] = field  
         attrs["field_type"] = str(layer.GetFieldType(field))  
328          self.open_element("classification", attrs)          self.open_element("classification", attrs)
329    
330          for g in lc:          for g in lc:
# Line 331  class SessionSaver(XMLWriter): Line 343  class SessionSaver(XMLWriter):
343                  open_el  = 'clrange label="%s" range="%s"' \                  open_el  = 'clrange label="%s" range="%s"' \
344                            % (self.encode(g.GetLabel()), str(g.GetRange()))                            % (self.encode(g.GetLabel()), str(g.GetRange()))
345                  close_el = 'clrange'                  close_el = 'clrange'
346                elif isinstance(g, ClassGroupPattern):
347                    open_el  = 'clpattern label="%s" pattern="%s"' \
348                              % (self.encode(g.GetLabel()), str(g.GetPattern()))
349                    close_el = 'clpattern'
350    
351              else:              else:
352                  assert False, _("Unsupported group type in classification")                  assert False, _("Unsupported group type in classification")
353                  continue                  continue
# Line 340  class SessionSaver(XMLWriter): Line 357  class SessionSaver(XMLWriter):
357                      'stroke_width': str(data.GetLineWidth()),                      'stroke_width': str(data.GetLineWidth()),
358                      'fill'        : data.GetFill().hex()}                      'fill'        : data.GetFill().hex()}
359    
360                # only for point layers write the size attribute
361                if layer.ShapeType() == SHAPETYPE_POINT:
362                    dict['size'] =  str(data.GetSize())
363    
364              self.open_element(open_el)              self.open_element(open_el)
365              self.write_element("cldata", dict)              self.write_element("cldata", dict)
366              self.close_element(close_el)              self.close_element(close_el)

Legend:
Removed from v.1989  
changed lines
  Added in v.2688

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26