Commit 9d4d2411 authored by Aurel's avatar Aurel

first version of erp5 to erp5 storage

parent 533256d0
......@@ -174,6 +174,7 @@ module.exports = function (grunt) {
'src/jio.storage/gdrivestorage.js',
'src/jio.storage/unionstorage.js',
'src/jio.storage/erp5storage.js',
'src/jio.storage/erp5toerp5storage.js',
'src/jio.storage/querystorage.js',
'src/jio.storage/drivetojiomapping.js',
'src/jio.storage/documentstorage.js',
......
/*
* JIO extension for resource replication.
* Copyright (C) 2013, 2015 Nexedi SA
*
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This library 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*jslint nomen: true*/
/*global jIO, RSVP, console, indexedDB*/
var DATABASE = "erp5toerp5";
(function (jIO, RSVP) {
"use strict";
function MappingStorage(spec) {
this._local_mapping = {};
this._local_sub_storage = jIO.createJIO(spec.sub_storage);
this._portal_type = spec.portal_type;
this._index = spec.index;
}
MappingStorage.prototype.get = function (data) {
console.log("MappingStorage.get data : " + data);
if (!data.startsWith('_replicate_')) {
data = this._local_mapping[data];
}
return this._local_sub_storage.get(data);
};
MappingStorage.prototype.put = function () {
console.log("MappingStorage.put arguments " + arguments);
return this._local_sub_storage.put.apply(this._local_sub_storage,
arguments);
};
MappingStorage.prototype.allAttachments = function () {
return this._local_sub_storage.allAttachments.apply(this._local_sub_storage,
arguments);
};
MappingStorage.prototype.hasCapacity = function () {
return this._local_sub_storage.hasCapacity.apply(this._local_sub_storage,
arguments);
};
MappingStorage.prototype.buildQuery = function () {
console.log("MappingStorage.buildQuery");
var context = this, result_list = [], i;
return this._local_sub_storage.allDocs(
{
select_list : [context._index], //,
query : 'portal_type:"' + context._portal_type + '"'
}
)
.push(function (result) {
for (i = 0; i < result.data.total_rows; i += 1) {
result_list.push({id: result.data.rows[i].value.reference,
value: ''});
context._local_mapping[result.data.rows[i].value.reference] =
result.data.rows[i].id;
}
console.log("MappingStorage.buildQuery result_list " + result_list);
console.log("MappingStorage.buildQuery local mapping " +
context._local_mapping);
return result_list;
});
};
MappingStorage.prototype.remove = function (data) {
console.log("MappingStorage.remove data " + data);
//return this._local_sub_storage.remove.apply(this._local_sub_storage,
// [data,]);
};
MappingStorage.prototype.removeAttachment = function (data) {
console.log("MappingStorage.removeAttachment data " + data);
//return this._local_sub_storage.remove.apply(this._local_sub_storage,
// [data,]);
};
MappingStorage.prototype.putAttachment = function (data) {
console.log("MappingStorage.putAttachment data " + data);
//return this._local_sub_storage.remove.apply(this._local_sub_storage,
// [data,]);
};
function QueryERP5Storage(spec) {
this._local_sub_storage = jIO.createJIO(spec.sub_storage);
this._index = spec.index;
this._source_portal_type = spec.source_portal_type;
this._source_parent_relative_url = spec.source_parent_relative_url;
this._destination_portal_type = spec.destination_portal_type;
this._destination_parent_relative_url =
spec.destination_parent_relative_url;
this._local_mapping = {};
}
QueryERP5Storage.prototype.get = function (data) {
  • data as a variable name is misleading, id or intermediate_id would be more appropriate. Especially as it redefined line 129.

    Edited by Cédric Le Ninivin
Please register or sign in to reply
var context = this;
console.log("QueryERP5.get data : " + data);
return this._local_sub_storage.allDocs({
query : 'portal_type:"' + this._destination_portal_type +
'" AND ' + this._index + ':"' + data + '"'
})
.push(function (result) {
if (result.data.total_rows > 0) {
console.log("QueryERP5.get.push " + result.data.rows[0].id);
context._local_mapping[data] = result.data.rows[0].id;
return result.data.rows[0].id;
}
return;
})
.push(function (id) {
if (id) {
return context._local_sub_storage.get(id);
}
}).push(function (data) {
if (data) {
data.portal_type = context._source_portal_type;
data.parent_relative_url = context._source_parent_relative_url;
}
return data;
});
};
QueryERP5Storage.prototype.post = function (data) {
data.portal_type = this._destination_portal_type;
data.parent_relative_url = this._destination_parent_relative_url;
console.log("QuertERP5Storage.post data " + data);
return this._local_sub_storage.post(data);
};
QueryERP5Storage.prototype.put = function (id, data) {
id = this._local_mapping[id];
console.log("QuertERP5Storage.put id " + id + ", data " + data);
return this._local_sub_storage.put(id, data);
};
jIO.addStorage('mapping_storage', MappingStorage);
jIO.addStorage('query_erp5_storage', QueryERP5Storage);
function ERP5ToERP5Storage(spec) {
indexedDB.deleteDatabase('jio:' + DATABASE);
Please register or sign in to reply
this._locale_jio_instance = jIO.createJIO({
type: "replicate",
query: spec.source_query,
use_remote_post: true,
conflict_handling: 1,
check_local_modification: false,
check_local_creation: false,
check_local_deletion: false,
check_remote_modification: false,
check_remote_creation: true,
check_remote_deletion: false,
local_sub_storage: {
type: "query",
sub_storage: {
type: "uuid",
sub_storage: {
type: "indexeddb",
Please register or sign in to reply
database: DATABASE
}
}
},
remote_sub_storage: {
type: "erp5",
url: spec.source_url,
default_view_reference: spec.source_view_reference
}
});
this._remote_jio_instance = jIO.createJIO({
type: "replicate",
query: {
query: 'portal_type: "' + spec.source_portal_type + '"'
},
use_remote_post: 1,
conflict_handling: 1,
check_local_modification: false,
check_local_creation: true,
check_local_deletion: false,
check_remote_modification: false,
check_remote_creation: false,
check_remote_deletion: false,
local_sub_storage: {
type: "query",
sub_storage: {
type: "mapping_storage",
portal_type: spec.source_portal_type,
index: spec.index,
sub_storage: {
type: "query",
sub_storage: {
type: "uuid",
sub_storage: {
type: "indexeddb",
database: DATABASE
}
}
}
}
},
remote_sub_storage: {
type: 'query_erp5_storage',
index: spec.index,
source_portal_type: spec.source_portal_type,
source_parent_relative_url: spec.source_parent_relative_url,
destination_portal_type: spec.destination_portal_type,
destination_parent_relative_url: spec.destination_parent_relative_url,
sub_storage: {
type: "erp5",
url: spec.destination_url,
default_view_reference: spec.destination_view_reference
}
}
});
}
ERP5ToERP5Storage.prototype.repair = function () {
var context = this;
RSVP.Queue()
Please register or sign in to reply
.push(function () {
return context._locale_jio_instance.repair();
})
.push(function () {
return context._remote_jio_instance.repair();
}).push(
function () {console.log('Synch is done'); },
function (error) {console.warn(error); throw error; }
);
};
jIO.addStorage('erp5_to_erp5', ERP5ToERP5Storage);
}(jIO, RSVP));
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment