Beispiel #1
0
class DatabaseWrapper(BaseDatabaseWrapper):
    vender = "cmis"
    operators = {}

    def __init__(self, *args, **kwargs):
        super(DatabaseWrapper, self).__init__(*args, **kwargs)

        self.charset = "utf-8"
        self.features = DatabaseFeatures(self)
        self.ops = DatabaseOperations(self)
        self.client = DatabaseClient(self)
        self.creation = DatabaseCreation(self)
        self.introspection = DatabaseIntrospection(self)
        self.validation = BaseDatabaseValidation(self)

    def close(self):
        if self.connection is not None:
            self.connection.close()
            self.connection = None

    def ensure_connection(self):
        if self.connection is None:
           self.cmis_client = CmisClient(
                 self.settings_dict['HOST'],
                 self.settings_dict['USER'],
                 self.settings_dict['PASSWORD'],
                 binding=self.cmis_binding()
           )
           repo_name = self.settings_dict['NAME']
           if repo_name == "default" or not repo_name:
              self.connection = self.cmis_client.defaultRepository
           else:
              self.connection = self.cmis_client.getRepository(repo_name)
           if django.conf.settings.DEBUG:
              print "Connected to Repository with ID %s" % self.connection.id

    def _commit(self):
        pass

    def _by_path(self, path):
        self.ensure_connection()
        return self.connection.getObjectByPath(path)

    def _cursor(self):
        self.ensure_connection()
        return DatabaseCursor(self.connection)

    def _query(self, query):
        self.ensure_connection()
        return self.connection.query(query)

    def _rollback(self):
        pass
Beispiel #2
0
class CMISRepo(object):
    implements(ICMISRepo)
    
    def __init__(self, url, user, password, repository_id=None,
                 document_root='/'):

        self.client = CmisClient(url, user, password)
        if not repository_id:
            self.repo = self.client.getDefaultRepository()
        else:
            self.repo = self.client.getRepository(repository_id)
        self.docroot = self.repo.getObjectByPath(document_root)

    def docroot_path(self):
        paths = self.docroot.getPaths()
        if paths:
            return paths[0]
        return None
Beispiel #3
0
class AlfrescoRM():
    def __init__(self, alfresco_repository_url, alfresco_cmis_rest_api_url,
                 alfresco_admin_user, alfresco_admin_password):
        self.alfresco_repository_url = alfresco_repository_url
        self.alfresco_cmis_rest_api_url = alfresco_cmis_rest_api_url
        self.alfresco_admin_user = alfresco_admin_user
        self.alfresco_admin_password = alfresco_admin_password

        try:
            self.cmis_client = CmisClient(self.alfresco_cmis_rest_api_url,
                                          self.alfresco_admin_user,
                                          self.alfresco_admin_password)

        except:
            return HttpResponseBadRequest(
                '<h1>Failed to connect to Alfresco</h1>')

    def get_repository_url(self):
        return self.alfresco_repository_url

    def get_default_repository(self):
        default_repository = self.cmis_client.getRepository(
            self.cmis_client.defaultRepository.id)
        return default_repository

    def get_sites(self, repository):
        alfresco_sites = repository.query(
            "select * from cmis:folder where cmis:objectTypeId='F:st:site'")

        sites = []
        for s in alfresco_sites:
            obj = repository.getObject(s.id)
            s = {}
            s['isSite'] = True
            for key, val in obj.properties.items():
                if key == 'cmis:name' or key == 'cmis:title' or key == 'cmis:description' or key == 'cmis:path' or key == 'cmis:objectId' or key == 'cmis:objectTypeId' or key == 'cmis:parentId':
                    s[key] = val
            document_library = repository.getObjectByPath(s['cmis:path'] +
                                                          '/documentLibrary')
            children = document_library.getChildren()
            folders = []
            for child in children:
                if child.properties['cmis:objectTypeId'] == 'cmis:folder':
                    folder = {
                        'name':
                        child.properties['cmis:name'],
                        'description':
                        child.properties['cmis:description'],
                        'objectId':
                        child.properties['cmis:objectId'],
                        'path':
                        child.properties['cmis:path'],
                        'parent':
                        child.properties['cmis:parentId'],
                        'url':
                        self.alfresco_repository_url + '#filter=path|' +
                        child.properties['cmis:path']
                    }
                    folders.append(folder)
            s['folders'] = folders
            sites.append(s)

        return sites

    def get_folder_content(self, repository, object_id):
        object_id = object_id.replace('workspace://SpacesStore/', '')
        f = repository.getObject(object_id)

        content = {}
        content['isSite'] = False
        for key, val in f.properties.items():
            if key == 'cmis:name' or key == 'cmis:title' or key == 'cmis:description' or key == 'cmis:path' or key == 'cmis:objectId' or key == 'cmis:objectTypeId' or key == 'cmis:parentId':
                content[key] = val

        folderChildren = f.getChildren()

        folders = []
        for child in folderChildren:
            if child.properties['cmis:objectTypeId'] == 'cmis:folder':
                folder = {
                    'name':
                    child.properties['cmis:name'],
                    'description':
                    child.properties['cmis:description'],
                    'objectId':
                    child.properties['cmis:objectId'],
                    'path':
                    child.properties['cmis:path'],
                    'parent':
                    child.properties['cmis:parentId'],
                    'url':
                    self.alfresco_repository_url + '#filter=path|' +
                    child.properties['cmis:path']
                }
                folders.append(folder)
        content['folders'] = folders

        return content