Exemple #1
0
 def registerInstance(self, scheme, plugin, replace):
     msg = "ContentProvider registerInstance: Scheme/Plugin: %s/%s ... Started" % (
         scheme, plugin)
     logMessage(self.ctx, INFO, msg, 'ContentProvider',
                'registerInstance()')
     try:
         datasource = DataSource(self.ctx, scheme, plugin)
     except Exception as e:
         msg = "ContentProvider registerInstance: Error: %s - %s" % (
             e, traceback.print_exc())
         logMessage(self.ctx, SEVERE, msg, 'ContentProvider',
                    'registerInstance()')
         return None
     if not datasource.IsValid:
         logMessage(self.ctx, SEVERE, datasource.Error, 'ContentProvider',
                    'registerInstance()')
         return None
     self.Scheme = scheme
     self.Plugin = plugin
     msg = "ContentProvider registerInstance: addCloseListener ... Done"
     logMessage(self.ctx, INFO, msg, 'ContentProvider',
                'registerInstance()')
     datasource.Connection.Parent.DatabaseDocument.addCloseListener(self)
     self.DataSource = datasource
     msg = "ContentProvider registerInstance: Scheme/Plugin: %s/%s ... Done" % (
         scheme, plugin)
     logMessage(self.ctx, INFO, msg, 'ContentProvider',
                'registerInstance()')
     return self
Exemple #2
0
 def queryClosing(self, source, ownership):
     self.deregisterInstance(self.Scheme, self.Plugin)
     query = 'SHUTDOWN COMPACT;'
     statement = self.DataSource.Connection.createStatement()
     statement.execute(query)
     msg = "ContentProvider queryClosing: Scheme: %s ... Done" % self.Scheme
     logMessage(self.ctx, INFO, msg, 'ContentProvider', 'queryClosing()')
Exemple #3
0
 def compareContentIds(self, id1, id2):
     print("ContentProvider.compareContentIds() 1")
     try:
         init1 = True
         init2 = True
         compare = -1
         identifier1 = id1.getContentIdentifier()
         identifier2 = id2.getContentIdentifier()
         msg = "Identifiers: %s - %s ..." % (identifier1, identifier2)
         if not id1.IsInitialized:
             init1 = id1.initialize(self._defaultUser)
         if not id2.IsInitialized:
             init2 = id2.initialize(self._defaultUser)
         if not init1:
             compare = -10
         elif not init2:
             compare = 10
         elif identifier1 == identifier2 and id1.User.Name == id2.User.Name:
             msg += " seem to be the same..."
             compare = 0
         msg += " ... Done"
         logMessage(self.ctx, INFO, msg, 'ContentProvider',
                    'compareContentIds()')
         return compare
     except Exception as e:
         print("ContentProvider.compareContentIds() Error: %s - %s" %
               (e, traceback.print_exc()))
Exemple #4
0
 def __init__(self, ctx):
     self.ctx = ctx
     self.Scheme = ''
     self.Plugin = ''
     self.DataSource = None
     self._defaultUser = ''
     msg = "ContentProvider: %s loading ... Done" % g_identifier
     logMessage(self.ctx, INFO, msg, 'ContentProvider', '__init__()')
Exemple #5
0
 def _clearLog(self, dialog):
     try:
         clearLogger()
         logMessage(self.ctx, INFO, "ClearingLog ... Done", 'OptionsDialog',
                    '_doClearLog()')
         url = getLoggerUrl(self.ctx)
         self._setDialogText(dialog, url)
     except Exception as e:
         msg = "Error: %s - %s" % (e, traceback.print_exc())
         logMessage(self.ctx, SEVERE, msg, "OptionsDialog", "_doClearLog()")
Exemple #6
0
 def initialize(self, identifier, data):
     self.Identifier = identifier
     self.MetaData = data
     msg = "Content loading ... "
     creatablecontent = self._getCreatableContentsInfo()
     self.MetaData.insertValue('CreatableContentsInfo', creatablecontent)
     self._commandInfo = self._getCommandInfo()
     self._propertySetInfo = self._getPropertySetInfo()
     self.contentListeners = []
     self._propertiesListener = {}
     msg += "Done."
     logMessage(self.ctx, INFO, msg, 'Content', 'initialize()')
Exemple #7
0
 def createContentIdentifier(self, url):
     try:
         msg = "Identifier: %s ... " % url
         identifier = Identifier(self.ctx, self.DataSource, url)
         msg += "Done"
         logMessage(self.ctx, INFO, msg, 'ContentProvider',
                    'createContentIdentifier()')
         return identifier
     except Exception as e:
         msg += "Error: %s - %s" % (e, traceback.print_exc())
         logMessage(self.ctx, SEVERE, msg, 'ContentProvider',
                    'createContentIdentifier()')
Exemple #8
0
 def queryContent(self, identifier):
     url = identifier.getContentIdentifier()
     print("ContentProvider.queryContent() %s" % url)
     if not identifier.IsInitialized:
         if not identifier.initialize(self._defaultUser):
             msg = "Identifier: %s ... Error: %s" % (url, identifier.Error)
             print("ContentProvider.queryContent() %s" % msg)
             logMessage(self.ctx, INFO, msg, 'ContentProvider',
                        'queryContent()')
             raise IllegalIdentifierException(identifier.Error, self)
     self._defaultUser = identifier.User.Name
     content = identifier.getContent()
     msg = "Identitifer: %s ... Done" % url
     logMessage(self.ctx, INFO, msg, 'ContentProvider', 'queryContent()')
     return content
