@@ -67,7 +67,6 @@ def __init__(self, ctx, lock, logger, url, index):
6767 self ._suffix = '.lck'
6868 self ._lock = lock
6969 self ._logger = logger
70- self ._listening = False
7170 self ._created = False
7271 self ._path , self ._folder = self ._getDataBaseInfo (url )
7372 self ._url = url
@@ -80,11 +79,13 @@ def URL(self):
8079 # XCloseListener
8180 def queryClosing (self , event , owner ):
8281 url = self ._url
82+ print ("DocumentHandler.queryClosing() Url: %s" % url )
8383 self ._logger .logprb (INFO , 'DocumentHandler' , 'queryClosing()' , 201 , url )
8484 with self ._lock :
8585 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 ()
8889 self ._url = None
8990 self ._logger .logprb (INFO , 'DocumentHandler' , 'queryClosing()' , 202 , url )
9091
@@ -95,15 +96,16 @@ def notifyClosing(self, event):
9596 def notifyStorageChange (self , document , storage ):
9697 # The document has been save as with a new name
9798 url = document .getLocation ()
99+ print ("DocumentHandler.notifyStorageChange() Url: %s" % url )
98100 self ._logger .logprb (INFO , 'DocumentHandler' , 'notifyStorageChange()' , 211 , url )
99101 with self ._lock :
100102 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 ()
103106 self ._path = newpath
104107 self ._folder = newfolder
105108 self ._url = url
106- #document.removeCloseListener(self)
107109 self ._logger .logprb (INFO , 'DocumentHandler' , 'notifyStorageChange()' , 212 , url )
108110
109111 # XEventListener
@@ -117,25 +119,10 @@ def disposing(self, event):
117119 self ._logger .logprb (INFO , 'DocumentHandler' , 'disposing()' , 222 , url )
118120
119121 # 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-
133122 def removeFolder (self ):
134123 # XXX: The database folder will be deleted only if it was created
135124 if self ._created :
136- sf = getSimpleFile (self ._ctx )
137- if sf .isFolder (self ._path ):
138- sf .kill (self ._path )
125+ self ._removeFolder ()
139126
140127 # DocumentHandler getter methods
141128 def getConnectionUrl (self , storage ):
@@ -151,6 +138,17 @@ def getConnectionUrl(self, storage):
151138 self ._logger .logprb (INFO , 'DocumentHandler' , 'getConnectionUrl()' , 231 , count )
152139 return self ._getConnectionUrl (exist )
153140
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+
154152 # DocumentHandler private getter methods
155153 def _getDataBaseInfo (self , location ):
156154 transformer = getUrlTransformer (self ._ctx )
@@ -177,65 +175,37 @@ def _getDocumentName(self, title):
177175 name , sep , extension = title .rpartition ('.' )
178176 return name if sep else extension
179177
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-
191178 def _getConnectionUrl (self , exist ):
192179 path = self ._path [self ._index :]
193180 url = '%s%s/%s%s' % (g_protocol , path , g_catalog , g_options )
194181 return url + g_exist if exist else url + g_create
195182
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 ):
200184 try :
201- target = document .getDocumentSubStorage (self ._directory , READWRITE )
202185 service = 'com.sun.star.embed.FileSystemStorageFactory'
203186 args = (self ._path , SEEKABLEREAD )
204187 source = createService (self ._ctx , service ).createInstanceWithArguments (args )
205188 count = self ._copyStorage (source , target )
206- self ._logger .logprb (INFO , 'DocumentHandler' , '_closeDataBase()' , 241 , count )
189+ self ._logger .logprb (INFO , 'DocumentHandler' , method , resource , count )
207190 document .store ()
208191 return True
209192 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 ())
225194 return False
226195
227196 # DocumentHandler private setter methods
228197 def _copyStorage (self , source , target ):
229198 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 ))
239209 target .commit ()
240210 target .dispose ()
241211 source .dispose ()
@@ -260,3 +230,8 @@ def _extractStorage(self, sf, source, url):
260230 def _getPath (self , path , name ):
261231 return '%s/%s' % (path , name )
262232
233+ def _removeFolder (self ):
234+ sf = getSimpleFile (self ._ctx )
235+ if sf .isFolder (self ._path ):
236+ sf .kill (self ._path )
237+
0 commit comments