Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
jio_mebibou
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Alexandra Rogova
jio_mebibou
Commits
77749537
Commit
77749537
authored
Jan 07, 2015
by
Romain Courteaud
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update erp5 storage implementation.
parent
a8ced060
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
81 additions
and
277 deletions
+81
-277
Gruntfile.js
Gruntfile.js
+3
-0
package.json
package.json
+1
-0
src/jio.storage/erp5storage.js
src/jio.storage/erp5storage.js
+77
-277
No files found.
Gruntfile.js
View file @
77749537
...
...
@@ -144,6 +144,8 @@ module.exports = function (grunt) {
jio
:
{
// duplicate files are ignored
src
:
[
'
lib/uri/URI.js
'
,
'
node_modules/uritemplate/bin/uritemplate.js
'
,
// 'node_modules/moment/moment.js',
'
lib/moment/moment-2.5.0.js
'
,
// 'src/*.js',
...
...
@@ -173,6 +175,7 @@ module.exports = function (grunt) {
'
src/jio.storage/davstorage.js
'
,
'
src/jio.storage/indexeddbstorage.js
'
,
'
src/jio.storage/unionstorage.js
'
,
'
src/jio.storage/erp5storage.js
'
,
'
src/jio.storage/querystorage.js
'
,
'
src/jio.storage/drivetojiomapping.js
'
,
'
src/jio.storage/cachestorage.js
'
...
...
package.json
View file @
77749537
...
...
@@ -30,6 +30,7 @@
],
"dependencies"
:
{
"rsvp"
:
"git+http://git.erp5.org/repos/rsvp.js.git"
,
"uritemplate"
:
"git+http://git.erp5.org/repos/uritemplate-js.git"
,
"
moment
"
:
"
2.8.3
"
},
"devDependencies"
:
{
...
...
src/jio.storage/erp5storage.js
View file @
77749537
...
...
@@ -10,229 +10,42 @@
// default_view: {string} (optional)
// }
/*jslint
indent: 2, nomen: true, unparam
: true */
/*global jIO, UriTemplate, FormData, RSVP, URI,
DOMParser, Blob,
ProgressEvent, defin
e */
/*jslint
nomen
: true */
/*global jIO, UriTemplate, FormData, RSVP, URI,
modul
e */
(
function
(
root
,
dependencies
,
module
)
{
(
function
(
jIO
,
UriTemplate
,
FormData
,
RSVP
,
URI
)
{
"
use strict
"
;
if
(
typeof
define
===
'
function
'
&&
define
.
amd
)
{
return
define
(
dependencies
,
module
);
}
var
namespace
=
module
(
RSVP
,
jIO
,
URI
,
UriTemplate
);
if
(
namespace
!==
undefined
)
{
root
.
ERP5Storage
=
namespace
;
}
}(
this
,
[
"
rsvp
"
,
"
jio
"
,
"
uri
"
,
"
uritemplate
"
],
function
(
RSVP
,
jIO
,
URI
,
UriTemplate
)
{
"
use strict
"
;
var
hasOwnProperty
=
Function
.
prototype
.
call
.
bind
(
Object
.
prototype
.
hasOwnProperty
),
constant
=
{};
constant
.
method_notification_message_obj
=
{
"
get
"
:
"
Getting document.
"
,
"
post
"
:
"
Posting document.
"
,
"
put
"
:
"
Putting document.
"
,
"
remove
"
:
"
Removing document.
"
,
"
getAttachment
"
:
"
Getting attachment.
"
,
"
putAttachment
"
:
"
Putting attachment.
"
,
"
removeAttacment
"
:
"
Removing attachment.
"
,
"
allDocs
"
:
"
Getting document list.
"
};
// XXX docstring
function
formatGetSuccessAnswer
(
answer
)
{
if
(
answer
===
undefined
||
answer
===
null
)
{
throw
answer
;
}
var
result
;
if
(
typeof
answer
.
data
===
"
object
"
&&
answer
.
data
)
{
return
answer
;
}
if
(
answer
.
target
&&
typeof
answer
.
target
.
status
===
"
number
"
&&
typeof
answer
.
target
.
statusText
===
"
string
"
)
{
result
=
{
"
status
"
:
answer
.
target
.
status
};
if
(
typeof
answer
.
target
.
response
===
"
object
"
&&
answer
.
target
.
response
!==
null
)
{
if
(
typeof
answer
.
target
.
response
.
toJSON
===
"
function
"
)
{
result
.
data
=
answer
.
target
.
response
.
toJSON
();
}
else
{
result
.
data
=
answer
.
target
.
response
;
}
}
else
if
(
answer
.
target
.
response
instanceof
Blob
)
{
return
jIO
.
util
.
readBlobAsText
(
answer
.
target
.
response
).
then
(
function
(
text
)
{
result
.
data
=
JSON
.
parse
(
text
);
return
result
;
});
}
return
result
;
}
return
answer
;
}
// XXX docstring
function
formatUpdateSuccessAnswer
(
answer
)
{
if
(
answer
===
undefined
||
answer
===
null
)
{
throw
answer
;
}
var
result
;
if
(
typeof
answer
.
target
===
"
object
"
&&
answer
.
target
!==
null
&&
typeof
answer
.
target
.
status
===
"
number
"
)
{
result
=
{
"
status
"
:
answer
.
target
.
status
};
return
result
;
}
return
answer
;
}
// XXX docstring
function
formatErrorAnswer
(
answer
)
{
if
(
answer
===
undefined
||
answer
===
null
)
{
throw
answer
;
}
var
result
,
dom
;
if
(
answer
.
target
&&
typeof
answer
.
target
.
status
===
"
number
"
&&
typeof
answer
.
target
.
statusText
===
"
string
"
)
{
// seams to be a ProgressEvent
result
=
{
"
status
"
:
answer
.
target
.
status
};
if
(
typeof
answer
.
target
.
response
===
"
object
"
&&
answer
.
target
.
response
!==
null
)
{
if
(
typeof
answer
.
target
.
response
.
toJSON
===
"
function
"
)
{
result
.
data
=
answer
.
target
.
response
.
toJSON
();
}
else
{
result
.
data
=
answer
.
target
.
response
;
}
}
else
if
(
typeof
answer
.
target
.
responseText
===
"
string
"
)
{
dom
=
new
DOMParser
().
parseFromString
(
answer
.
target
.
responseText
,
"
text/html
"
);
result
.
message
=
(
dom
.
querySelector
(
'
#master
'
)
||
dom
.
firstElementChild
).
textContent
;
if
(
!
result
.
message
)
{
delete
result
.
message
;
}
}
throw
result
;
}
throw
answer
;
}
// XXX docstring
function
formatNotification
(
method
,
notif
)
{
var
result
;
if
(
notif
)
{
if
(
typeof
notif
.
loaded
===
"
number
"
&&
typeof
notif
.
total
===
"
number
"
)
{
result
=
{};
// can be a ProgressEvent or a jIO notification
if
(
notif
.
method
!==
method
)
{
result
=
{
"
method
"
:
method
,
"
loaded
"
:
notif
.
loaded
,
"
total
"
:
notif
.
total
};
if
(
typeof
notif
.
percentage
===
"
number
"
)
{
result
.
percentage
=
notif
.
percentage
;
}
}
if
(
typeof
notif
.
message
===
"
string
"
)
{
result
.
message
=
notif
.
message
;
}
else
{
result
.
message
=
constant
.
method_notification_message_obj
[
method
];
}
return
result
;
}
}
throw
null
;
// stop propagation
}
constant
.
formatSuccessAnswerFor
=
{
"
post
"
:
formatUpdateSuccessAnswer
,
"
put
"
:
formatUpdateSuccessAnswer
,
"
get
"
:
formatGetSuccessAnswer
};
//////////////////////////////////////////////////////////////////////
// XXX docstring
function
ERP5Storage
(
spec
)
{
if
(
typeof
spec
.
url
!==
"
string
"
||
!
spec
.
url
)
{
throw
new
TypeError
(
"
ERP5 'url' must be a string
"
+
"
which contains more than one character.
"
);
}
this
.
_url
=
spec
.
url
;
this
.
_default_view
=
spec
.
default_view
;
}
// XXX docstring
function
methodGenerator
(
method
)
{
return
function
(
command
,
param
,
options
)
{
RSVP
.
resolve
().
then
(
function
()
{
var
view
=
ERP5Storage
.
onView
[
options
.
_view
||
this
.
_default_view
]
||
ERP5Storage
.
onView
[
"
default
"
];
if
(
typeof
view
[
method
]
!==
"
function
"
)
{
view
=
ERP5Storage
.
onView
[
"
default
"
];
function
getSiteDocument
(
storage
)
{
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
return
jIO
.
util
.
ajax
({
"
type
"
:
"
GET
"
,
"
url
"
:
storage
.
_url
,
"
xhrFields
"
:
{
withCredentials
:
true
}
return
view
[
method
].
call
(
this
,
param
,
options
);
}.
bind
(
this
)).
then
(
constant
.
formatSuccessAnswerFor
[
method
]).
then
(
null
,
formatErrorAnswer
,
formatNotification
.
bind
(
null
,
method
)).
then
(
command
.
success
,
command
.
error
,
command
.
progress
);
};
});
})
.
push
(
function
(
event
)
{
return
JSON
.
parse
(
event
.
target
.
responseText
);
});
}
// XXX docstring
[
"
post
"
,
"
put
"
,
"
get
"
,
"
remove
"
,
"
putAttachment
"
,
"
getAttachment
"
,
"
removeAttachment
"
,
"
allDocs
"
,
"
check
"
,
"
repair
"
].
forEach
(
function
(
method
)
{
ERP5Storage
.
prototype
[
method
]
=
methodGenerator
(
method
);
});
// XXX docstring
function
getSiteDocument
(
url
)
{
if
(
typeof
url
!==
"
string
"
&&
typeof
(
this
&&
this
.
_url
)
!==
"
string
"
)
{
throw
new
TypeError
(
"
ERP5Storage.getSiteDocument(): Argument 1 `url`
"
+
"
or `this._url` are not of type string.
"
);
function
getDocumentAndHateoas
(
storage
,
param
,
options
)
{
if
(
options
===
undefined
)
{
options
=
{};
}
return
jIO
.
util
.
ajax
({
"
type
"
:
"
GET
"
,
"
url
"
:
url
||
this
.
_url
,
"
xhrFields
"
:
{
withCredentials
:
true
}
}).
then
(
function
(
event
)
{
return
JSON
.
parse
(
event
.
target
.
responseText
);
});
}
ERP5Storage
.
getSiteDocument
=
getSiteDocument
;
// XXX docstring
function
getDocumentAndHatoas
(
param
,
options
)
{
var
this_
=
this
;
return
ERP5Storage
.
getSiteDocument
(
this
.
_url
).
then
(
function
(
site_hal
)
{
return
getSiteDocument
(
storage
)
.
push
(
function
(
site_hal
)
{
// XXX need to get modified metadata
return
jIO
.
util
.
ajax
({
"
type
"
:
"
GET
"
,
"
url
"
:
UriTemplate
.
parse
(
site_hal
.
_links
.
traverse
.
href
)
.
expand
({
relative_url
:
param
.
_id
,
view
:
options
.
_view
||
this_
.
_default_view
||
"
view
"
view
:
options
.
_view
||
storage
.
_default_view
}),
"
xhrFields
"
:
{
withCredentials
:
true
...
...
@@ -241,30 +54,34 @@
});
}
ERP5Storage
.
onView
=
{};
ERP5Storage
.
onView
[
"
default
"
]
=
{};
// XXX docstring
ERP5Storage
.
onView
[
"
default
"
].
get
=
function
(
param
,
options
)
{
return
getDocumentAndHatoas
.
call
(
this
,
param
,
options
).
then
(
function
(
response
)
{
function
ERP5Storage
(
spec
)
{
if
(
typeof
spec
.
url
!==
"
string
"
||
!
spec
.
url
)
{
throw
new
TypeError
(
"
ERP5 'url' must be a string
"
+
"
which contains more than one character.
"
);
}
this
.
_url
=
spec
.
url
;
this
.
_default_view
=
spec
.
default_view
||
"
view
"
;
}
ERP5Storage
.
prototype
.
get
=
function
(
param
,
options
)
{
return
getDocumentAndHateoas
(
this
,
param
,
options
)
.
push
(
function
(
response
)
{
var
result
=
JSON
.
parse
(
response
.
target
.
responseText
);
result
.
_id
=
param
.
_id
;
result
.
portal_type
=
result
.
_links
.
type
.
name
;
delete
result
.
_embedded
;
delete
result
.
_links
;
delete
result
.
_debug
;
new
jIO
.
Metadata
(
result
).
format
();
return
{
"
data
"
:
result
};
// delete result._embedded;
// delete result._links;
// delete result._debug;
return
result
;
});
};
// XXX docstring
ERP5Storage
.
onView
[
"
default
"
].
post
=
function
(
metadata
,
options
)
{
var
final_response
;
return
getSiteDocument
(
this
.
_url
)
.
then
(
function
(
site_hal
)
{
/*jslint forin: true */
ERP5Storage
.
prototype
.
post
=
function
(
metadata
,
options
)
{
var
final_response
,
context
=
this
;
return
getSiteDocument
(
this
)
.
push
(
function
(
site_hal
)
{
var
post_action
=
site_hal
.
_actions
.
add
,
data
=
new
FormData
();
...
...
@@ -278,24 +95,26 @@
withCredentials
:
true
}
});
})
.
then
(
function
(
event
)
{
final_response
=
{
"
status
"
:
event
.
target
.
status
};
})
.
push
(
function
(
event
)
{
if
(
!
metadata
.
_id
)
{
// XXX Really depend on server response...
var
uri
=
new
URI
(
event
.
target
.
getResponseHeader
(
"
X-Location
"
));
final_response
.
id
=
uri
.
segment
(
2
);
metadata
.
_id
=
final_response
.
id
;
final_response
=
uri
.
segment
(
2
);
metadata
.
_id
=
final_response
;
}
}).
then
(
ERP5Storage
.
onView
[
"
default
"
].
put
.
bind
(
this
,
metadata
,
options
)).
then
(
function
()
{
return
final_response
;
});
})
.
push
(
function
()
{
return
context
.
put
(
metadata
,
options
);
})
.
push
(
function
()
{
return
final_response
;
});
};
// XXX docstring
ERP5Storage
.
onView
[
"
default
"
].
put
=
function
(
metadata
,
options
)
{
return
getDocumentAndHatoas
.
call
(
this
,
metadata
,
options
).
then
(
function
(
result
)
{
/*jslint forin: true */
ERP5Storage
.
prototype
.
put
=
function
(
metadata
,
options
)
{
return
getDocumentAndHateoas
(
this
,
metadata
,
options
)
.
push
(
function
(
result
)
{
result
=
JSON
.
parse
(
result
.
target
.
responseText
);
var
put_action
=
result
.
_embedded
.
_view
.
_actions
.
put
,
renderer_form
=
result
.
_embedded
.
_view
,
...
...
@@ -304,10 +123,10 @@
data
.
append
(
renderer_form
.
form_id
.
key
,
renderer_form
.
form_id
[
'
default
'
]);
for
(
key
in
metadata
)
{
if
(
hasOwnProperty
(
metadata
,
key
))
{
if
(
metadata
.
hasOwnProperty
(
key
))
{
if
(
key
!==
"
_id
"
)
{
// Hardcoded my_ ERP5 behaviour
if
(
hasOwnProperty
(
renderer_form
,
"
my_
"
+
key
))
{
if
(
renderer_form
.
hasOwnProperty
(
"
my_
"
+
key
))
{
data
.
append
(
renderer_form
[
"
my_
"
+
key
].
key
,
metadata
[
key
]);
}
}
...
...
@@ -324,18 +143,19 @@
});
};
ERP5Storage
.
onView
[
"
default
"
].
remove
=
function
()
{
return
;
ERP5Storage
.
prototype
.
hasCapacity
=
function
(
name
)
{
return
((
name
===
"
list
"
)
||
(
name
===
"
query
"
)
||
(
name
===
"
select
"
)
||
(
name
===
"
limit
"
));
};
ERP5Storage
.
onView
[
"
default
"
].
allDocs
=
function
(
param
,
options
)
{
if
(
typeof
options
.
query
!==
"
string
"
)
{
options
.
query
=
(
options
.
query
?
jIO
.
Query
.
objectToSearchText
(
options
.
query
)
:
undefined
);
}
return
getSiteDocument
(
this
.
_url
)
.
then
(
function
(
site_hal
)
{
ERP5Storage
.
prototype
.
buildQuery
=
function
(
options
)
{
//
if (typeof options.query !== "string") {
//
options.query = (options.query ?
//
jIO.Query.objectToSearchText(options.query) :
//
undefined);
//
}
return
getSiteDocument
(
this
)
.
push
(
function
(
site_hal
)
{
return
jIO
.
util
.
ajax
({
"
type
"
:
"
GET
"
,
"
url
"
:
UriTemplate
.
parse
(
site_hal
.
_links
.
raw_search
.
href
)
...
...
@@ -350,50 +170,30 @@
}
});
})
.
then
(
function
(
response
)
{
.
push
(
function
(
response
)
{
return
JSON
.
parse
(
response
.
target
.
responseText
);
})
.
then
(
function
(
catalog_json
)
{
.
push
(
function
(
catalog_json
)
{
var
data
=
catalog_json
.
_embedded
.
contents
,
count
=
data
.
length
,
i
,
uri
,
item
,
result
=
[],
promise_list
=
[
result
];
result
=
[];
for
(
i
=
0
;
i
<
count
;
i
+=
1
)
{
item
=
data
[
i
];
uri
=
new
URI
(
item
.
_links
.
self
.
href
);
delete
item
.
_links
;
result
.
push
({
id
:
uri
.
segment
(
2
),
key
:
uri
.
segment
(
2
),
doc
:
{},
value
:
item
});
// if (options.include_docs) {
// promise_list.push(RSVP.Queue().push(function () {
// return this._get({_id: item.name}, {_view: "View"});
// }).push
// }
}
return
RSVP
.
all
(
promise_list
);
})
.
then
(
function
(
promise_list
)
{
var
result
=
promise_list
[
0
];
return
{
"
data
"
:
{
"
rows
"
:
result
,
"
total_rows
"
:
result
.
length
}};
return
result
;
});
};
ERP5Storage
.
onView
[
"
default
"
].
check
=
function
()
{
return
;
};
ERP5Storage
.
onView
[
"
default
"
].
repair
=
function
()
{
return
;
};
jIO
.
addStorage
(
"
erp5
"
,
ERP5Storage
);
return
ERP5Storage
;
}));
}(
jIO
,
UriTemplate
,
FormData
,
RSVP
,
URI
));
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment