@@ -67,7 +67,6 @@ def __init__(self, ctx, lock, logger, url, index):
67
67
self ._suffix = '.lck'
68
68
self ._lock = lock
69
69
self ._logger = logger
70
- self ._listening = False
71
70
self ._created = False
72
71
self ._path , self ._folder = self ._getDataBaseInfo (url )
73
72
self ._url = url
@@ -80,11 +79,13 @@ def URL(self):
80
79
# XCloseListener
81
80
def queryClosing (self , event , owner ):
82
81
url = self ._url
82
+ print ("DocumentHandler.queryClosing() Url: %s" % url )
83
83
self ._logger .logprb (INFO , 'DocumentHandler' , 'queryClosing()' , 201 , url )
84
84
with self ._lock :
85
85
document = event .Source
86
- if self ._closeDataBase (document ):
87
- self .removeFolder ()
86
+ target = document .getDocumentSubStorage (self ._directory , READWRITE )
87
+ if self ._closeDataBase (document , target , 'queryClosing()' , 241 ):
88
+ self ._removeFolder ()
88
89
self ._url = None
89
90
self ._logger .logprb (INFO , 'DocumentHandler' , 'queryClosing()' , 202 , url )
90
91
@@ -95,15 +96,16 @@ def notifyClosing(self, event):
95
96
def notifyStorageChange (self , document , storage ):
96
97
# The document has been save as with a new name
97
98
url = document .getLocation ()
99
+ print ("DocumentHandler.notifyStorageChange() Url: %s" % url )
98
100
self ._logger .logprb (INFO , 'DocumentHandler' , 'notifyStorageChange()' , 211 , url )
99
101
with self ._lock :
100
102
newpath , newfolder = self ._getDataBaseInfo (url )
101
- if self ._switchDataBase (document , storage , newfolder ):
102
- self .removeFolder ()
103
+ target = storage .openStorageElement (self ._directory , READWRITE )
104
+ if self ._closeDataBase (document , target , 'notifyStorageChange()' , 251 ):
105
+ self ._removeFolder ()
103
106
self ._path = newpath
104
107
self ._folder = newfolder
105
108
self ._url = url
106
- #document.removeCloseListener(self)
107
109
self ._logger .logprb (INFO , 'DocumentHandler' , 'notifyStorageChange()' , 212 , url )
108
110
109
111
# XEventListener
@@ -117,25 +119,10 @@ def disposing(self, event):
117
119
self ._logger .logprb (INFO , 'DocumentHandler' , 'disposing()' , 222 , url )
118
120
119
121
# DocumentHandler setter methods
120
- def setListener (self , document ):
121
- # FIXME: With OpenOffice there is no Document in the info
122
- # FIXME: parameter provided during the connection
123
- if document is None :
124
- document = self ._getDocument ()
125
- if document is not None :
126
- # FIXME: We want to add the StorageChangeListener only once
127
- if not self ._listening :
128
- document .addStorageChangeListener (self )
129
- self ._listening = True
130
- # FIXME: If storage has been changed the closeListener has been removed
131
- document .addCloseListener (self )
132
-
133
122
def removeFolder (self ):
134
123
# XXX: The database folder will be deleted only if it was created
135
124
if self ._created :
136
- sf = getSimpleFile (self ._ctx )
137
- if sf .isFolder (self ._path ):
138
- sf .kill (self ._path )
125
+ self ._removeFolder ()
139
126
140
127
# DocumentHandler getter methods
141
128
def getConnectionUrl (self , storage ):
@@ -151,6 +138,17 @@ def getConnectionUrl(self, storage):
151
138
self ._logger .logprb (INFO , 'DocumentHandler' , 'getConnectionUrl()' , 231 , count )
152
139
return self ._getConnectionUrl (exist )
153
140
141
+ def getDocument (self ):
142
+ document = None
143
+ interface = 'com.sun.star.frame.XStorable'
144
+ components = getDesktop (self ._ctx ).getComponents ().createEnumeration ()
145
+ while components .hasMoreElements ():
146
+ component = components .nextElement ()
147
+ if hasInterface (component , interface ) and component .hasLocation () and component .getLocation () == self ._url :
148
+ document = component
149
+ break
150
+ return document
151
+
154
152
# DocumentHandler private getter methods
155
153
def _getDataBaseInfo (self , location ):
156
154
transformer = getUrlTransformer (self ._ctx )
@@ -177,65 +175,37 @@ def _getDocumentName(self, title):
177
175
name , sep , extension = title .rpartition ('.' )
178
176
return name if sep else extension
179
177
180
- def _getDocument (self ):
181
- document = None
182
- interface = 'com.sun.star.frame.XStorable'
183
- components = getDesktop (self ._ctx ).getComponents ().createEnumeration ()
184
- while components .hasMoreElements ():
185
- component = components .nextElement ()
186
- if hasInterface (component , interface ) and component .hasLocation () and component .getLocation () == self ._url :
187
- document = component
188
- break
189
- return document
190
-
191
178
def _getConnectionUrl (self , exist ):
192
179
path = self ._path [self ._index :]
193
180
url = '%s%s/%s%s' % (g_protocol , path , g_catalog , g_options )
194
181
return url + g_exist if exist else url + g_create
195
182
196
- def _getStorageName (self , name , oldname , newname ):
197
- return name .replace (oldname , newname )
198
-
199
- def _closeDataBase (self , document ):
183
+ def _closeDataBase (self , document , target , method , resource ):
200
184
try :
201
- target = document .getDocumentSubStorage (self ._directory , READWRITE )
202
185
service = 'com.sun.star.embed.FileSystemStorageFactory'
203
186
args = (self ._path , SEEKABLEREAD )
204
187
source = createService (self ._ctx , service ).createInstanceWithArguments (args )
205
188
count = self ._copyStorage (source , target )
206
- self ._logger .logprb (INFO , 'DocumentHandler' , '_closeDataBase()' , 241 , count )
189
+ self ._logger .logprb (INFO , 'DocumentHandler' , method , resource , count )
207
190
document .store ()
208
191
return True
209
192
except Exception as e :
210
- self ._logger .logprb (SEVERE , 'DocumentHandler' , '_closeDataBase()' , 242 , self ._url , traceback .format_exc ())
211
- return False
212
-
213
- def _switchDataBase (self , document , storage , newname ):
214
- try :
215
- target = storage .openStorageElement (self ._directory , READWRITE )
216
- service = 'com.sun.star.embed.FileSystemStorageFactory'
217
- args = (self ._path , SEEKABLEREAD )
218
- source = createService (self ._ctx , service ).createInstanceWithArguments (args )
219
- count = self ._copyStorage (source , target )
220
- self ._logger .logprb (INFO , 'DocumentHandler' , '_switchDataBase()' , 251 , count )
221
- document .store ()
222
- return True
223
- except Exception as e :
224
- self ._logger .logprb (SEVERE , 'DocumentHandler' , '_switchDataBase()' , 252 , self ._url , traceback .format_exc ())
193
+ self ._logger .logprb (SEVERE , 'DocumentHandler' , method , resource + 1 , self ._url , traceback .format_exc ())
225
194
return False
226
195
227
196
# DocumentHandler private setter methods
228
197
def _copyStorage (self , source , target ):
229
198
count = 0
230
- for name in source .getElementNames ():
231
- if source .isStreamElement (name ):
232
- if target .hasByName (name ):
233
- target .removeElement (name )
234
- source .copyElementTo (name , target , name )
235
- count += 1
236
- else :
237
- count += self ._copyStorage (source .openStorageElement (name , SEEKABLEREAD ),
238
- target .openStorageElement (name , READWRITE ))
199
+ if source .hasElements ():
200
+ for name in source .getElementNames ():
201
+ if source .isStreamElement (name ):
202
+ if target .hasByName (name ):
203
+ target .removeElement (name )
204
+ source .copyElementTo (name , target , name )
205
+ count += 1
206
+ else :
207
+ count += self ._copyStorage (source .openStorageElement (name , SEEKABLEREAD ),
208
+ target .openStorageElement (name , READWRITE ))
239
209
target .commit ()
240
210
target .dispose ()
241
211
source .dispose ()
@@ -260,3 +230,8 @@ def _extractStorage(self, sf, source, url):
260
230
def _getPath (self , path , name ):
261
231
return '%s/%s' % (path , name )
262
232
233
+ def _removeFolder (self ):
234
+ sf = getSimpleFile (self ._ctx )
235
+ if sf .isFolder (self ._path ):
236
+ sf .kill (self ._path )
237
+
0 commit comments