src/js/libs/tracemanager.js
author veltr
Tue, 20 Mar 2012 21:17:48 +0100
branchpopcorn-port
changeset 835 a8af9da7c622
child 841 8da49ff273e0
permissions -rw-r--r--
Integrated trace manager
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
835
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
     1
/*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
     2
 * Modelled Trace API
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
     3
 */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
     4
IriSP.TraceManager = function($) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
     5
     /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
     6
      * FIXME: Write proper representation functions (str, json, ...)
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
     7
      */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
     8
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
     9
     var BufferedService_prototype = {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    10
         /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    11
          *  Buffered service for traces
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    12
          */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    13
         // url: "",
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    14
         // buffer: [],
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    15
         // isReady: false,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    16
         // timer: null,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    17
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    18
         /* Flush buffer */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    19
         flush: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    20
             // FIXME: should add a counter to avoid starving the sync
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    21
             // process in case of too many generated obsels.
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    22
             // FIXME: add mutex on this.buffer
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    23
             if (! this.isReady)
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    24
             {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    25
                 console.log("Sync service not ready");
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    26
             } else if (this.buffer.length) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    27
                 var temp = this.buffer;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    28
                 this.buffer = [];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    29
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    30
                 if (this.mode == 'GET')
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    31
                 {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    32
                     // GET mode: do some data mangline. We mark the
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    33
                     // "compressed" nature of the generated JSON by
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    34
                     // prefixing it with c
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    35
                     var data = 'c' + JSON.stringify(temp.map(function (o) { return o.toCompactJSON(); }));
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    36
                     // Swap " (very frequent, which will be
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    37
                     // serialized into %22) and / (rather rare), this
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    38
                     // saves some bytes
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    39
                     data = data.replace(/[\/"]/g, function(s){ return s == '/' ? '"' : '/'; }).replace('#','%23');
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    40
                     // FIXME: check data length (< 2K is safe)
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    41
                     var request=$('<img/>').attr('src', this.url + 'trace/?data=' + data);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    42
                 }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    43
                 else
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    44
                 {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    45
                     $.ajax({ url: this.url + 'trace/',
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    46
                              type: 'POST',
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    47
                              contentType: 'application/json',
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    48
                              data: JSON.stringify(temp.map(function (o) { return o.toJSON(); })),
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    49
                              processData: false,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    50
                              // Type of the returned data.
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    51
                              dataType: "html",
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    52
                              error: function(jqXHR, textStatus, errorThrown) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    53
                                  // FIXME: not called for JSONP/crossdomain
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    54
                                  console.log("Error when sending buffer:", textStatus);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    55
                              },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    56
                              success: function(data, textStatus, jqXHR) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    57
                                  // FIXME: parse the returned JSON, and get
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    58
                                  // the updated properties (id, uri...) to apply them to temp items
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    59
                              }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    60
                            });
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    61
                 }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    62
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    63
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    64
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    65
         /* Enqueue an obsel */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    66
         enqueue: function(obsel) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    67
             this.buffer.push(obsel);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    68
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    69
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    70
         start_timer: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    71
             var self = this;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    72
             if (this.timer === null) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    73
                 this.timer = window.setInterval(function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    74
                                                     console.log("Flushing timeout");
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    75
                                                     self.flush();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    76
                                                 }, this.timeOut);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    77
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    78
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    79
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    80
         stop_timer: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    81
             if (this.timer !== null) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    82
                 window.clearInterval(this.timer);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    83
                 this.timer = null;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    84
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    85
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    86
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    87
         /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    88
          * Initialize the sync service
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    89
          */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    90
         init: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    91
             var self = this;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    92
             if (this.isReady)
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    93
                 /* Already initialized */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    94
                 return;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    95
             if (this.mode == 'GET')
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    96
             {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    97
                 var request=$('<img/>').attr('src', this.url + 'login?userinfo={"name":"ktbs4js"}');
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    98
                 // Do not wait for the return, assume it is
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
    99
                 // initialized. This assumption will not work anymore
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   100
                 // if login returns some necessary information
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   101
                 this.isReady = true;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   102
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   103
             else
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   104
             {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   105
                 $.ajax({ url: this.url + 'login',
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   106
                          type: 'POST',
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   107
                          data: 'userinfo={"name":"ktbs4js"}',
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   108
                          success: function(data, textStatus, jqXHR) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   109
                              self.isReady = true;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   110
                              if (self.buffer.length) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   111
                                  self.flush();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   112
                              }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   113
                          }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   114
                        });
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   115
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   116
         }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   117
     };
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   118
     var BufferedService = function(url, mode) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   119
         this.url = url;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   120
         this.buffer = [];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   121
         this.isReady = false;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   122
         this.timer = null;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   123
         /* mode can be either POST or GET */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   124
         if (mode == 'POST' || mode == 'GET')
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   125
             this.mode = mode;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   126
         else
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   127
             this.mode = 'POST';
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   128
         /* Flush buffer every timeOut ms if the sync_mode is delayed */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   129
         this.timeOut = 2000;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   130
     };
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   131
     BufferedService.prototype = BufferedService_prototype;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   132
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   133
     var Trace_prototype = {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   134
         /* FIXME: We could/should use a sorted list such as
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   135
          http://closure-library.googlecode.com/svn/docs/class_goog_structs_AvlTree.html
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   136
          to speed up queries based on time */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   137
         obsels: [],
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   138
         /* Trace URI */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   139
         uri: "",
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   140
         sync_mode: "none",
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   141
         default_subject: "",
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   142
         /* baseuri is used as the base URI to resolve relative
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   143
          * attribute-type names in obsels. Strictly speaking, this
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   144
          * should rather be expressed as a reference to model, or
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   145
          * more generically, as a qname/URI dict */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   146
         baseuri: "",
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   147
         /* Mapping of obsel type or property name to a compact
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   148
          * representation (shorthands).
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   149
          */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   150
         shorthands: null,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   151
         syncservice: null,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   152
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   153
         /* Define the trace URI */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   154
         set_uri: function(uri) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   155
             this.uri = uri;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   156
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   157
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   158
         /* Sync mode: delayed, sync (immediate sync), none (no
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   159
          * synchronisation with server, the trace has to be explicitly saved
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   160
          * if needed */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   161
         set_sync_mode: function(mode) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   162
             this.sync_mode = mode;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   163
             if (this.syncservice != null) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   164
                 if (mode !== 'none') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   165
                     this.syncservice.init();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   166
                 }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   167
                 if (mode == 'delayed') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   168
                     this.syncservice.start_timer();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   169
                 } else {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   170
                     this.syncservice.stop_timer();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   171
                 }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   172
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   173
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   174
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   175
         /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   176
          * Return a list of the obsels of this trace matching the parameters
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   177
          */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   178
         list_obsels: function(_begin, _end, _reverse) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   179
             var res;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   180
             if (typeof _begin !== 'undefined' || typeof _end !== 'undefined') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   181
                 /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   182
                  * Not optimized yet.
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   183
                  */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   184
                 res = [];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   185
                 var l = this.obsels.length;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   186
                 for (var i = 0; i < l; i++) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   187
                     var o = this.obsels[i];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   188
                     if ((typeof _begin !== 'undefined' && o.begin > _begin) && (typeof _end !== 'undefined' && o.end < _end)) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   189
                         res.push(o);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   190
                     }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   191
                 }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   192
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   193
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   194
             if (typeof _reverse !== 'undefined') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   195
                 if (res !== undefined) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   196
                     /* Should reverse the whole list. Make a copy. */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   197
                     res = this.obsels.slice(0);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   198
                 }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   199
                 res.sort(function(a, b) { return b.begin - a.begin; });
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   200
                 return res;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   201
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   202
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   203
             if (res === undefined) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   204
                 res = this.obsels;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   205
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   206
             return res;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   207
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   208
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   209
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   210
         /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   211
          * Return the obsel of this trace identified by the URI, or undefined
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   212
          */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   213
         get_obsel: function(id) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   214
             for (var i = 0; i < this.obsels.length; i++) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   215
                 /* FIXME: should check against variations of id/uri, take this.baseuri into account */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   216
                 if (this.obsels[i].uri === id) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   217
                     return this.obsels[i];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   218
                 }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   219
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   220
             return undefined;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   221
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   222
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   223
         set_default_subject: function(subject) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   224
             this.default_subject = subject;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   225
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   226
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   227
         get_default_subject: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   228
             return this.default_subject;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   229
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   230
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   231
         /* (type:ObselType, begin:int, end:int?, subject:str?, attributes:[AttributeType=>any]?) */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   232
         /* Create a new obsel and add it to the trace */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   233
         create_obsel: function(type, begin, end, subject, _attributes) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   234
             var o = new Obsel(type, begin, end, subject);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   235
             if (typeof _attributes !== 'undefined') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   236
                 o.attributes = _attributes;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   237
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   238
             o.trace = this;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   239
             this.obsels.push(o);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   240
             if (this.syncservice !== null && this.sync_mode != 'none') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   241
                 this.syncservice.enqueue(o);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   242
                 if (this.sync_mode === 'sync') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   243
                     // Immediate sync of the obsel.
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   244
                     this.syncservice.flush();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   245
                 }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   246
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   247
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   248
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   249
	     obselProbe : function(element, bindingEvent, ObselFunction) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   250
			console.log("!!!!!!!!- ICI -!!!!!!!!!");
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   251
			console.log(element);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   252
			console.log(bindingEvent);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   253
			console.log(ObselFunction);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   254
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   255
	        //var myOPI = self.setInterval("ObselProbeInterval("+element+","+bindingEvent+","+ObselFunction+")",1000);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   256
			var myOPI = self.setInterval("ObselProbeInterval("+element+")",1000);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   257
			//var ObselProbeInterval = function(element, bindingEvent, ObselFunction){
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   258
			var ObselProbeInterval = function(element) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   259
				console.log("!!!!!!!!- ObselProbeInterval -!!!!!!!!!");
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   260
				console.log($(element).length);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   261
				/*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   262
				if($(element).length!=0){
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   263
					$(element).bind(bindingEvent, ObselFunction );
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   264
					this.clearInterval();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   265
				}else{	console.log("!!!!!!!!- EXISTE PAS -!!!!!!!!!")
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   266
				}
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   267
				*/
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   268
				//
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   269
			};
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   270
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   271
		 },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   272
         /* Helper methods */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   273
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   274
         /* Create a new obsel with the given attributes */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   275
         trace: function(type, _attributes, _begin, _end, _subject) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   276
             var t = (new Date()).getTime();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   277
             if (typeof begin === 'undefined') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   278
                 _begin = t;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   279
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   280
             if (typeof end === 'undefined') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   281
                 _end = _begin;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   282
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   283
             if (typeof subject === 'undefined') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   284
                 _subject = this.default_subject;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   285
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   286
             if (typeof _attributes === 'undefined') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   287
                 _attributes = {};
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   288
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   289
             return this.create_obsel(type, _begin, _end, _subject, _attributes);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   290
         }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   291
     };
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   292
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   293
     var Trace = function(uri, requestmode) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   294
         /* FIXME: We could/should use a sorted list such as
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   295
          http://closure-library.googlecode.com/svn/docs/class_goog_structs_AvlTree.html
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   296
          to speed up queries based on time */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   297
         this.obsels = [];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   298
         /* Trace URI */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   299
         if (uri === undefined)
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   300
             uri = "";
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   301
         this.uri = uri;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   302
         this.sync_mode = "none";
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   303
         this.default_subject = "";
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   304
         this.shorthands = {};
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   305
         /* baseuri is used a the base URI to resolve relative attribute names in obsels */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   306
         this.baseuri = "";
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   307
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   308
         this.syncservice = new BufferedService(uri, requestmode);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   309
         $(window).unload( function () {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   310
                               if (this.syncservice && this.sync_mode !== 'none') {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   311
                                   this.syncservice.flush();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   312
                                   this.syncservice.stop_timer();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   313
                               }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   314
                           });
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   315
     };
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   316
     Trace.prototype = Trace_prototype;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   317
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   318
     var Obsel_prototype = {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   319
         /* The following attributes are here for documentation
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   320
          * purposes. They MUST be defined in the constructor
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   321
          * function. */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   322
         trace: undefined,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   323
		 obselProbe: undefined,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   324
         type: undefined,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   325
         begin: undefined,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   326
         end: undefined,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   327
         subject: undefined,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   328
         /* Dictionary indexed by ObselType URIs */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   329
         attributes: {},
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   330
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   331
         /* Method definitions */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   332
         get_trace: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   333
             return this.trace;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   334
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   335
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   336
         get_obsel_type: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   337
             /* FIXME: maybe we should return a ObselType object. In the meantime, return the URI */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   338
             return this.type;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   339
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   340
         get_begin: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   341
             return this.begin;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   342
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   343
         get_end: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   344
             return this.end;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   345
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   346
         get_subject: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   347
             return this.subject;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   348
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   349
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   350
         list_attribute_types: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   351
             var result = [];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   352
             for (var prop in this.attributes) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   353
                 result.push(prop);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   354
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   355
             /* FIXME: we return URIs here instead of AttributeType elements */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   356
             return result;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   357
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   358
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   359
         list_relation_types: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   360
             /* FIXME: not implemented yet */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   361
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   362
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   363
         list_related_obsels: function (rt) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   364
             /* FIXME: not implemented yet */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   365
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   366
         list_inverse_relation_types: function () {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   367
             /* FIXME: not implemented yet */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   368
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   369
         list_relating_obsels: function (rt) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   370
             /* FIXME: not implemented yet */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   371
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   372
         /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   373
          * Return the value of the given attribute type for this obsel
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   374
          */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   375
         get_attribute_value: function(at) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   376
             if (typeof at === "string")
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   377
                 /* It is a URI */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   378
                 return this.attributes[at];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   379
             else
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   380
                 /* FIXME: check that at is instance of AttributeType */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   381
                 return this.attributes[at.uri];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   382
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   383
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   384
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   385
         /* obsel modification (trace amendment) */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   386
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   387
         set_attribute_value: function(at, value) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   388
             if (typeof at === "string")
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   389
                 /* It is a URI */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   390
                 this.attributes[at] = value;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   391
             /* FIXME: check that at is instance of AttributeType */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   392
             else
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   393
                 this.attributes[at.uri] = value;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   394
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   395
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   396
         del_attribute_value: function(at) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   397
             if (typeof at === "string")
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   398
                 /* It is a URI */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   399
                 delete this.attributes[at];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   400
             /* FIXME: check that at is instance of AttributeType */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   401
             else
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   402
                 delete this.attributes[at.uri];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   403
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   404
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   405
         add_related_obsel: function(rt, value) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   406
             /* FIXME: not implemented yet */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   407
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   408
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   409
         del_related_obsel: function(rt, value) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   410
             /* FIXME: not implemented yet */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   411
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   412
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   413
         /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   414
          * Return a JSON representation of the obsel
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   415
          */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   416
         toJSON: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   417
             var r = {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   418
                 "@id": this.id,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   419
                 "@type": this.type,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   420
                 "begin": this.begin,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   421
                 "end": this.end,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   422
                 "subject": this.subject
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   423
             };
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   424
             for (var prop in this.attributes) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   425
                 r[prop] = this.attributes[prop];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   426
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   427
             return r;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   428
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   429
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   430
         /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   431
          * Return a compact JSON representation of the obsel.
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   432
          * Use predefined + custom shorthands for types/properties
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   433
          */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   434
         toCompactJSON: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   435
             var r = {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   436
                 "@i": this.id,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   437
                 "@t": (this.trace.shorthands.hasOwnProperty(this.type)
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   438
                        ? this.trace.shorthands[this.type] : this.type),
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   439
                 "@b": this.begin,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   440
                 "@e": this.end,
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   441
                 "@s": this.subject
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   442
             };
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   443
             for (var prop in this.attributes) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   444
                 var v = this.attributes[prop];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   445
                 r[prop] = this.trace.shorthands.hasOwnProperty(v) ? this.trace.shorthands[v] : v;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   446
             }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   447
             return r;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   448
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   449
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   450
         toJSONstring: function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   451
             return JSON.stringify(this.toJSON());
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   452
         }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   453
     };
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   454
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   455
     var Obsel = function(type, begin, end, subject, attributes) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   456
         this.trace = undefined;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   457
         this.uri = "";
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   458
         this.id = "";
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   459
         this.type = type;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   460
         this.begin = begin;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   461
         this.end = end;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   462
         this.subject = subject;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   463
         /* Is the obsel synched with the server ? */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   464
         this.sync_status = false;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   465
         /* Dictionary indexed by ObselType URIs */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   466
         this.attributes = {};
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   467
     };
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   468
     Obsel.prototype = Obsel_prototype;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   469
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   470
     var TraceManager_prototype = {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   471
         traces: [],
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   472
         /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   473
          * Return the trace with id name
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   474
          * If it was not registered, return undefined.
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   475
          */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   476
         get_trace: function(name) {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   477
             return this.traces[name];
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   478
         },
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   479
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   480
         /*
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   481
          * Explicitly create and initialize a new trace with the given name.
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   482
          * The optional uri parameter allows to initialize the trace URI.
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   483
          *
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   484
          * If another existed with the same name before, then it is replaced by a new one.
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   485
          */
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   486
         init_trace: function(name, params)
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   487
         {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   488
             console.log("init_trace", params);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   489
             url = params.url ? params.url : "";
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   490
             requestmode = params.requestmode ? params.requestmode : "POST";
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   491
             syncmode = params.syncmode ? params.syncmode : "none";
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   492
             var t = new Trace(url, requestmode);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   493
             t.set_sync_mode(syncmode);
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   494
             this.traces[name] = t;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   495
             return t;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   496
         }
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   497
     };
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   498
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   499
     var TraceManager = function() {
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   500
         this.traces = {};
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   501
     };
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   502
     TraceManager.prototype = TraceManager_prototype;
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   503
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   504
     return new TraceManager();
a8af9da7c622 Integrated trace manager
veltr
parents:
diff changeset
   505
 };