Exemple #9
0
 def execute(self, command, id, environment):
     try:
         msg = "command.Name: %s" % command.Name
         print("Content.execute() %s **********************************" %
               msg)
         logMessage(self.ctx, INFO, msg, 'Content', 'execute()')
         if command.Name == 'getCommandInfo':
             msg = "command.Name: %s ******************************************" % command.Name
             logMessage(self.ctx, INFO, msg, 'Content', 'execute()')
             return CommandInfo(self._commandInfo)
         elif command.Name == 'getPropertySetInfo':
             return PropertySetInfo(self._propertySetInfo)
         elif command.Name == 'getPropertyValues':
             namedvalues = getPropertiesValues(self.ctx, self,
                                               command.Argument)
             return Row(namedvalues)
         elif command.Name == 'setPropertyValues':
             return setPropertiesValues(self.ctx, self, environment,
                                        command.Argument)
         elif command.Name == 'delete':
             self.MetaData.insertValue(
                 'Trashed', self.Identifier.updateTrashed(True, False))
         elif command.Name == 'open':
             print("Content.execute() open 1")
             if self.IsFolder:
                 print("Content.execute() open 2")
                 # Not Used: command.Argument.Properties - Implement me ;-)
                 select = self.Identifier.getFolderContent(self.MetaData)
                 msg += " IsFolder: %s" % self.IsFolder
                 logMessage(self.ctx, INFO, msg, 'Content', 'execute()')
                 return DynamicResultSet(self.ctx, select)
             elif self.IsDocument:
                 print("Content.execute() open 3")
                 sf = getSimpleFile(self.ctx)
                 url, size = self.Identifier.getDocumentContent(
                     sf, self.MetaData, 0)
                 if not size:
                     print("Content.execute() open 4")
                     title = self.MetaData.getValue('Title')
                     msg = "Error while downloading file: %s" % title
                     raise CommandAbortedException(msg, self)
                 print("Content.execute() open 5")
                 s = command.Argument.Sink
                 sink = uno.getTypeByName('com.sun.star.io.XActiveDataSink')
                 stream = uno.getTypeByName(
                     'com.sun.star.io.XActiveDataStreamer')
                 isreadonly = self.MetaData.getValue('IsReadOnly')
                 if s.queryInterface(sink):
                     s.setInputStream(sf.openFileRead(url))
                 elif not isreadonly and s.queryInterface(stream):
                     s.setStream(sf.openFileReadWrite(url))
                 print("Content.execute() open 6")
         elif command.Name == 'insert':
             if self.IsFolder:
                 mediatype = self.Identifier.DataSource.Provider.Folder
                 self.MetaData.insertValue('MediaType', mediatype)
                 if self.Identifier.insertNewFolder(self.MetaData):
                     pass
                 #identifier = self.getIdentifier()
                 #ucp = getUcp(self.ctx, identifier.getContentProviderScheme())
                 #self.addPropertiesChangeListener(('Id', 'Name', 'Size', 'Trashed', 'Loaded'), ucp)
                 #propertyChange(self, 'Id', identifier.Id, CREATED | FOLDER)
                 #parent = identifier.getParent()
                 #event = getContentEvent(self, INSERTED, self, parent)
                 #ucp.queryContent(parent).notify(event)
             elif self.IsDocument:
                 # The Insert command is only used to create a new document (File Save As)
                 # it saves content from createNewContent from the parent folder
                 stream = command.Argument.Data
                 replace = command.Argument.ReplaceExisting
                 sf = getSimpleFile(self.ctx)
                 url = self.Identifier.DataSource.Provider.SourceURL
                 target = '%s/%s' % (url, self.Identifier.Id)
                 if sf.exists(target) and not replace:
                     pass
                 elif stream.queryInterface(
                         uno.getTypeByName('com.sun.star.io.XInputStream')):
                     sf.writeFile(target, stream)
                     mediatype = getMimeType(self.ctx, stream)
                     self.MetaData.insertValue('MediaType', mediatype)
                     stream.closeInput()
                     if self.Identifier.insertNewDocument(self.MetaData):
                         pass
                     #ucp = getUcp(self.ctx, identifier.getContentProviderScheme())
                     #self.addPropertiesChangeListener(('Id', 'Name', 'Size', 'Trashed', 'Loaded'), ucp)
                     #propertyChange(self, 'Id', identifier.Id, CREATED | FILE)
                     #parent = identifier.getParent()
                     #event = getContentEvent(self, INSERTED, self, parent)
                     #ucp.queryContent(parent).notify(event)
         elif command.Name == 'createNewContent' and self.IsFolder:
             return self.createNewContent(command.Argument)
         elif command.Name == 'transfer' and self.IsFolder:
             # Transfer command is used for document 'File Save' or 'File Save As'
             # NewTitle come from:
             # - Last segment path of 'XContent.getIdentifier().getContentIdentifier()' for OpenOffice
             # - Property 'Title' of 'XContent' for LibreOffice
             # If the content has been renamed, the last segment is the new Title of the content
             title = command.Argument.NewTitle
             source = command.Argument.SourceURL
             move = command.Argument.MoveData
             clash = command.Argument.NameClash
             # We check if 'command.Argument.NewTitle' is an Id
             if self.Identifier.isChildId(title):
                 id = title
             else:
                 # It appears that 'command.Argument.NewTitle' is not an Id but a Title...
                 # If 'NewTitle' exist and is unique in the folder, we can retrieve its Id
                 id = self.Identifier.selectChildId(title)
                 if not id:
                     # Id could not be found: NewTitle does not exist in the folder...
                     # For new document (File Save As) we use commands:
                     # - createNewContent: for creating an empty new Content
                     # - Insert at new Content for committing change
                     # To execute these commands, we must throw an exception
                     msg = "Couln't handle Url: %s" % source
                     raise InteractiveBadTransferURLException(msg, self)
             sf = getSimpleFile(self.ctx)
             if not sf.exists(source):
                 raise CommandAbortedException(
                     "Error while saving file: %s" % source, self)
             inputstream = sf.openFileRead(source)
             target = '%s/%s' % (
                 self.Identifier.DataSource.Provider.SourceURL, id)
             sf.writeFile(target, inputstream)
             inputstream.closeInput()
             # We need to commit change: Size is the property chainning all DataSource change
             if not self.Identifier.updateSize(id, self.Identifier.Id,
                                               sf.getSize(target)):
                 raise CommandAbortedException(
                     "Error while saving file: %s" % source, self)
             #ucb = getUcb(self.ctx)
             #identifier = ucb.createContentIdentifier('%s/%s' % (self.Identifier.BaseURL, title))
             #data = getPropertyValueSet({'Size': sf.getSize(target)})
             #content = ucb.queryContent(identifier)
             #executeContentCommand(content, 'setPropertyValues', data, environment)
             if move:
                 pass  #must delete object
         elif command.Name == 'flush' and self.IsFolder:
             pass
     except CommandAbortedException as e:
         raise e
     except InteractiveBadTransferURLException as e:
         raise e
     except Exception as e:
         msg += " ERROR: %s" % e
         print("Content.execute() ERROR: %s" % msg)
         logMessage(self.ctx, SEVERE, msg, 'Content', 'execute()')
Exemple #10
0
 def deregisterInstance(self, scheme, argument):
     msg = "ContentProvider deregisterInstance: Scheme: %s ... Done" % scheme
     logMessage(self.ctx, INFO, msg, 'ContentProvider',
                'deregisterInstance()')
Exemple #11
0
 def __del__(self):
     msg = "ContentProvider; %s unloading ... Done" % g_identifier
     logMessage(self.ctx, INFO, msg, 'ContentProvider', '__del__()')