Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 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)
Ejemplo n.º 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()))
Ejemplo n.º 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)
Ejemplo n.º 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
Ejemplo n.º 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()))
Ejemplo n.º 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()
Ejemplo n.º 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)
Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 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)
Ejemplo n.º 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()))
Ejemplo n.º 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()))
Ejemplo n.º 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)
Ejemplo n.º 16
0
 def insertNewContent(self, content):
     timestamp = parseDateTime()
     return self.User.DataBase.insertNewContent(self.User.Id, self.Id,
                                                self.ParentId, content,
                                                timestamp)
Ejemplo n.º 17
0
 def parseDateTime(self, timestamp, format='%Y-%m-%dT%H:%M:%S.%fZ'):
     return parseDateTime(timestamp, format)