Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.app / org.gvsig.scripting.app.mainplugin / src / main / resources-plugin / scripting / lib / gvsig / featurestore.py @ 740

History | View | Annotate | Download (2.73 KB)

1

    
2
from java.lang import RuntimeException
3
from org.gvsig.fmap.dal.feature.impl import DefaultFeatureStore as JFeatureStore
4
from org.gvsig.fmap.dal.feature import FeatureQueryOrder
5
from java.lang import RuntimeException
6
from org.gvsig.app import ApplicationLocator
7
from org.gvsig.tools.evaluator import Evaluator
8

    
9
#
10
# Save methods edit and update that are rewriten in python
11
#
12
super_edit = JFeatureStore.edit
13
super_update = JFeatureStore.update
14

    
15
def __getSchema(self):
16
  return self.getDefaultFeatureType()
17

    
18
def __features(self, expresion = None, sortby="", asc=True):
19
  if expresion == None and sortby =="":
20
    return self.getFeatureSet()
21

    
22
  try:
23
    application = ApplicationLocator.getManager()
24
    datamanager =  application.getDataManager()
25
    query = self.createFeatureQuery()
26
    if sortby != "":
27
      order = FeatureQueryOrder()
28
      order.add(sortby, asc)
29
      query.setOrder(order)
30
    if expresion != None:
31
      if isinstance(expresion,Evaluator):
32
        query.setFilter(expresion)
33
      else:
34
        query.setFilter(datamanager.createExpresion(expresion))
35
    fset = self.getFeatureSet(query)
36
    return fset
37
  except Exception, e:
38
    return None
39

    
40
def __iter(self):
41
  return self.getFeatureSet().__iter__()
42

    
43
def __len(self):
44
  return self.getFeatureSet().getSize()
45

    
46
def __append(self, *args, **kwargs):
47
  try:
48
    if not self.isEditing():
49
      self.edit()
50

    
51
    if len(args) ==1:
52
      if not isinstance(args[0], dict):
53
        raise ValueError("Argument should be a dict")
54
      if kwargs == None:
55
        kwargs = args[0]
56
      else:
57
        kwargs.update(args[0])
58

    
59
    f = self.createNewFeature()
60

    
61
    if f == None:
62
      raise RuntimeException("Failed to create a new Feature")
63

    
64
    for k,v in kwargs.iteritems():
65
      f.set(k,v)
66
    self.insert(f)
67

    
68
  except Exception, ex:
69
    raise RuntimeException("Can't append values %s to layer %s (%s)" % (
70
      repr(kwargs),
71
      self.getName(),
72
      str(ex)
73
      )
74
    )
75

    
76
def __update(self, feature):
77
  if not self.isEditing():
78
      self.edit()
79
  super_update(self, feature)
80

    
81
def __edit(self, mode=JFeatureStore.MODE_FULLEDIT):
82
  if not self.isEditing():
83
    super_edit(self, mode)
84

    
85
def __commit(self):
86
  try:
87
    self.finishEditing()
88
  except Exception, ex:
89
    self.abort()
90
    raise RuntimeException("Can't finish layer edition, cancelling changes. %s" % repr(ex))
91

    
92
def __abort(self):
93
  self.cancelEditing()
94

    
95
def __call(self):
96
  return self
97

    
98

    
99
#
100
# Inject new methods in the class JFeatureStore
101
#
102
JFeatureStore.getSchema = __getSchema
103
JFeatureStore.features = __features
104
JFeatureStore.append = __append
105
JFeatureStore.update = __update
106
JFeatureStore.edit = __edit
107
JFeatureStore.commit = __commit
108
JFeatureStore.abort = __abort
109
JFeatureStore.__call__ = __call
110
JFeatureStore.__iter__ = __iter
111
JFeatureStore.__len__ = __len
112

    
113

    
114