src/js/serializers/PlatformSerializer.js
branchnew-model
changeset 860 7fd843e0dc4e
parent 858 ad1ffe0c0955
child 864 5e76a06b961c
--- a/src/js/serializers/PlatformSerializer.js	Thu Apr 12 15:54:33 2012 +0200
+++ b/src/js/serializers/PlatformSerializer.js	Fri Apr 13 18:08:19 2012 +0200
@@ -3,64 +3,121 @@
 }
 
 IriSP.serializers.platform = {
-    deSerialize : function(_data, _container) {
-        
-        var _types = [
-            {
-                serialized_name : "medias",
-                model_name : "media",
-                deserializer : function(_data) {
-                    var _res = new IriSP.Model.Media(_data.id, _container);
-                    _res.url = _data.href;
-                    _res.title = _data.meta["dc:title"];
-                    _res.description = _data.meta["dc:description"];
-                    _res.setDuration(_data.meta["dc:duration"]);
-                    return _res;        
-                }
-            },
-            {
-                serialized_name : "tags",
-                model_name : "tag",
-                deserializer : function(_data) {
-                    var _res = new IriSP.Model.Tag(_data.id, _container);
-                    _res.title = _data["dc:title"];
-                    return _res;        
-                }
+    types :  {
+        media : {
+            serialized_name : "medias",
+            model_name : "media",
+            deserializer : function(_data, _container) {
+                var _res = new IriSP.Model.Media(_data.id, _container);
+                _res.url = _data.href;
+                _res.title = _data.meta["dc:title"];
+                _res.description = _data.meta["dc:description"];
+                _res.setDuration(_data.meta["dc:duration"]);
+                return _res;        
             },
-            {
-                serialized_name : "annotation-types",
-                model_name : "annotationType",
-                deserializer : function(_data) {
-                    var _res = new IriSP.Model.AnnotationType(_data.id, _container);
-                    _res.title = _data["dc:title"];
-                    _res.description = _data["dc:description"];
-                    return _res;        
+            serializer : function(_data, _container) {
+                return {
+                    id : _container.unNamespace(_data.id),
+                    href : _data.url,
+                    meta : {
+                        "dc:title" : _data.title,
+                        "dc:description" : _data.description,
+                        "dc:duration" : _data.duration.milliseconds
+                    }
                 }
+            }
+        },
+        tag : {
+            serialized_name : "tags",
+            model_name : "tag",
+            deserializer : function(_data, _container) {
+                var _res = new IriSP.Model.Tag(_data.id, _container);
+                _res.title = _data.meta["dc:title"];
+                return _res;        
             },
-            {
-                serialized_name : "annotations",
-                model_name : "annotation",
-                deserializer : function(_data) {
-                    var _res = new IriSP.Model.Annotation(_data.id, _container);
-                    _res.title = _data.content.title;
-                    _res.description = _data.content.description;
-                    _res.setMedia(_data.media, _container);
-                    _res.setAnnotationType(_data.meta["id-ref"]);
-                    _res.setTags(IriSP._(_data.tags).pluck("id-ref"));
-                    _res.setBegin(_data.begin);
-                    _res.setEnd(_data.end);
-                    return _res;
+            serializer : function(_data, _container) {
+                return {
+                    id : _container.unNamespace(_data.id),
+                    meta : {
+                        "dc:title" : _data.title
+                    }
                 }
             }
-        ];
-        
-        IriSP._(_types).each(function(_type) {
+        },
+        annotationTypes : {
+            serialized_name : "annotation-types",
+            deserializer : function(_data, _container) {
+                var _res = new IriSP.Model.AnnotationType(_data.id, _container);
+                _res.title = _data["dc:title"];
+                _res.description = _data["dc:description"];
+                return _res;        
+            },
+            serializer : function(_data, _container) {
+                return {
+                    id : _container.unNamespace(_data.id),
+                    "dc:title" : _data.title,
+                    "dc:description" : _data.description
+                }
+            }
+        },
+        annotation : {
+            serialized_name : "annotations",
+            deserializer : function(_data, _container) {
+                var _res = new IriSP.Model.Annotation(_data.id, _container);
+                _res.title = _data.content.title;
+                _res.description = _data.content.description;
+                _res.created = IriSP.Model.isoToDate(_data.meta["dc:created"]);
+                var _c = parseInt(_data.color).toString(16);
+                while (_c.length < 6) {
+                    _c = '0' + _c;
+                }
+                _res.color = '#' + _c;
+                _res.setMedia(_data.media, _container);
+                _res.setAnnotationType(_data.meta["id-ref"]);
+                _res.setTags(IriSP._(_data.tags).pluck("id-ref"));
+                _res.setBegin(_data.begin);
+                _res.setEnd(_data.end);
+                return _res;
+            },
+            serializer : function(_data, _container) {
+                return {
+                    id : _container.unNamespace(_data.id),
+                    content : {
+                        title : _data.title,
+                        description : _data.description
+                    },
+                    media : _container.unNamespace(_data.media.contents),
+                    meta : {
+                        "id-ref" : _container.unNamespace(_data.annotationType.contents),
+                        "dc:created" : IriSP.Model.dateToIso(_data.created)
+                    },
+                    tags : _data.getTags().map(function(_el, _id) {
+                       return {
+                           "id-ref" : _container.unNamespace(_id)
+                       } 
+                    })
+                }
+            }
+        }
+    },
+    serialize : function(_container) {
+        var _res = {},
+            _this = this;
+        _container.each(function(_list, _typename) {
+            _res[_this.types[_typename].serialized_name] = _list.map(function(_el) {
+                return _this.types[_typename].serializer(_el, _container);
+            });
+        });
+        return _res;
+    },
+    deSerialize : function(_data, _container) {
+        IriSP._(this.types).each(function(_type, _typename) {
             if (typeof _data[_type.serialized_name] !== "undefined") {
                 var _list = new IriSP.Model.List(_container.directory);
                 IriSP._(_data[_type.serialized_name]).each(function(_el) {
-                    _list.addElement(_type.deserializer(_el));
+                    _list.addElement(_type.deserializer(_el, _container));
                 });
-                _container.addList(_type.model_name, _list);
+                _container.addList(_typename, _list);
             }
         });