src/js/model.js
author veltr
Fri, 06 Apr 2012 19:13:08 +0200
branchnew-model
changeset 854 29f28a9f236f
child 856 41c574c807d1
permissions -rw-r--r--
New Model first commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
854
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
     1
/* model.js is where data is stored in a standard form, whatever the serializer */
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
     2
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
     3
IriSP.Cinelab = {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
     4
    STATUS_WAITING : 1,
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
     5
    STATUS_READY : 2
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
     6
}
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
     7
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
     8
IriSP.Cinelab.Source = function(_directory, _url, _serializer) {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
     9
    this.status = IriSP.Cinelab.STATUS_EMPTY;
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    10
    if (typeof _directory === "undefined") {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    11
        throw "Error : Cinelab.Source called with no parent directory";
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    12
    }
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    13
    if (typeof _url === "undefined") {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    14
        throw "Error : Cinelab.Source called with no URL";
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    15
    }
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    16
    if (typeof _serializer === "undefined") {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    17
        throw "Error : Cinelab.Source called with no serializer";
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    18
    }
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    19
    this.directory = _directory;
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    20
    this.serializer = _serializer;
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    21
    this.url = _url;
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    22
    this.callbackQueue = [];
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    23
    this.contents = null;
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    24
}
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    25
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    26
IriSP.Cinelab.Source.prototype.get = function() {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    27
    IriSP.jQuery.getJSON(_url, function(_result) {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    28
        this.contents = this.serializer.deSerialize(_result);
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    29
        if (this.callbackQueue.length) {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    30
            var _this = this;
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    31
            IriSP._.each(this.callbackQueue, function(_callback) {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    32
                _callback.call(_this, this.contents);
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    33
            });
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    34
        }
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    35
        this.callbackQueue = [];
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    36
    });
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    37
}
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    38
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    39
IriSP.Cinelab.Source.prototype.addCallback = function(_callback) {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    40
    if (this.status === IriSP.Cinelab.STATUS_READY) {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    41
        callback.call(this, this.contents);
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    42
    } else {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    43
        this.callbackQueue.push(_callback);
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    44
    }
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    45
}
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    46
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    47
IriSP.Cinelab.Directory = function() {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    48
    this.sources = {};
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    49
    this.consolidated = [];
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    50
    this.imports = {};
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    51
}
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    52
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    53
IriSP.Cinelab.Directory.prototype.addSource = function(_source, _serializer) {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    54
    this.source[_source] = new IriSP.Cinelab.Source(this, _source, _serializer);
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    55
}
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    56
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    57
IriSP.Cinelab.Directory.prototype.getSource = function(_source) {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    58
    return (typeof this.sources[_source] !== "undefined" ? this.sources[_source] : false);
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    59
}
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    60
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    61
IriSP.Cinelab.Directory.prototype.source = function(_source, _serializer) {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    62
    if (typeof this.sources[_source] !== "undefined") {
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    63
        this.addSource(_source, _serializer);
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    64
    }
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    65
    return this.getSource(_source);
29f28a9f236f New Model first commit
veltr
parents:
diff changeset
    66
}