web/res/js/tracemanager.js
author ymh <ymh.work@gmail.com>
Wed, 18 Dec 2024 12:52:21 +0100
changeset 1583 459a88818bec
parent 1304 10974bff4dae
permissions -rw-r--r--
add jquery and dashjs to client page
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     1
/*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     2
 * Modelled Trace API
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
     3
 *
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
     4
 * This file is part of ktbs4js.
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
     5
 *
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
     6
 * ktbs4js is free software: you can redistribute it and/or modify it
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
     7
 * under the terms of the GNU Lesser General Public License as
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
     8
 * published by the Free Software Foundation, either version 3 of the
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
     9
 * License, or (at your option) any later version.
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    10
 *
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    11
 * ktbs4js is distributed in the hope that it will be useful,
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    14
 * GNU Lesser General Public License for more details.
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    15
 *
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    16
 * You should have received a copy of the GNU Lesser General Public
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    17
 * License along with ktbs4js.  If not, see <http://www.gnu.org/licenses/>.
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    18
 *
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    19
 */
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    20
/* FIXME: properly use require.js feature. This will do for debugging in the meantime */
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
    21
window.tracemanager = (function($) {
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    22
     // If there are more than MAX_FAILURE_COUNT synchronisation
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    23
     // failures, then disable synchronisation
1304
10974bff4dae upgrade metadataplayer + publish enmi 14and 15
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 623
diff changeset
    24
    var MAX_FAILURE_COUNT = 20;
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    25
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    26
     // If there are more than MAX_BUFFER_SIZE obsels in the buffer,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    27
     // then "compress" them as a single "ktbsFullBuffer"
1304
10974bff4dae upgrade metadataplayer + publish enmi 14and 15
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 623
diff changeset
    28
    var  MAX_BUFFER_SIZE = 500;
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    29
1304
10974bff4dae upgrade metadataplayer + publish enmi 14and 15
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 623
diff changeset
    30
    var _replacement = {
10974bff4dae upgrade metadataplayer + publish enmi 14and 15
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 623
diff changeset
    31
         ';': '"',
10974bff4dae upgrade metadataplayer + publish enmi 14and 15
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 623
diff changeset
    32
         '"': ';',
10974bff4dae upgrade metadataplayer + publish enmi 14and 15
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 623
diff changeset
    33
         '#': '%23',
10974bff4dae upgrade metadataplayer + publish enmi 14and 15
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 623
diff changeset
    34
         '&': '%26',
10974bff4dae upgrade metadataplayer + publish enmi 14and 15
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 623
diff changeset
    35
         '?': '%3F'
10974bff4dae upgrade metadataplayer + publish enmi 14and 15
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 623
diff changeset
    36
     };
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    37
     var BufferedService_prototype = {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    38
         /*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    39
          *  Buffered service for traces
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    40
          */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    41
         // url: "",
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    42
         // buffer: [],
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    43
         // isReady: false,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    44
         // timer: null,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    45
         // failureCount: 0,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    46
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    47
         /* Flush buffer */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    48
         flush: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    49
             // FIXME: add mutex on this.buffer
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    50
             if (! this.isReady)
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    51
             {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    52
                 if (window.console) window.console.log("Sync service not ready");
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    53
             } else if (this.failureCount > MAX_FAILURE_COUNT)
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    54
             {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    55
                 // Disable synchronisation
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    56
                 this.set_sync_mode('none');
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    57
             } else if (this.buffer.length) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    58
                 var temp = this.buffer;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    59
                 this.buffer = [];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    60
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    61
                 if (this.mode == 'GET')
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    62
                 {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    63
                     // GET mode: do some data mangline. We mark the
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    64
                     // "compressed" nature of the generated JSON by
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    65
                     // prefixing it with c
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    66
                     var data = 'c' + JSON.stringify(temp.map(function (o) { return o.toCompactJSON(); }));
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    67
                     // Swap " (very frequent, which will be
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    68
                     // serialized into %22) and ; (rather rare), this
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    69
                     // saves some bytes
1304
10974bff4dae upgrade metadataplayer + publish enmi 14and 15
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 623
diff changeset
    70
                     data = data.replace(/[;"#?&]/g, function(s){ return _replacement[s]; });
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    71
                     // FIXME: check data length (< 2K is safe)
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    72
                     var request=$('<img />').error( function() { this.failureCount += 1; })
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    73
                         .load( function() { this.failureCount = 0; })
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    74
                         .attr('src', this.url + 'trace/?data=' + data);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    75
                 }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    76
                 else
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    77
                 {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    78
                     $.ajax({ url: this.url + 'trace/',
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    79
                              type: 'POST',
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    80
                              contentType: 'application/json',
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    81
                              data: JSON.stringify(temp.map(function (o) { return o.toJSON(); })),
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    82
                              processData: false,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    83
                              // Type of the returned data.
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    84
                              dataType: "html",
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    85
                              error: function(jqXHR, textStatus, errorThrown) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    86
                                  if (window.console) window.console.log("Error when sending buffer:", textStatus);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    87
                                  this.failureCount += 1;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    88
                              },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    89
                              success: function(data, textStatus, jqXHR) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    90
                                  // Reset failureCount to 0 as soon as there is 1 valid answer
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    91
                                  this.failureCount = 0;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    92
                              }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    93
                            });
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    94
                 }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    95
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    96
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    97
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    98
         /* Sync mode: delayed, sync (immediate sync), none (no
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    99
          * synchronisation with server, the trace has to be explicitly saved
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   100
          * if needed */
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   101
         set_sync_mode: function(mode, default_subject) {
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   102
             this.sync_mode = mode;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   103
             if (! this.isReady && mode !== "none")
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   104
                 this.init(default_subject);
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   105
             if (mode == 'delayed') {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   106
                 this.start_timer();
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   107
             } else {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   108
                 this.stop_timer();
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   109
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   110
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   111
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   112
         /* Enqueue an obsel */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   113
         enqueue: function(obsel) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   114
             if (this.buffer.length > MAX_BUFFER_SIZE)
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   115
             {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   116
                 obsel = new Obsel('ktbsFullBuffer', this.buffer[0].begin,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   117
                                   this.buffer[this.buffer.length - 1].end, this.buffer[0].subject);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   118
                 obsel.trace = this.buffer[0].trace;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   119
                 this.buffer = [];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   120
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   121
             this.buffer.push(obsel);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   122
             if (this.sync_mode === 'sync') {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   123
                 // Immediate sync of the obsel.
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   124
                 this.flush();
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   125
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   126
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   127
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   128
         start_timer: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   129
             var self = this;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   130
             if (this.timer === null) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   131
                 this.timer = window.setInterval(function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   132
                                                     self.flush();
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   133
                                                 }, this.timeOut);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   134
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   135
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   136
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   137
         stop_timer: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   138
             if (this.timer !== null) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   139
                 window.clearInterval(this.timer);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   140
                 this.timer = null;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   141
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   142
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   143
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   144
         /*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   145
          * Initialize the sync service
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   146
          */
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   147
         init: function(default_subject) {
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   148
             var self = this;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   149
             if (this.isReady)
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   150
                 /* Already initialized */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   151
                 return;
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   152
             if (typeof default_subject === 'undefined')
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   153
                 default_subject = 'anonymous';
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   154
             if (this.mode == 'GET')
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   155
             {
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   156
                 var request=$('<img/>').attr('src', this.url + 'login?userinfo={"default_subject": "' + default_subject + '"}');
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   157
                 // Do not wait for the return, assume it is
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   158
                 // initialized. This assumption will not work anymore
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   159
                 // if login returns some necessary information
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   160
                 this.isReady = true;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   161
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   162
             else
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   163
             {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   164
                 $.ajax({ url: this.url + 'login',
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   165
                          type: 'POST',
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   166
                          data: 'userinfo={"default_subject":"' + default_subject + '"}',
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   167
                          success: function(data, textStatus, jqXHR) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   168
                              self.isReady = true;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   169
                              if (self.buffer.length) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   170
                                  self.flush();
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   171
                              }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   172
                          }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   173
                        });
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   174
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   175
         }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   176
     };
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   177
     var BufferedService = function(url, mode) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   178
         this.url = url;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   179
         this.buffer = [];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   180
         this.isReady = false;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   181
         this.timer = null;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   182
         this.failureCount = 0;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   183
         // sync_mode is either "none", "sync" or "buffered"
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   184
         this.sync_mode = "none";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   185
         /* mode can be either POST or GET */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   186
         if (mode == 'POST' || mode == 'GET')
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   187
             this.mode = mode;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   188
         else
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   189
             this.mode = 'POST';
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   190
         /* Flush buffer every timeOut ms if the sync_mode is delayed */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   191
         this.timeOut = 2000;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   192
     };
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   193
     BufferedService.prototype = BufferedService_prototype;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   194
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   195
     var Trace_prototype = {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   196
         /* FIXME: We could/should use a sorted list such as
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   197
          http://closure-library.googlecode.com/svn/docs/class_goog_structs_AvlTree.html
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   198
          to speed up queries based on time */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   199
         obsels: [],
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   200
         /* Trace URI */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   201
         uri: "",
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   202
         default_subject: "",
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   203
         /* baseuri is used as the base URI to resolve relative
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   204
          * attribute-type names in obsels. Strictly speaking, this
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   205
          * should rather be expressed as a reference to model, or
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   206
          * more generically, as a qname/URI dict */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   207
         baseuri: "",
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   208
         /* Mapping of obsel type or property name to a compact
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   209
          * representation (shorthands).
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   210
          */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   211
         shorthands: null,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   212
         syncservice: null,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   213
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   214
         /* Define the trace URI */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   215
         set_uri: function(uri) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   216
             this.uri = uri;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   217
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   218
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   219
         /* Sync mode: delayed, sync (immediate sync), none (no
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   220
          * synchronisation with server, the trace has to be explicitly saved
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   221
          * if needed */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   222
         set_sync_mode: function(mode) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   223
             if (this.syncservice !== null) {
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   224
                 this.syncservice.set_sync_mode(mode, this.default_subject);
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   225
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   226
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   227
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   228
         /*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   229
          * Return a list of the obsels of this trace matching the parameters
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   230
          */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   231
         list_obsels: function(_begin, _end, _reverse) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   232
             var res;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   233
             if (typeof _begin !== 'undefined' || typeof _end !== 'undefined') {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   234
                 /*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   235
                  * Not optimized yet.
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   236
                  */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   237
                 res = [];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   238
                 var l = this.obsels.length;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   239
                 for (var i = 0; i < l; i++) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   240
                     var o = this.obsels[i];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   241
                     if ((typeof _begin !== 'undefined' && o.begin > _begin) && (typeof _end !== 'undefined' && o.end < _end)) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   242
                         res.push(o);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   243
                     }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   244
                 }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   245
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   246
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   247
             if (typeof _reverse !== 'undefined') {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   248
                 if (res !== undefined) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   249
                     /* Should reverse the whole list. Make a copy. */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   250
                     res = this.obsels.slice(0);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   251
                 }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   252
                 res.sort(function(a, b) { return b.begin - a.begin; });
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   253
                 return res;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   254
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   255
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   256
             if (res === undefined) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   257
                 res = this.obsels;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   258
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   259
             return res;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   260
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   261
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   262
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   263
         /*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   264
          * Return the obsel of this trace identified by the URI, or undefined
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   265
          */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   266
         get_obsel: function(id) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   267
             for (var i = 0; i < this.obsels.length; i++) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   268
                 /* FIXME: should check against variations of id/uri, take this.baseuri into account */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   269
                 if (this.obsels[i].uri === id) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   270
                     return this.obsels[i];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   271
                 }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   272
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   273
             return undefined;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   274
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   275
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   276
         set_default_subject: function(subject) {
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   277
             // FIXME: if we call this method after the sync_service
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   278
             // init method, then the default_subject will not be
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   279
             // consistent anymore. Maybe we should then call init() again?
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   280
             this.default_subject = subject;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   281
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   282
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   283
         get_default_subject: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   284
             return this.default_subject;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   285
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   286
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   287
         /* (type:ObselType, begin:int, end:int?, subject:str?, attributes:[AttributeType=>any]?) */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   288
         /* Create a new obsel and add it to the trace */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   289
         create_obsel: function(type, begin, end, subject, _attributes) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   290
             var o = new Obsel(type, begin, end, subject);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   291
             if (typeof _attributes !== 'undefined') {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   292
                 o.attributes = _attributes;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   293
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   294
             o.trace = this;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   295
             this.obsels.push(o);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   296
             if (this.syncservice !== null)
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   297
                 this.syncservice.enqueue(o);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   298
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   299
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   300
         /* Helper methods */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   301
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   302
         /* Create a new obsel with the given attributes */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   303
         trace: function(type, _attributes, _begin, _end, _subject) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   304
             var t = (new Date()).getTime();
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   305
             if (typeof begin === 'undefined') {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   306
                 _begin = t;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   307
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   308
             if (typeof end === 'undefined') {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   309
                 _end = _begin;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   310
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   311
             if (typeof subject === 'undefined') {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   312
                 _subject = this.default_subject;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   313
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   314
             if (typeof _attributes === 'undefined') {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   315
                 _attributes = {};
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   316
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   317
             return this.create_obsel(type, _begin, _end, _subject, _attributes);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   318
         }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   319
     };
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   320
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   321
     var Trace = function(uri, requestmode) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   322
         /* FIXME: We could/should use a sorted list such as
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   323
          http://closure-library.googlecode.com/svn/docs/class_goog_structs_AvlTree.html
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   324
          to speed up queries based on time */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   325
         this.obsels = [];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   326
         /* Trace URI */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   327
         if (uri === undefined)
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   328
             uri = "";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   329
         this.uri = uri;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   330
         this.sync_mode = "none";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   331
         this.default_subject = "";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   332
         this.shorthands = {};
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   333
         /* baseuri is used a the base URI to resolve relative attribute names in obsels */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   334
         this.baseuri = "";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   335
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   336
         this.syncservice = new BufferedService(uri, requestmode);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   337
         $(window).unload( function () {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   338
                               if (this.syncservice && this.sync_mode !== 'none') {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   339
                                   this.syncservice.flush();
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   340
                                   this.syncservice.stop_timer();
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   341
                               }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   342
                           });
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   343
     };
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   344
     Trace.prototype = Trace_prototype;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   345
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   346
     var Obsel_prototype = {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   347
         /* The following attributes are here for documentation
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   348
          * purposes. They MUST be defined in the constructor
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   349
          * function. */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   350
         trace: undefined,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   351
         type: undefined,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   352
         begin: undefined,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   353
         end: undefined,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   354
         subject: undefined,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   355
         /* Dictionary indexed by ObselType URIs */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   356
         attributes: {},
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   357
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   358
         /* Method definitions */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   359
         get_trace: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   360
             return this.trace;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   361
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   362
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   363
         get_obsel_type: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   364
             return this.type;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   365
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   366
         get_begin: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   367
             return this.begin;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   368
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   369
         get_end: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   370
             return this.end;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   371
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   372
         get_subject: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   373
             return this.subject;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   374
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   375
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   376
         list_attribute_types: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   377
             var result = [];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   378
             for (var prop in this.attributes) {
583
f655dafb741e added www2012
Raphael Velt <raph.velt@gmail.com>
parents: 581
diff changeset
   379
                 if (this.attributes.hasOwnProperty(prop))
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   380
                     result.push(prop);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   381
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   382
             /* FIXME: we return URIs here instead of AttributeType elements */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   383
             return result;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   384
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   385
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   386
         list_relation_types: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   387
             /* FIXME: not implemented yet */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   388
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   389
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   390
         list_related_obsels: function (rt) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   391
             /* FIXME: not implemented yet */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   392
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   393
         list_inverse_relation_types: function () {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   394
             /* FIXME: not implemented yet */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   395
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   396
         list_relating_obsels: function (rt) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   397
             /* FIXME: not implemented yet */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   398
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   399
         /*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   400
          * Return the value of the given attribute type for this obsel
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   401
          */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   402
         get_attribute_value: function(at) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   403
             if (typeof at === "string")
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   404
                 /* It is a URI */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   405
                 return this.attributes[at];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   406
             else
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   407
                 /* FIXME: check that at is instance of AttributeType */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   408
                 return this.attributes[at.uri];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   409
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   410
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   411
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   412
         /* obsel modification (trace amendment) */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   413
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   414
         set_attribute_value: function(at, value) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   415
             if (typeof at === "string")
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   416
                 /* It is a URI */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   417
                 this.attributes[at] = value;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   418
             /* FIXME: check that at is instance of AttributeType */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   419
             else
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   420
                 this.attributes[at.uri] = value;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   421
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   422
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   423
         del_attribute_value: function(at) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   424
             if (typeof at === "string")
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   425
                 /* It is a URI */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   426
                 delete this.attributes[at];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   427
             /* FIXME: check that at is instance of AttributeType */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   428
             else
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   429
                 delete this.attributes[at.uri];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   430
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   431
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   432
         add_related_obsel: function(rt, value) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   433
             /* FIXME: not implemented yet */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   434
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   435
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   436
         del_related_obsel: function(rt, value) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   437
             /* FIXME: not implemented yet */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   438
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   439
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   440
         /*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   441
          * Return a JSON representation of the obsel
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   442
          */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   443
         toJSON: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   444
             var r = {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   445
                 "@id": this.id,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   446
                 "@type": this.type,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   447
                 "begin": this.begin,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   448
                 "end": this.end,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   449
                 "subject": this.subject
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   450
             };
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   451
             for (var prop in this.attributes) {
583
f655dafb741e added www2012
Raphael Velt <raph.velt@gmail.com>
parents: 581
diff changeset
   452
                 if (this.attributes.hasOwnProperty(prop))
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   453
                     r[prop] = this.attributes[prop];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   454
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   455
             return r;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   456
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   457
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   458
         /*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   459
          * Return a compact JSON representation of the obsel.
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   460
          * Use predefined + custom shorthands for types/properties
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   461
          */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   462
         toCompactJSON: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   463
             var r = {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   464
                 "@t": (this.trace.shorthands.hasOwnProperty(this.type) ? this.trace.shorthands[this.type] : this.type),
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   465
                 "@b": this.begin,
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   466
             };
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   467
             // Transmit subject only if different from default_subject
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   468
             if (this.subject !== this.trace.default_subject)
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   469
                 r["@s"] = this.subject;
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   470
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   471
             // Store duration (to save some bytes) and only if it is non-null
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   472
             if (this.begin !== this.end)
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   473
                 r["@d"] = this.end - this.begin;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   474
583
f655dafb741e added www2012
Raphael Velt <raph.velt@gmail.com>
parents: 581
diff changeset
   475
             // Store id only if != ""
f655dafb741e added www2012
Raphael Velt <raph.velt@gmail.com>
parents: 581
diff changeset
   476
             if (this.id !== "")
f655dafb741e added www2012
Raphael Velt <raph.velt@gmail.com>
parents: 581
diff changeset
   477
                 r["@i"] = this.id;
f655dafb741e added www2012
Raphael Velt <raph.velt@gmail.com>
parents: 581
diff changeset
   478
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   479
             for (var prop in this.attributes) {
583
f655dafb741e added www2012
Raphael Velt <raph.velt@gmail.com>
parents: 581
diff changeset
   480
                 if (this.attributes.hasOwnProperty(prop))
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   481
                 {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   482
                     var v = this.attributes[prop];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   483
                     r[prop] = this.trace.shorthands.hasOwnProperty(v) ? this.trace.shorthands[v] : v;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   484
                 }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   485
             }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   486
             return r;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   487
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   488
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   489
         toJSONstring: function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   490
             return JSON.stringify(this.toJSON());
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   491
         }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   492
     };
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   493
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   494
     var Obsel = function(type, begin, end, subject, attributes) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   495
         this.trace = undefined;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   496
         this.uri = "";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   497
         this.id = "";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   498
         this.type = type;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   499
         this.begin = begin;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   500
         this.end = end;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   501
         this.subject = subject;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   502
         /* Is the obsel synched with the server ? */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   503
         this.sync_status = false;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   504
         /* Dictionary indexed by ObselType URIs */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   505
         this.attributes = {};
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   506
     };
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   507
     Obsel.prototype = Obsel_prototype;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   508
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   509
     var TraceManager_prototype = {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   510
         traces: [],
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   511
         /*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   512
          * Return the trace with id name
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   513
          * If it was not registered, return undefined.
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   514
          */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   515
         get_trace: function(name) {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   516
             return this.traces[name];
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   517
         },
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   518
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   519
         /*
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   520
          * Explicitly create and initialize a new trace with the given name.
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   521
          * The optional uri parameter allows to initialize the trace URI.
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   522
          *
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   523
          * If another existed with the same name before, then it is replaced by a new one.
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   524
          */
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   525
         init_trace: function(name, params)
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   526
         {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   527
             if (window.console) window.console.log("init_trace", params);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   528
             url = params.url ? params.url : "";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   529
             requestmode = params.requestmode ? params.requestmode : "POST";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   530
             syncmode = params.syncmode ? params.syncmode : "none";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   531
             default_subject = params.default_subject ? params.default_subject : "default";
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   532
             var t = new Trace(url, requestmode);
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   533
             t.set_default_subject(default_subject);
581
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   534
             t.set_sync_mode(syncmode);
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   535
             this.traces[name] = t;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   536
             return t;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   537
         }
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   538
     };
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   539
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   540
     var TraceManager = function() {
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   541
         this.traces = {};
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   542
     };
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   543
     TraceManager.prototype = TraceManager_prototype;
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   544
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   545
     var tracemanager  = new TraceManager();
7607516bd9f1 Add Tracewidget
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   546
     return tracemanager;
623
5b7d7ab6baff re-enabled traces
Raphael Velt <raph.velt@gmail.com>
parents: 583
diff changeset
   547
 })(jQuery);