Пример #1
0
 def _updateDrive(self, user):
     separator = ','
     start = parseDateTime()
     call = self.DataBase.getDriveCall(user.Id, separator, 1, start)
     roots = [user.RootId]
     rows, items, parents, page, row = self._getDriveContent(call, user, roots, separator, start)
     rows += self._filterParents(call, user.Provider, items, parents, roots, separator, start)
     rejected = self._getRejectedItems(user.Provider, parents, items)
     if row > 0:
         call.executeBatch()
     call.close()
     end = parseDateTime()
     self.DataBase.updateUserTimeStamp(user.Id, end)
     return rejected, rows, page, row, end
Пример #2
0
 def _getNewContent(self, itemid, contenttype):
     timestamp = parseDateTime()
     isfolder = self.User.Provider.isFolder(contenttype)
     isdocument = self.User.Provider.isDocument(contenttype)
     isroot = itemid == self.User.RootId
     data = KeyMap()
     data.insertValue('Id', itemid)
     data.insertValue('ObjectId', itemid)
     data.insertValue('Title', '')
     data.insertValue('TitleOnServer', '')
     data.insertValue('DateCreated', timestamp)
     data.insertValue('DateModified', timestamp)
     data.insertValue('ContentType', contenttype)
     mediatype = '' if isdocument else contenttype
     data.insertValue('MediaType', mediatype)
     data.insertValue('Size', 0)
     data.insertValue('Trashed', False)
     data.insertValue('IsRoot', isroot)
     data.insertValue('IsFolder', isfolder)
     data.insertValue('IsDocument', isdocument)
     data.insertValue('CanAddChild', isfolder)
     data.insertValue('CanRename', True)
     data.insertValue('IsReadOnly', False)
     data.insertValue('IsVersionable', isdocument)
     data.insertValue('Loaded', True)
     data.insertValue('BaseURI', self.getContentIdentifier())
     return data
Пример #3
0
 def _synchronize(self):
     if self.Provider.isOffLine():
         msg = getMessage(self.ctx, 111)
         logMessage(self.ctx, INFO, msg, 'Replicator', '_synchronize()')
     elif not self.canceled:
         timestamp = parseDateTime()
         self._syncData(timestamp)
Пример #4
0
 def _getNewContent(self):
     try:
         print("Identifier._getNewContent() 1")
         timestamp = parseDateTime()
         isfolder = self.User.Provider.isFolder(self._contenttype)
         isdocument = self.User.Provider.isDocument(self._contenttype)
         data = KeyMap()
         data.insertValue('Id', self.Id)
         data.insertValue('ObjectId', self.Id)
         data.insertValue('Title', '')
         data.insertValue('TitleOnServer', '')
         data.insertValue('DateCreated', timestamp)
         data.insertValue('DateModified', timestamp)
         data.insertValue('ContentType', self._contenttype)
         mediatype = self._contenttype if isfolder else ''
         data.insertValue('MediaType', mediatype)
         data.insertValue('Size', 0)
         data.insertValue('Trashed', False)
         data.insertValue('IsRoot', self.isRoot())
         data.insertValue('IsFolder', isfolder)
         data.insertValue('IsDocument', isdocument)
         data.insertValue('CanAddChild', isfolder)
         data.insertValue('CanRename', True)
         data.insertValue('IsReadOnly', False)
         data.insertValue('IsVersionable', isdocument)
         data.insertValue('Loaded', True)
         data.insertValue('BaseURI', self.getContentIdentifier())
         print("Identifier._getNewContent() 2 %s - %s" %
               (self.Id, self.getContentIdentifier()))
         return data
     except Exception as e:
         print("Identifier._getNewContent() ERROR: %s - %s" %
               (e, traceback.print_exc()))
Пример #5
0
 def insertItem(self, user, item):
     timestamp = parseDateTime()
     rootid = user.getValue('RootId')
     c1 = self._getDataSourceCall('deleteParent')
     c2 = self._getDataSourceCall('insertParent')
     if not self._prepareItemCall('update', c1, c2, user, item, timestamp):
         self._prepareItemCall('insert', c1, c2, user, item, timestamp)
     c1.close()
     c2.close()
     id = self.Provider.getItemId(item)
     identifier = KeyMap()
     identifier.insertValue('Id', id)
     return self.selectItem(user, identifier)
Пример #6
0
 def insertAndSelectItem(self, user, data):
     item = None
     separator = ','
     timestamp = parseDateTime()
     call = self._getCall('insertAndSelectItem')
     call.setString(1, user.Id)
     call.setString(2, separator)
     call.setLong(3, 0)
     call.setTimestamp(4, timestamp)
     id = user.Provider.getItemId(data)
     parents = user.Provider.getItemParent(data, user.RootId)
     self._mergeItem(call, user.Provider, data, id, parents, separator, timestamp)
     result = call.executeQuery()
     if result.next():
         item = getKeyMapFromResult(result)
     call.close()
     return item
Пример #7
0
 def _pushData(self, user, start):
     try:
         results = []
         end = parseDateTime()
         chunk = user.Provider.Chunk
         url = user.Provider.SourceURL
         uploader = user.Request.getUploader(chunk, url, self.DataBase.callBack)
         for item in self.DataBase.getInsertedItems(user.Id, start, end):
             results.append(self._synchronizeCreatedItems(user, uploader, item))
         for item in self.DataBase.getUpdatedItems(user.Id, start, end):
             results.append(self._synchronizeUpdatedItems(user, uploader, item))
         if all(results):
             pass
             self.DataBase.updateUserTimeStamp(user.Id, end)
             print("Replicator._pushData() Created / Updated Items OK")
         return results
     except Exception as e:
         print("Replicator.synchronize() ERROR: %s - %s" % (e, traceback.print_exc()))
Пример #8
0
 def updateContent(self, userid, itemid, property, value):
     updated = False
     timestamp = parseDateTime()
     if property == 'Title':
         update = self._getCall('updateTitle')
         update.setTimestamp(1, timestamp)
         update.setString(2, value)
         update.setString(3, itemid)
         updated = update.execute() == 0
         update.close()
     elif property == 'Size':
         update = self._getCall('updateSize')
         # The Size of the file is not sufficient to detect a 'Save' of the file,
         # It can be modified and have the same Size...
         # For this we temporarily update the Size to 0
         update.setTimestamp(1, timestamp)
         update.setLong(2, 0)
         update.setString(3, itemid)
         update.execute()
         update.setLong(2, value)
         update.setString(3, itemid)
         updated = update.execute() == 0
         update.close()
     elif property == 'Trashed':
         update = self._getCall('updateTrashed')
         update.setTimestamp(1, timestamp)
         update.setBoolean(2, value)
         update.setString(3, itemid)
         updated = update.execute() == 0
         update.close()
     if updated:
         # We need to update Capabilities table to be able to retrieve
         # changes by user with system versioning
         # TODO: I cannot use a procedure performing the two UPDATE
         # TODO: without the system versioning malfunctioning...
         # TODO: As a workaround I use two successive UPDATE queries
         update = self._getCall('updateCapabilities')
         update.setTimestamp(1, timestamp)
         update.setString(2, userid)
         update.setString(3, itemid)
         update.execute()
         update.close()
         # Start Replicator for pushing changes…
         self.sync.set()
Пример #9
0
 def updateFolderContent(self, user, content):
     rows = []
     separator = ','
     timestamp = parseDateTime()
     call = self._getCall('mergeItem')
     call.setString(1, user.Id)
     call.setString(2, separator)
     call.setLong(3, 0)
     call.setTimestamp(4, timestamp)
     enumerator = user.Provider.getFolderContent(user.Request, content)
     while enumerator.hasMoreElements():
         item = enumerator.nextElement()
         id = user.Provider.getItemId(item)
         parents = user.Provider.getItemParent(item, user.RootId)
         rows.append(self._mergeItem(call, user.Provider, item, id, parents, separator, timestamp))
         call.addBatch()
     if enumerator.RowCount > 0:
         call.executeBatch()
     call.close()
     print("DataBase._updateFolderContent() %s - %s" % (all(rows), len(rows)))
     return all(rows)
Пример #10
0
 def insertUser(self, user, root):
     userid = self.Provider.getUserId(user)
     username = self.Provider.getUserName(user)
     displayname = self.Provider.getUserDisplayName(user)
     rootid = self.Provider.getRootId(root)
     timestamp = parseDateTime()
     insert = self._getDataSourceCall('insertUser')
     insert.setString(1, username)
     insert.setString(2, displayname)
     insert.setString(3, rootid)
     insert.setTimestamp(4, timestamp)
     insert.setString(5, userid)
     insert.execute()
     insert.close()
     if not self._executeRootCall('update', userid, root, timestamp):
         self._executeRootCall('insert', userid, root, timestamp)
     data = KeyMap()
     data.insertValue('UserId', userid)
     data.insertValue('UserName', username)
     data.insertValue('RootId', rootid)
     data.insertValue('RootName', self.Provider.getRootTitle(root))
     return data
Пример #11
0
 def insertUser(self, provider, user, root):
     userid = provider.getUserId(user)
     username = provider.getUserName(user)
     displayname = provider.getUserDisplayName(user)
     rootid = provider.getRootId(root)
     rootname = provider.getRootTitle(root)
     timestamp = parseDateTime()
     insert = self._getCall('insertUser')
     insert.setString(1, username)
     insert.setString(2, displayname)
     insert.setString(3, rootid)
     insert.setTimestamp(4, timestamp)
     insert.setString(5, userid)
     insert.execute()
     insert.close()
     self._mergeRoot(provider, userid, rootid, rootname, root, timestamp)
     data = KeyMap()
     data.insertValue('UserId', userid)
     data.insertValue('UserName', username)
     data.insertValue('RootId', rootid)
     data.insertValue('RootName', rootname)
     data.insertValue('Token', '')
     return data
Пример #12
0
 def _updateFolderContent(self, request, user, content):
     updated = []
     c1 = self._getDataSourceCall('updateItem')
     c2 = self._getDataSourceCall('updateCapability')
     c3 = self._getDataSourceCall('insertItem')
     c4 = self._getDataSourceCall('insertCapability')
     c5 = self._getDataSourceCall('deleteParent')
     c6 = self._getDataSourceCall('insertParent')
     userid = user.getValue('UserId')
     rootid = user.getValue('RootId')
     timestamp = parseDateTime()
     enumerator = self.Provider.getFolderContent(request, content)
     while enumerator.hasMoreElements():
         item = enumerator.nextElement()
         print("datasource._updateFolderContent() %s" % (item, ))
         updated.append(self._mergeItem(c1, c2, c3, c4, c5, c6, userid, rootid, item, timestamp))
     c1.close()
     c2.close()
     c3.close()
     c4.close()
     c5.close()
     c6.close()
     return all(updated)
Пример #13
0
    def getContent(self):
        try:
            if self.IsNew:
                timestamp = parseDateTime()
                isfolder = self.DataSource.Provider.isFolder(self._ContentType)
                isdocument = self.DataSource.Provider.isDocument(
                    self._ContentType)
                data = KeyMap()
                data.insertValue('Id', self.Id)
                data.insertValue('ObjectId', self.Id)
                data.insertValue('Title', '')
                data.insertValue('TitleOnServer', '')
                data.insertValue('DateCreated', timestamp)
                data.insertValue('DateModified', timestamp)
                data.insertValue('ContentType', self._ContentType)
                mediatype = self._ContentType if isfolder else ''
                data.insertValue('MediaType', mediatype)
                data.insertValue('Size', 0)
                data.insertValue('Trashed', False)
                data.insertValue('IsRoot', self.IsRoot)
                data.insertValue('IsFolder', isfolder)
                data.insertValue('IsDocument', isdocument)
                data.insertValue('CanAddChild', True)
                data.insertValue('CanRename', True)
                data.insertValue('IsReadOnly', False)
                data.insertValue('IsVersionable', isdocument)
                data.insertValue('Loaded', True)

            else:
                data = self.User.getItem(self.DataSource, self.MetaData)
            data.insertValue('BaseURI', self.MetaData.getValue('BaseURI'))
            content = Content(self.ctx, self, data)
            #content.initialize()
            return content
        except Exception as e:
            print("Identifier.getContent() ERROR: %s - %s" %
                  (e, traceback.print_exc()))
Пример #14
0
 def updateContent(self, userid, itemid, property, value):
     try:
         updated = False
         if property == 'Title':
             update = self._getCall('updateTitle')
             update.setString(1, value)
             update.setString(2, itemid)
             updated = update.execute() == 0
             update.close()
         elif property == 'Size':
             update = self._getCall('updateSize')
             update.setLong(1, value)
             update.setString(2, itemid)
             updated = update.execute() == 0
             update.close()
         elif property == 'Trashed':
             update = self._getCall('updateTrashed')
             update.setBoolean(1, value)
             update.setString(2, itemid)
             updated = update.execute() == 0
             update.close()
         if updated:
             # TODO: I cannot use a procedure performing the two UPDATE 
             # TODO: without the system versioning malfunctioning...
             # TODO: As a workaround I use two successive UPDATE queries
             timestamp = parseDateTime()
             update = self._getCall('updateCapabilities')
             update.setTimestamp(1, timestamp)
             update.setString(2, userid)
             update.setString(3, itemid)
             update.execute()
             update.close()
             self.sync.set()
             print("DataBase.updateContent() OK")
     except Exception as e:
         print("DataBase.updateContent().Error: %s - %s" % (e, traceback.print_exc()))
Пример #15
0
 def insertNewContent(self, content):
     print("Identifier.insertNewContent() 1")
     timestamp = parseDateTime()
     return self.User.DataBase.insertNewContent(self.User.Id, self.Id,
                                                self.ParentId, content,
                                                timestamp)
Пример #16
0
 def insertNewContent(self, content):
     timestamp = parseDateTime()
     return self.User.DataBase.insertNewContent(self.User.Id, self.Id,
                                                self.ParentId, content,
                                                timestamp)
Пример #17
0
 def parseDateTime(self, timestamp, format='%Y-%m-%dT%H:%M:%S.%fZ'):
     return parseDateTime(timestamp, format)