diff --git a/cmis/__init__.py b/cmis/__init__.py new file mode 100644 index 00000000..b6b1b965 --- /dev/null +++ b/cmis/__init__.py @@ -0,0 +1,26 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from . import cmis_model +from . import backend + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/cmis/__openerp__.py b/cmis/__openerp__.py new file mode 100644 index 00000000..d0336961 --- /dev/null +++ b/cmis/__openerp__.py @@ -0,0 +1,62 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +{ + 'name': 'CMIS', + 'version': '0.1', + 'category': 'Connector', + 'summary': 'Cmis Connector', + 'description': """ +Cmis Connector +============== + +This module is the base for OpenERP modules implementing different integration scenario with a CMIS server. +It allows you to configure a CMIS backend in OpenERP. + +Configuration +============= + +Create a new CMIS backend with the host, login and password. + +Contributors +------------ +* El Hadji Dem (elhadji.dem@savoirfairelinux.com) +""", + 'author': 'Savoir-faire Linux', + 'website': 'www.savoirfairelinux.com', + 'license': 'AGPL-3', + 'depends': [ + 'connector', + ], + 'data': [ + 'cmis_model_view.xml', + 'cmis_menu.xml', + ], + 'js': [], + 'qweb': [], + 'test': [], + 'demo': [], + 'installable': True, + 'auto_install': False, +} + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/cmis/backend.py b/cmis/backend.py new file mode 100644 index 00000000..8ac85895 --- /dev/null +++ b/cmis/backend.py @@ -0,0 +1,32 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import openerp.addons.connector.backend as backend + + +cmis = backend.Backend('cmis') +""" Generic CMIS Backend """ + +cmis1700 = backend.Backend(parent=cmis, version='1.7') +""" CMIS Backend for version 1.7 """ + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/cmis/cmis_menu.xml b/cmis/cmis_menu.xml new file mode 100644 index 00000000..9613d0d7 --- /dev/null +++ b/cmis/cmis_menu.xml @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/cmis/cmis_model.py b/cmis/cmis_model.py new file mode 100644 index 00000000..dc0c1d1d --- /dev/null +++ b/cmis/cmis_model.py @@ -0,0 +1,121 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.osv import orm, fields, osv +from openerp.tools.translate import _ +from openerp.addons.connector.queue.job import job +from cmislib.model import CmisClient +import openerp.addons.connector as connector +from openerp.addons.connector.session import ConnectorSession + + +class cmis_backend(orm.Model): + _name = 'cmis.backend' + _description = 'CMIS Backend' + _inherit = 'connector.backend' + + _backend_type = 'cmis' + + def _select_versions(self, cr, uid, context=None): + return [('1.7', '1.7')] + + # Test connection with GED + def _auth(self, cr, uid, context=None): + if context is None: + context = {} + # Get the url, user and password for GED + ids = self.search(cr, uid, []) + res = self.read(cr, uid, ids, + ['location', + 'username', + 'password'], context=context)[0] + url = res['location'] + user_name = res['username'] + user_password = res['password'] + client = CmisClient(url, user_name, user_password) + if not client: + raise osv.except_osv(_('Cmis connection Error!'), + _("Check your cmis account configuration.")) + return client + + def test_directory_of_write(self, cr, uid, ids, context=None): + if context is None: + context = {} + cmis_backend_obj = self.pool.get('cmis.backend') + #login with the cmis account + client = cmis_backend_obj._auth(cr, uid, context=context) + repo = client.defaultRepository + folder_path_write = cmis_backend_obj.read(cr, uid, ids, ['initial_directory_write'], + context=context)[0]['initial_directory_write'] + # Testing the path + rs = repo.query("SELECT cmis:path FROM cmis:folder ") + bool_path_write = self.test_existing_path(rs, folder_path_write) + self.get_error_for_path(bool_path_write, folder_path_write) + + def test_directory_of_read(self, cr, uid, ids, context=None): + if context is None: + context = {} + cmis_backend_obj = self.pool.get('cmis.backend') + #login with the cmis account + client = cmis_backend_obj._auth(cr, uid, context=context) + repo = client.defaultRepository + folder_path_read = cmis_backend_obj.read(cr, uid, ids, ['initial_directory_read'], + context=context)[0]['initial_directory_read'] + # Testing the path + rs = repo.query("SELECT cmis:path FROM cmis:folder ") + bool_path_read = self.test_existing_path(rs, folder_path_read) + self.get_error_for_path(bool_path_read, folder_path_read) + + def test_existing_path(self, rs, folder_path): + for one_rs in rs: + # Print name of files + props = one_rs.getProperties() + if props['cmis:path'] != folder_path: + bool = False + else: + bool = True + break + return bool + + def get_error_for_path(self, bool, path): + if bool: + raise osv.except_osv(_('Cmis Message'), + _("Path is correct for : " + path)) + else: + raise osv.except_osv(_('Cmis Error!'), + _("Error path for : " + path)) + + _columns = { + 'version': fields.selection( + _select_versions, + string='Version', + required=True), + 'location': fields.char('Location', size=128, help="Location."), + 'username': fields.char('Username', size=64, help="Username."), + 'password': fields.char('Password', size=64, help="Password."), + 'initial_directory_read': fields.char('Initial directory of read', + size=128, help="Initial directory of read."), + 'initial_directory_write': fields.char('Initial directory of write', + size=128, help="Initial directory of write."), + } + +# vim:expandtab:smartindent:toabstop=4:softtabstop=4:shiftwidth=4: diff --git a/cmis/cmis_model_view.xml b/cmis/cmis_model_view.xml new file mode 100644 index 00000000..8a73e488 --- /dev/null +++ b/cmis/cmis_model_view.xml @@ -0,0 +1,67 @@ + + + + + + cmis.backend.form + cmis.backend + +
+ + +
+
+
+ + + cmis.backend.tree + cmis.backend + + + + + + + + + + + CMIS Backends + cmis.backend + form + tree,form + + +
+
diff --git a/cmis/connector.py b/cmis/connector.py new file mode 100644 index 00000000..044d8a2f --- /dev/null +++ b/cmis/connector.py @@ -0,0 +1,39 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Savoir-faire Linux +# (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.osv import orm, fields +from openerp.addons.connector.connector import (Environment, + install_in_connector) + +install_in_connector() + + +def get_environment(session, model_name, backend_id): + """ Create an environment to work with. """ + backend_record = session.browse('cmis.backend', backend_id) + env = Environment(backend_record, session, model_name) + lang = backend_record.default_lang_id + lang_code = lang.code if lang else 'en_US' + env.set_lang(code=lang_code) + return env + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: