Revision 362 org.gvsig.scripting.app/trunk/org.gvsig.scripting.app/org.gvsig.scripting.app.extension/src/main/resources/scripting/lib/gvsig.py

View differences:

gvsig.py
25 25

  
26 26
__author__ = """Antonio Carrasco Valero
27 27
Model Driven Development sl and Antonio Carrasco Valero
28
<carrasco@modeldd.org>"""
28
<carrasco@modeldd.org>
29
Victor Acevedo Royer <vacevedor@gmail.com>
30
"""
31

  
29 32
__docformat__ = 'plaintext'
30 33

  
31 34

  
32
from org.gvsig.fmap.mapcontext import MapContextLocator
33

  
34 35
from java.lang import RuntimeException
35 36
from java.lang import Throwable
36 37

  
37 38
from org.gvsig.app import ApplicationLocator
39
from org.gvsig.app.project.documents.view import ViewDocument 
38 40

  
39
from org.gvsig.fmap.dal import DALLocator
40
from org.gvsig.fmap.dal import DataTypes
41
from org.gvsig.fmap.geom import Geometry
41
from org.gvsig.fmap.mapcontext import MapContextLocator
42
from org.gvsig.fmap.mapcontext.layers import FLayers
43
from org.gvsig.fmap.dal import DALLocator, DataTypes
44
from org.gvsig.fmap.dal.feature import EditableFeature, EditableFeatureType
45
#from org.gvsig.fmap.geom import Geometry, GeometryLocator
42 46

  
43 47
from org.gvsig.tools import ToolsLocator
44 48

  
45
from org.gvsig.fmap.geom import DataTypes
49
from geom import *
46 50

  
47 51
import thread
48 52

  
53

  
54

  
55
"""
56
ARRAY, BOOLEAN, BYTE, BYTEARRAY, CHAR, CONTAINER, DATE, DOUBLE, DYNOBJECT, FILE,
57
FLOAT, FOLDER, INT, INVALID, LIST, LONG, MAP, MAX_TYPE_VALUE, OBJECT, SET,
58
STRING, SUBTYPE_DATE, SUBTYPE_FILE, SUBTYPE_FOLDER, TIME, TIMESTAMP, UNKNOWN,
59
URI, URL
60
"""
61

  
49 62
def runTask(name, function, *args):
50 63
  manager = ToolsLocator.getTaskStatusManager()
51 64
  status = manager.createDefaultSimpleTaskStatus(name)
......
61 74
     
62 75

  
63 76
class WrapperToJava(object):
77
  """
78
  Create a wrapper that allows python object access to the Java object
79
  properties and methods
80
  """
64 81
  def __init__(self, javaobj):
65 82
    if javaobj == None:
66 83
      raise RuntimeException("Can't create "+ self.__class__.__name__)
......
73 90
    return getattr(self._javaobj,name)
74 91

  
75 92
class Project(WrapperToJava):
76
  def __init__(self,project):
77
    WrapperToJava.__init__(self,project)
78

  
93
  """
94
  Represents a gvSIG project
95
  """
96
  def __init__(self, project):
97
    WrapperToJava.__init__(self, project)
98
  
79 99
  def getView(self, name=None):
100
    """
101
    Return active view, or view called 'name'  or None
102
    
103
      :param name: view name
104
      :type name: string
105
    """
106
    v = None
107
      
80 108
    if name == None:
81
      return View(self.getActiveDocument("project.document.view2d"))
109
      try:
110
        activeDocument = self.getActiveDocument()
111
        #if v.__class__ == "project.document.view2d":
112
        if activeDocument.getTypeName() == "project.document.view2d":
113
          v = View(activeDocument)
114
      except Exception, ex:
115
        raise Exception("%s"%repr(ex))
82 116

  
83
    views = self.getViews()
117
    else:
118
      views = self.getViews()
119
      if len(views) >0:
120
        for view in views:
121
          if name == view.getName():
122
            v = View(view)
84 123

  
85
    if len(views) >0:
86
      for v in views:
87
        if name == v.getName():
88
          return View(v)
124
    return v
125
    
126
  def getTable(self, name=None):
127
    """
128
    Return active Table Document, or Table Document called 'name'  or None
129
    
130
      :param name: Table Document name
131
      :type name: string
132
    """
133
    t = None
134
    if name == None:
135
      try:
136
        activeDocument = self.getActiveDocument()
137
        if activeDocument.getTypeName() == "project.document.table":
138
          t = Table(activeDocument)
139
      except Exception, ex:
140
        raise Exception("%s"%repr(ex))
141
    else:
142
      tables = self.getDocuments("project.document.table")
143
      if len(tables) >0:
144
        for table in tables:
145
          if name == table.getName():
146
            t = Table(table)
147
            
148
    return t
89 149

  
90
    return None
91 150

  
92 151
class View(WrapperToJava):
152
  """
153
  Represents gvSIG view document.
154
  """
93 155
  def __init__(self,view):
94 156
    WrapperToJava.__init__(self,view)
95
  
96
  def refresh(self):
97
    map = self.getMapContext()
98
    map.invalidate()
99

  
157
    
100 158
  def getLayer(self, name=None):
101
    map = self.getMapContext()
159
    """
160
    Return one of the view layers documents. If name is None return view active 
161
    layer if the view has one, if name is not None return view called name else 
162
    return None.
163
      
164
      :param name: view name in Table Of Contents
165
      :type name: string
166
      :return: View
167
      :return: None
168
      
169
    """
170
    map = self.getMapContext();
102 171
    if name == None:
103 172
      activeLayers = map.getLayers().getActives()
104 173
      if len(activeLayers) != 1 :
105 174
        raise RuntimeException("The view has not an active layer")
106
      return Layer(activeLayers[0])
107
    #FIXME
108
    try:
109
      return Layer(layers.getLayer(name))
110
    except Exception, ex:
111
      print "View.getLayer Error. %s"%repr(ex)
175
      for layer in activeLayers:
176
        if not isinstance(layer, FLayers):
177
          return Layer(layer)
178
      raise RuntimeException("The view has not an active layer")
112 179
    
113
    layers = map.getLayers()
114
    """
115
    for i in xrange(len(ls)):
116
      l = layers.getLayer(i)
117
      if name == l.getName():
180
    ls = self.getLayers()
181
    for i in xrange(ls.getLayersCount()):
182
      l = ls.getLayer(i)
183
      if l.name == name:
118 184
        return Layer(l)
119
    """
120 185
    
121
    return layers
186
    return None
122 187
    
123 188
  def getMap(self):
189
    """
190
    Return view mapContext
191
    """
124 192
    return self.getMapContext();
125 193
 
126 194
  def addLayer(self, layer):
127
    #FIXME: Comprobar si es un Layer de python y convertirlo al de 
128
    # java automaticmente para que acepte los dos
195
    if isinstance(layer, Layer):
196
      layer =layer()
129 197
    self.getMapContext().getLayers().addLayer(layer)
130 198
  
131 199
  def getLayers(self):
200
    """
201
    Return iterable view layers set
202
    """
132 203
    map = self.getMapContext();
133 204
    return Layers(map.getLayers())
134 205
    
135 206
  def getGraphicsLayer(self):
207
    """
208
    Return view graphics layer
209
    """
136 210
    return self.getMapContext().getGraphicsLayer()
137 211
    
138 212

  
139 213
class Layers(WrapperToJava):
140

  
214
  """
215
  Iterable layers set
216
  """
141 217
  def __init__(self,layers):
142 218
    WrapperToJava.__init__(self, layers)
143 219

  
......
150 226
  def __iter__(self):
151 227
    return LayersIterator(self)
152 228

  
153
#class LayersIterator(WrapperToJava):
154 229
class LayersIterator(object):
155 230

  
156 231
  def __init__(self,layers):
157
    #WrapperToJava.__init__(self, layers)
158 232
    self.__layers = layers
159 233
    self.__index = 0
160 234

  
161 235
  def next(self):
162 236
    if self.__index > self.__layers.getLayersCount() :
163 237
      raise StopIteration()
164
    #FIXME
165
    #return Layer(self.__layers.getLayer(self.__index))
166
    return Layer(self.__layers.get(self.__index))
238
    return Layer(self.__layers.get(self.__index))    
239
  
240
class Store(WrapperToJava):
241
  """
242
  Represents gvsig store
243
  """
244
  def __init__(self,store):
245
    WrapperToJava.__init__(self, store)
246
    #self.data = None
247
    self.fset = None
248
  
249
  def features(self, expresion = None):
250
    """
251
    Return layer features set
167 252
    
168
class Layer(WrapperToJava):
169
  def __init__(self,layer):
170
    WrapperToJava.__init__(self,layer)
253
        :param expresion: filter to apply to the feature set to select
254
determinates features that match with expression
255
        :type expresion: string
256
        :return: FeatureSet
257
    """
258
    
259
    if expresion == None:
260
      self.fset = self.getFeatureSet()         
261
    else:
262
      application = ApplicationLocator.getManager()
263
      datamanager =  application.getDataManager()
264
      query = self.createFeatureQuery()
265
      query.setFilter( datamanager.createExpresion(expresion) )
266
      #self.fset = data.getFeatureSet(query)    
267
      self.fset = self.getFeatureSet(query)
268
    
269
    return FeatureSet(self.fset)
171 270

  
172
  def features(self):
173
    data = self.getDataStore()
174
    fset = data.getFeatureSet()
175
    return FeatureSet(fset)
176

  
177
  def append(self, **values): 
271
  def edit(self):
272
    """
273
    Set layer data store in edition mode
274
    """
275
     
276
    if not self.isEditing():
277
        self().edit() 
278
     
279
  def append(self, *valuesList, **values):
280
    """
281
    Create a new feature from given values and insert it in the feature set
282
    
283
      :param values: dictionary with name property value or list named params
284
      :type values: dict
285
    
286
    """
178 287
    try:
179
      data = self.getDataStore() 
180
      if not data.isEditing():
181
        data.edit() 
182
      f = self.getFeatureStore().createNewFeature()
288
      if len(valuesList) ==1:
289
        values.update(valuesList[0])
290
      
291
      if not self.isEditing():
292
        self.edit() 
293
      f = self.createNewFeature()
294
      
183 295
      if f == None:
184 296
        raise RuntimeError("Failed to create a new Feature")
185 297
      for k,v in values.iteritems():
186 298
        f.set(k,v)
187
        data.insert(f)
299
        self.insert(f)
188 300
    except Throwable, ex:
189 301
      raise RuntimeException("Can't append values %s to layer %s (%s)" % (
190 302
        repr(values), 
......
193 305
        )
194 306
      )
195 307

  
308
  def updateSchema(self, schema):
309
    try:
310
      self().update(schema._javaobj)
311
    except Throwable, ex:
312
      raise RuntimeException(repr(ex))
313
    
314
  def update(self, feature):
315
    """
316
    Update exist feature in the layer featureSet
317
    
318
      :param editableFeature: editableFeature
319
      :type editableFeature: Java editableFeature
320
    """
321
    #fset = self.data.getFeatureSet()
322
    #fset.update(editableFeature)
323
    if not isinstance(feature, EditableFeature):
324
      feature = feature._javaobj
325
    self.fset.update(feature)
326
  
327
  def getSchema(self):
328
    """
329
    Return layer schema definition
330
    """
331
    return Schema(self.getDefaultFeatureType())
332

  
196 333
  def commit(self):
197
    data = self.getDataStore()
198
    data.finishEditing() 
334
    """
335
    Finish layer edition
336
    """
337
    try:
338
      self.finishEditing()          
339
    except Throwable, ex:
340
      self.abort()
341
      raise Throwable("Can't finish layer edition, cancelling changes. %s" % repr(ex))
342
    
199 343
  
200 344
  def abort(self):
201
    data = self.getDataStore()
202
    data.cancelEditing() 
345
    """
346
    Cancel layer edition
347
    """
348
    #data = self.getDataStore()
349
    self.cancelEditing() 
350
    self.dispose()
203 351

  
204 352
  def getSelection(self):
205
    data = self.getDataStore()
206
    return data.getSelection()
353
    """
354
    Return layer feature selected set
355
    """
356
    return self().getSelection()
357

  
358
class __DefaultTable__(WrapperToJava):
359
  def __init__(self,document, data):
360
    self.data = Store(data)
361
    WrapperToJava.__init__(self,document)
362

  
363
  def features(self, expresion = None):
364
    """
365
    Return table features set
207 366
    
367
        :param expresion: filter to apply to the feature set to select
368
determinates features that match with expression
369
        :type expresion: string
370
        :return: FeatureSet
371
    """
372
    
373
    return self.data.features(expresion = None)
374

  
375
  def edit(self):
376
    """
377
    Set layer data store in edition mode
378
    """
379
     
380
    self.data.edit() 
381
     
382
  def append(self, *valuesList, **values):
383
    """
384
    Create a new feature from given values and insert it in the feature set
385
    
386
      :param values: dictionary with name property value or list named params
387
      :type values: dict
388
    
389
    """
390
    self.data.append(*valuesList, **values)
391
    
392
  def updateSchema(self, schema):
393
    self.data.updateSchema(schema)
394
    
395
  def update(self, feature):
396
    """
397
    Update exist feature in the layer featureSet
398
    
399
      :param editableFeature: editableFeature
400
      :type editableFeature: Java editableFeature
401
    """
402
    self.data.update(feature)
403
  
404
  def getSchema(self):
405
    """
406
    Return layer schema definition
407
    """
408
    return self.data.getSchema()
409

  
410
  def commit(self):
411
    """
412
    Finish layer edition
413
    """
414
    self.data.commit()
415
  
416
  def abort(self):
417
    """
418
    Cancel layer edition
419
    """
420
    self.data.abort()
421
    
422
  def getSelection(self):
423
    """
424
    Return layer feature selected set
425
    """
426
    return self.data.getSelection()
427

  
428
class Table(__DefaultTable__):
429
  """
430
  Represents gvsig layer document
431
  """
432
  def __init__(self,table):
433
    __DefaultTable__.__init__(self, table, table.getStore())
434

  
435
class Layer(__DefaultTable__):
436
  """
437
  Represents gvsig layer document
438
  """
439
  def __init__(self,layer):
440
    __DefaultTable__.__init__(self, layer, layer.getFeatureStore())
441
    #WrapperToJava.__init__(self,layer)
442
        
208 443
class FeatureSet(WrapperToJava):
209 444
  def __init__(self,featureSet):
210 445
    WrapperToJava.__init__(self,featureSet)
211

  
446
    
447
  def getCount(self):
448
    return self.getSize()
449
  
450
  def update(self, feature):
451
    """
452
    Update exist feature in the featureSet
453
    
454
      :param editableFeature: editableFeature
455
      :type editableFeature: Java editableFeature
456
    """
457
    #FIXME
458
    if not isinstance(feature, EditableFeature) and \
459
    feature.__class__ != "org.gvsig.fmap.dal.feature.impl.DefaultEditableFeature":
460
      feature = feature._javaobj
461
    self().update(feature)
462
  
212 463
  def __iter__(self):
213 464
    return  Iterator(self.fastIterator())
214

  
465
   
215 466
class Iterator(WrapperToJava):
216 467

  
217 468
  def __init__(self,iterator):
......
223 474
    return Feature(self().next())
224 475
    
225 476
class Feature(WrapperToJava):
477
  """
478
  Represents layer feature data
479
  """
226 480
  def __init__(self,feature):
227 481
    WrapperToJava.__init__(self,feature)
482
    self.featureNoEditable = None
228 483

  
229 484
  def geometry(self):
485
    """
486
    Return feature default geometry
487
    """
230 488
    return self.getDefaultGeometry()
489
   
490
  def getValues(self):
491
    """
492
    Return dictionary with name value attributes
493
    """
494
    descriptor = self.getType()
495
    items = dict()
496
    for attr in descriptor.getAttributeDescriptors():
497
      name = attr.getName()
498
      value = self.get(attr.getName())
499
      items[name] = value
500
    return items 
231 501
  
502
  def edit(self):
503
    """
504
    Return editable feature
505
    """
506
    if not isinstance(self._javaobj, EditableFeature):
507
      self.featureNoEditable = self._javaobj
508
      self._javaobj = self._javaobj.getEditable()
509
    
510
    #return self.getEditable()
511
  
232 512
  def __getitem__(self,key):
233 513
    return self.get(key)
234 514
  
......
236 516
    try:
237 517
      v = getattr(self._javaobj,name, None)
238 518
      if v == None:
239
        v = self().get(name)
240
        
519
        v = self().get(name)        
241 520
      return v
242 521
    except Throwable, ex:
243
      raise RuntimeException("Can't access to attribute %s of feature (%s)" % (name, str(ex)))
244
  
522
      raise RuntimeException("Can't access to attribute %s of feature (%s)" % (name, str(ex)))    
245 523

  
246 524
class Schema(WrapperToJava):
525
  """
526
  Layer feature definition
527
  """
247 528

  
248 529
  def __init__(self, featureType):
249 530
    WrapperToJava.__init__(self,featureType)
531
    self.featureTypeNoEditable = None
250 532
  
251
  def append(self, name, type, size=None):
252
    application = ApplicationLocator.getManager()
253
    datamanager =  application.getDataManager()
254
    dataTypes = application.getDataTypesManager()
255
    type = dataTypes.get( dataTypes.getType(type) ) 
533
  def append(self, name, type, size=None, default=None, precision=4):
534
    """
535
    Adds property to feature properties definition.
256 536
    
537
        :param name: Feature property name
538
        :type name: String
539
        :param type: Feature property type
540
        :type name: String
541
        :param size: Feature property size
542
        :type size: int
543
        :param default: Feature property default value
544
        :return: new atribute
545

  
546
    """
547
    if not isinstance(self._javaobj, EditableFeatureType):
548
      self.modify()
549
      #self.featureTypeNoEditable = self._javaobj
550
      #self._javaobj = self._javaobj.getEditable()
551
    
552
    if isinstance(type, str):
553
      try:
554
        application = ApplicationLocator.getManager()
555
        datamanager =  application.getDataManager()
556
        dataTypes = application.getDataTypesManager()
557
        type = dataTypes.getType(type) #dataType constant value from string
558
      except:
559
        raise RuntimeError(
560
            "Feature Property Data type (%s) is not valid.  name=%s, type=%s, size=%s, default=%s)" % (
561
                type, 
562
                name, 
563
                type, 
564
                size, 
565
                default
566
            )
567
        )
568
    if isinstance(type, int):
569
      try:
570
        type = dataTypes.get(type)
571
      except:
572
        raise RuntimeError(
573
            "Data type (%s) is not valid.  name=%s, type=%s, size=%s, default=%s)" % (
574
                type, 
575
                name, 
576
                type, 
577
                size, 
578
                default
579
            )
580
        )
581
      
257 582
    attribute = self.add(name, type.getType())
258
    if size != None:
583
 
584
    if size != None: 
259 585
      attribute.setSize(size)
260
        
586
    
587
    if default != None:
588
      attribute.setDefaultValue(default)
589
      
590
    if precision != None and type.getType() in (DataTypes.DOUBLE, DataTypes.FLOAT):
591
      attribute.setPrecision(precision)
592
    
261 593
    if type.getType() == DataTypes.GEOMETRY and self.getDefaultGeometryAttributeName()==None:
262 594
      self.setDefaultGeometryAttributeName(name)
263 595
    
......
271 603
    if x == None:
272 604
      return default
273 605
    return x
274
      
275
def createSchema():
606
  
607
  def modify(self):
608
    #FIXME comprobar si es un DefaultFeatureType
609
    if not isinstance(self._javaobj, EditableFeatureType):
610
      self.featureTypeNoEditable = self._javaobj
611
      self._javaobj = self._javaobj.getEditable()
612
    
613
def createSchema(schema = None):
614
  """
615
  Return empty layer definition
616
  """
617
  if schema != None:
618
    return Schema(schema.getCopy())
619
    
276 620
  application = ApplicationLocator.getManager()
277 621
  datamanager =  application.getDataManager()
278 622
  return Schema(datamanager.createFeatureType())
279 623

  
280

  
281
def copyToDynObject(values, target):
282
  definition = target.getDynClass();
283
  fields = definition.getDynFields();
284
  for field in fields:
285
    name = field.getName()
286
    #FIXME: Esta comparacion deberia ser case insensitibe
287
    if values.has_key(name):
288
      #print "set %s = %s (%s)" % (name, values[name], target)
289
      target.setDynValue(name, values[name])
290

  
291

  
292 624
def createLayer(schema, servertype, layertype=None, **parameters):
293
  """ Create a new layer and return it """
625
  """ 
626
  Create a new layer and return it 
627
  
628
      :param schema: layer data definition
629
      :type schema: Schema
630
      :param servertype: 
631
      :type servertype: string
632
      :return: new layer
633
      :rtype: Layer
634
      :raise: RuntimeException
635
  
636
  """
294 637
  if layertype == None:
295 638
    layertype = servertype
296 639
    servertype = "FilesystemExplorer"
......
298 641
  if layertype == "Shape" :
299 642
    if schema.get("GEOMETRY",None) == None:
300 643
      raise RuntimeException("Shape need a field named GEOMETRY in the schema")
301
              
644
  
645
  #parameters["geometryType"] = getGeometryType(parameters["geometryType"])
646
    
647
  if parameters["geometryType"] == None:
648
    raise RuntimeException("Invalid geometry type for new layer")
649
      
302 650
  try:
303 651
    application = ApplicationLocator.getManager()
304 652
    datamanager =  application.getDataManager()
......
324 672
  except Throwable, ex:
325 673
    raise RuntimeException("Can't create layer, "+ str(ex))
326 674

  
327
def createShape(definition, filename, CRS="wsg86"):
328
  """ Create a new shape layer """
329
  return createLayer(definition, "FilesystemExplorer", "Shape", shpFile=filename, CRS=CRS)
675
def createShape(definition, filename, geometryType, CRS="wsg86"):
676
  """ 
677
  Create a new shape layer 
678
      
679
      :param definition: layer data definition
680
      :type definition: Schema
681
      :param filename: absolute path for shape files. 
682
      :type filename: string
683
      :param geometryType: geometry type for shape
684
      :type geometryType: string
685
      :return: new shape layer
686
      :rtype: Layer
687
  """
688
  return createLayer(
689
    definition, 
690
    "FilesystemExplorer", 
691
    "Shape", 
692
    shpFile=filename, 
693
    CRS=CRS,
694
    geometryType = geometryType
695
  )
696

  
697
def createTable(schema, servertype, tableType=None, **parameters):
698
  if tableType == None:
699
    tableType = servertype
700
    servertype = "FilesystemExplorer"
701

  
702
  try:
703
    application = ApplicationLocator.getManager()
704
    datamanager =  application.getDataManager()
705
    
706
    server_parameters = datamanager.createServerExplorerParameters(servertype)
707
    copyToDynObject(parameters, server_parameters)
708

  
709
    server = datamanager.openServerExplorer(servertype, server_parameters)
710
    
711
    store_parameters = server.getAddParameters(tableType)
712
    copyToDynObject(parameters, store_parameters)
713
    store_parameters.setDefaultFeatureType(schema())
714
    
715
    server.add(tableType, store_parameters, True)
716

  
717
    store = datamanager.openStore(tableType, store_parameters)
718
    
719
    return Table(store)
330 720
  
721
  except Throwable, ex:
722
    raise RuntimeException("Can't create table, "+ str(ex))
723
  
724
def createDBF(definition, DbfFile, CRS="wsg86"):
725
  """ 
726
  Create a new shape layer 
727
      
728
      :param definition: layer data definition
729
      :type definition: Schema
730
      :param DbfFile: absolute path for shape files. 
731
      :type DbfFile: string
732
      :param geometryType: geometry type for shape
733
      :type geometryType: string
734
      :return: new shape layer
735
      :rtype: Layer
736
  """
737
  return createTable(
738
    definition, 
739
    "FilesystemExplorer", 
740
    "DBF", 
741
    DbfFile=DbfFile, 
742
    CRS=CRS,
743
  )
744
 
331 745
def currentProject():
332
  """ Return the current proyect of gvSIG """
746
  """
747
  Return the current gvSIG proyect
748
    :return: Proyect
749
  """
750

  
333 751
  application = ApplicationLocator.getManager()
334 752
  project = application.getCurrentProject()
335 753
  return Project(project)
336 754

  
337
def currentView():
338
  """ Return the current active view document or None """
755
def currentDocument():
756
  """
757
  Return the current active document if it's a DocumentTable or DocumentView2D
758
  
759
    :return: Active document, None
760
  """
761

  
339 762
  application = ApplicationLocator.getManager()
340 763
  doc = application.getActiveDocument()
341
  return View(doc)
764
  
765
  if doc.getTypeName() == "project.document.table":
766
    return Table(doc)
767
  
768
  if doc.getTypeName() == "project.document.view2d": 
769
    return View(doc)  
342 770

  
771
  return None  
772
  
773
def currentView():
774
  """
775
  Return the current active view document or None 
776
  
777
    :return: View or None
778
  """
779

  
780
  return View(currentProject().getView())
781

  
343 782
def currentLayer():
344
  """ Return the first active layer of the current view """
783
  """ 
784
  Return current view active layer
785
  
786
    :return: gvSIG active layer
787
  """
788
  
345 789
  return currentView().getLayer()
346 790

  
347 791
def SimplePointSymbol(color):
348 792
  """
349 793
  Return simple point symbol using parameter color
794
  
795
    :param color: Color name
796
    :return: gvSIG point symbol
350 797
  """
351 798
  return MapContextLocator.getSymbolManager().createSymbol(Geometry.TYPES.POINT, color)
352 799

  
353
#
800
def SimpleLineSymbol(color):
801
  """
802
  Return simple line symbol using parameter color
803
  
804
    :param color: Color name
805
    :return: gvSIG line symbol
806
  """
807
  return MapContextLocator.getSymbolManager().createSymbol(Geometry.TYPES.CURVE, color)
808

  
809
def SimplePoligonSymbol(color):
810
  """
811
  Return simple poligon symbol using parameter color
812
  
813
    :param color: Color name
814
    :return: gvSIG poligon symbol
815
  """
816
  return MapContextLocator.getSymbolManager().createSymbol(Geometry.TYPES.SURFACE, color)
817
  
818

  
819
def copyToDynObject(values, target):
820
  definition = target.getDynClass();
821
  fields = definition.getDynFields();
822
  for field in fields:
823
    name = field.getName()
824
    keys = values.keys()
825
    for k in keys:
826
      if k.lower() == name.lower():
827
        target.setDynValue(name, values[name])
828
        break#
354 829
# ====================================
355 830
#
356 831

  
......
370 845
  )
371 846
  
372 847
  for feature in layer.features():
373
      point = feature.geometry().centroid()
374
      #output.append(ID=feature.CODIGO, GEOMETRY=point)
375
      output.append(ID=feature.ID, GEOMETRY=point)
376
      #print feature.CODIGO, point
377
      print feature.ID, point
848
    point = feature.geometry().centroid()
849
    output.append(ID=feature.ID, GEOMETRY=point)
850
      
378 851
  output.commit() 
379 852
  
380
  currentView().addLayer(output())
381
   
382
def main2():
383
  layer = currentLayer()
384
  
385
  for feature in layer.features():
386
    if feature.TIPO == "COPUT":
387
      layer.getFeatureStore().getSelection().add(feature)
388
   
853
  currentView().addLayer(output()) 

Also available in: Unified diff