src/js/serializers/ldt-serializer.js
changeset 1015 63c5e5b16770
parent 1013 392ddcd212d7
child 1032 74ac0be7655c
equal deleted inserted replaced
1014:96ea47146c66 1015:63c5e5b16770
       
     1 /* Start ldt-serializer.js */
       
     2 
       
     3 if (typeof IriSP.serializers === "undefined") {
       
     4     IriSP.serializers = {};
       
     5 }
       
     6 
       
     7 IriSP.serializers.ldt = {
       
     8     types :  {
       
     9         media : {
       
    10             serialized_name : "medias",
       
    11             deserializer : function(_data, _source) {
       
    12                 var _res = new IriSP.Model.Media(_data.id, _source);
       
    13                 _res.video = (
       
    14                     typeof _data.url !== "undefined"
       
    15                     ? _data.url
       
    16                     : (
       
    17                         typeof _data.href !== "undefined"
       
    18                         ? _data.href
       
    19                         : null
       
    20                     )
       
    21                 );
       
    22                 if (typeof _data.meta.item !== "undefined" && _data.meta.item.name === "streamer") {
       
    23                     _res.streamer = _data.meta.item.value;
       
    24                 }
       
    25                 _res.title = _data.meta["dc:title"];
       
    26                 _res.description = _data.meta["dc:description"];
       
    27                 _res.setDuration(_data.meta["dc:duration"]);
       
    28                 _res.url = _data.meta.url;
       
    29                 if (typeof _data.meta.img !== "undefined" && _data.meta.img.src !== "undefined") {
       
    30                     _res.thumbnail = _data.meta.img.src;
       
    31                 }
       
    32                 return _res;        
       
    33             },
       
    34             serializer : function(_data, _source, _dest) {
       
    35                 var _res = {
       
    36                     id : _data.id,
       
    37                     url : _data.video,
       
    38                     meta : {
       
    39                         "dc:title": _data.title || "",
       
    40                         "dc:description": _data.description || "",
       
    41                         "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
       
    42                         "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
       
    43                         "dc:creator" : _data.creator || _source.creator,
       
    44                         "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
       
    45                         "dc:duration" : _data.duration.milliseconds
       
    46                     }
       
    47                 };
       
    48                 _dest.medias.push(_res);
       
    49                 var _list = {
       
    50                     id: IriSP.Model.getUID(),
       
    51                     meta : {
       
    52                         "dc:title": _data.title || "",
       
    53                         "dc:description": _data.description || "",
       
    54                         "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
       
    55                         "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
       
    56                         "dc:creator" : _data.creator || _source.creator,
       
    57                         "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
       
    58                         "id-ref": _data.id
       
    59                     },
       
    60                     items: _source.getAnnotationTypes().filter(function(_at) {
       
    61                         switch (typeof _at.media) {
       
    62                             case "object":
       
    63                                 return (_at.media === _data);
       
    64                             case "string":
       
    65                                 return (_at.media === _data.id);
       
    66                             default:
       
    67                                 var _ann = _at.getAnnotations();
       
    68                                 if (_ann) {
       
    69                                     for (var i = 0; i < _ann.length; i++) {
       
    70                                         if (_ann[i].getMedia() === _data) {
       
    71                                             return true;
       
    72                                         }
       
    73                                     }
       
    74                                 }
       
    75                         }
       
    76                         return false;
       
    77                     }).map(function(_at) {
       
    78                         return {
       
    79                             "id-ref": _at.id
       
    80                         };
       
    81                     })
       
    82                 };
       
    83                 _dest.lists.push(_list);
       
    84                 _dest.views[0].contents.push(_data.id);
       
    85             }
       
    86         },
       
    87         tag : {
       
    88             serialized_name : "tags",
       
    89             deserializer : function(_data, _source) {
       
    90                 var _res = new IriSP.Model.Tag(_data.id, _source);
       
    91                 _res.title = _data.meta["dc:title"];
       
    92                 return _res;        
       
    93             },
       
    94             serializer : function(_data, _source, _dest) {
       
    95                 if (_source.regenerateTags && !_data.regenerated) {
       
    96                     return;
       
    97                 }
       
    98                 var _res = {
       
    99                     id : _data.id,
       
   100                     meta : {
       
   101                         "dc:title": _data.title || "",
       
   102                         "dc:description": _data.description || "",
       
   103                         "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
       
   104                         "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
       
   105                         "dc:creator" : _data.creator || _source.creator,
       
   106                         "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
       
   107                     }
       
   108                 };
       
   109                 _dest.tags.push(_res);
       
   110             }
       
   111         },
       
   112         annotationType : {
       
   113             serialized_name : "annotation-types",
       
   114             deserializer : function(_data, _source) {
       
   115                 var _res = new IriSP.Model.AnnotationType(_data.id, _source);
       
   116                 _res.title = _data["dc:title"];
       
   117                 _res.description = _data["dc:description"];
       
   118                 return _res;        
       
   119             },
       
   120             serializer : function(_data, _source, _dest) {
       
   121                 var _res = {
       
   122                     id : _data.id,
       
   123                     "dc:title": _data.title || "",
       
   124                     "dc:description": _data.description || "",
       
   125                     "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
       
   126                     "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
       
   127                     "dc:creator" : _data.creator || _source.creator,
       
   128                     "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
       
   129                 };
       
   130                 _dest["annotation-types"].push(_res);
       
   131                 _dest.views[0].annotation_types.push(_data.id);
       
   132             }
       
   133         },
       
   134         annotation : {
       
   135             serialized_name : "annotations",
       
   136             deserializer : function(_data, _source) {
       
   137                 var _res = new IriSP.Model.Annotation(_data.id, _source);
       
   138                 _res.title = _data.content.title || "";
       
   139                 _res.description = _data.content.description || "";
       
   140                 if (typeof _data.content.img !== "undefined" && _data.content.img.src !== "undefined") {
       
   141                     _res.thumbnail = _data.content.img.src;
       
   142                 }
       
   143                 _res.created = IriSP.Model.isoToDate(_data.meta["dc:created"]);
       
   144                 if (typeof _data.color !== "undefined") {
       
   145                     var _c = parseInt(_data.color).toString(16);
       
   146                     while (_c.length < 6) {
       
   147                         _c = '0' + _c;
       
   148                     }
       
   149                     _res.color = '#' + _c;
       
   150                 }
       
   151                 _res.content = _data.content;
       
   152                 _res.setMedia(_data.media);
       
   153                 _res.setAnnotationType(_data.meta["id-ref"]);
       
   154                 _res.setTags(IriSP._(_data.tags).pluck("id-ref"));
       
   155                 _res.keywords = _res.getTagTexts();
       
   156                 _res.setBegin(_data.begin);
       
   157                 _res.setEnd(_data.end);
       
   158                 _res.creator = _data.meta["dc:creator"] || "";
       
   159                 _res.project = _data.meta.project || "";
       
   160                 if (typeof _data.meta["dc:source"] !== "undefined" && typeof _data.meta["dc:source"].content !== "undefined") {
       
   161                     _res.source = JSON.parse(_data.meta["dc:source"].content);
       
   162                 }
       
   163                 if (typeof _data.content.audio !== "undefined" && _data.content.audio.href) {
       
   164                     _res.audio = _data.content.audio;
       
   165                 }
       
   166                 return _res;
       
   167             },
       
   168             serializer : function(_data, _source, _dest) {
       
   169                 var _color = parseInt(_data.color.replace(/^#/,''),16).toString();
       
   170                 var _res = {
       
   171                     id : _data.id,
       
   172                     begin : _data.begin.milliseconds,
       
   173                     end : _data.end.milliseconds,
       
   174                     content : IriSP._.defaults(
       
   175                         {},
       
   176                         {
       
   177                             title : _data.title,
       
   178                             description : _data.description,
       
   179                         audio : _data.audio,
       
   180                         img: {
       
   181                             src: _data.thumbnail
       
   182                         }
       
   183                     },
       
   184                         _data.content,
       
   185                         {
       
   186                             title: "",
       
   187                             description: ""
       
   188                         }
       
   189                     ),
       
   190                     color: _color,
       
   191                     media : _data.media.id,
       
   192                     meta : {
       
   193                         "id-ref" : _data.getAnnotationType().id,
       
   194                         "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
       
   195                         "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
       
   196                         "dc:creator" : _data.creator || _source.creator,
       
   197                         "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
       
   198 //                        project : _source.projectId
       
   199                     }
       
   200                 };
       
   201                 if (_source.regenerateTags) {
       
   202                     _res.tags = IriSP._(_data.keywords).map(function(_kw) {
       
   203                         return {
       
   204                             "id-ref": _source.__keywords[_kw.toLowerCase()].id
       
   205                         };
       
   206                     });
       
   207                 } else {
       
   208                     _res.tags = IriSP._(_data.tag.id).map(function(_id) {
       
   209                        return {
       
   210                            "id-ref" : _id
       
   211                        };
       
   212                     });
       
   213                 }
       
   214                 _res.content.title = _data.title || _res.content.title || "";
       
   215                 _dest.annotations.push(_res);
       
   216             }
       
   217         },
       
   218         mashup : {
       
   219             serialized_name : "lists",
       
   220             deserializer : function(_data, _source) {
       
   221                 if (typeof _data.meta !== "object" || typeof _data.meta.listtype !== "string" || _data.meta.listtype !== "mashup") {
       
   222                     return undefined;
       
   223                 }
       
   224                 var _res = new IriSP.Model.Mashup(_data.id, _source);
       
   225                 _res.title = _data.meta["dc:title"];
       
   226                 _res.description = _data.meta["dc:description"];
       
   227                 _res.creator = _data.meta["dc:creator"];
       
   228                 _res.setAnnotationsById(_data.items);
       
   229                 return _res;        
       
   230             },
       
   231             serializer : function(_data, _source, _dest) {
       
   232                 var _res = {
       
   233                     meta : {
       
   234                         "dc:title": _data.title || "",
       
   235                         "dc:description": _data.description || "",
       
   236                         "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
       
   237                         "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
       
   238                         "dc:creator" : _data.creator || _source.creator,
       
   239                         "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
       
   240                         listtype: "mashup"
       
   241                     },
       
   242                     items: _data.segments.map(function(_annotation) {
       
   243                         return _annotation.annotation.id;
       
   244                     }),
       
   245                     id: _data.id
       
   246                 };
       
   247                 _dest.lists.push(_res);
       
   248             }
       
   249         }
       
   250     },
       
   251     serialize : function(_source) {
       
   252         var _res = {
       
   253                 meta: {
       
   254                     "dc:creator": _source.creator,
       
   255                     "dc:contributor" : _source.contributor || _source.creator,
       
   256                     "dc:created": IriSP.Model.dateToIso(_source.created),
       
   257                     "dc:modified" : IriSP.Model.dateToIso(_source.modified),
       
   258                     "dc:title": _source.title || "",
       
   259                     "dc:description": _source.description || "",
       
   260                     id: _source.projectId || _source.id
       
   261                 },
       
   262                 views: [
       
   263                     {
       
   264                         id: IriSP.Model.getUID(),
       
   265                         contents: [],
       
   266                         annotation_types: []
       
   267                     }
       
   268                 ],
       
   269                 lists: [],
       
   270                 "annotation-types": [],
       
   271                 medias: [],
       
   272                 tags: [],
       
   273                 annotations: []
       
   274             },
       
   275             _this = this;
       
   276         if (_source.regenerateTags) {
       
   277             _source.__keywords = {};
       
   278             _source.getAnnotations().forEach(function(a) {
       
   279                 IriSP._(a.keywords).each(function(kw) {
       
   280                     var lkw = kw.toLowerCase();
       
   281                     if (typeof _source.__keywords[lkw] === "undefined") {
       
   282                         _source.__keywords[lkw] = {
       
   283                             id: IriSP.Model.getUID(),
       
   284                             title: kw,
       
   285                             regenerated: true
       
   286                         };
       
   287                     }
       
   288                 });
       
   289             });
       
   290             IriSP._(_source.__keywords).each(function(kw) {
       
   291                 _this.types.tag.serializer(kw, _source, _res);
       
   292             });
       
   293         }
       
   294         _source.forEach(function(_list, _typename) {
       
   295             if (typeof _this.types[_typename] !== "undefined") {
       
   296                 _list.forEach(function(_el) {
       
   297                     _this.types[_typename].serializer(_el, _source, _res);
       
   298                 });
       
   299             }
       
   300         });
       
   301         return JSON.stringify(_res);
       
   302     },
       
   303     deSerialize : function(_data, _source) {
       
   304         if (typeof _data !== "object" || _data === null) {
       
   305             return;
       
   306         }
       
   307         IriSP._(this.types).forEach(function(_type, _typename) {
       
   308             var _listdata = _data[_type.serialized_name],
       
   309                 _list = new IriSP.Model.List(_source.directory);
       
   310             if (typeof _listdata !== "undefined" && _listdata !== null) {
       
   311                 if (_listdata.hasOwnProperty("length")) {
       
   312                     var _l = _listdata.length;
       
   313                     for (var _i = 0; _i < _l; _i++) {
       
   314                         var _element = _type.deserializer(_listdata[_i], _source);
       
   315                         if (typeof _element !== "undefined" && _element) {
       
   316                             _list.push(_element);
       
   317                         }
       
   318                     }
       
   319                 } else {
       
   320                     var _element = _type.deserializer(_listdata, _source);
       
   321                     if (typeof _element !== "undefined" && _element) {
       
   322                         _list.push(_element);
       
   323                     }
       
   324                 }
       
   325             }
       
   326             _source.addList(_typename, _list);
       
   327         });
       
   328         
       
   329         if (typeof _data.meta !== "undefined") {
       
   330             _source.projectId = _data.meta.id;
       
   331             _source.title = _data.meta["dc:title"] || _data.meta.title || "";
       
   332             _source.description = _data.meta["dc:description"] || _data.meta.description || "";
       
   333             _source.creator = _data.meta["dc:creator"] || _data.meta.creator || "";
       
   334             _source.contributor = _data.meta["dc:contributor"] || _data.meta.contributor || _source.creator;
       
   335             _source.created = IriSP.Model.isoToDate(_data.meta["dc:created"] || _data.meta.created);
       
   336         }
       
   337         
       
   338         if (typeof _data.meta !== "undefined" && typeof _data.meta.main_media !== "undefined" && typeof _data.meta.main_media["id-ref"] !== "undefined") {
       
   339             _source.currentMedia = _source.getElement(_data.meta.main_media["id-ref"]);
       
   340         }
       
   341     }
       
   342 };
       
   343 
       
   344 /* End of LDT Platform Serializer */