1 | //================== MODELS =====================
|
---|
2 | var ControllerModel = Backbone.Model.extend({
|
---|
3 | defaults: {
|
---|
4 | selectedNode: null
|
---|
5 | }
|
---|
6 | });
|
---|
7 |
|
---|
8 | var Experiment = Backbone.RelationalModel.extend({
|
---|
9 | url: function () {
|
---|
10 | return '/Experiment/Experiment?nodeId=' + this.get('nodeId');
|
---|
11 | },
|
---|
12 | defaults: {
|
---|
13 | title: 'My Experiment',
|
---|
14 | isExperiment: true,
|
---|
15 | run: false,
|
---|
16 | nodeId: null,
|
---|
17 | repititions: 1,
|
---|
18 | group: 'TESTAZURE'
|
---|
19 | },
|
---|
20 | isNew: function() { return this.get('nodeId') == null; },
|
---|
21 | relations: [{
|
---|
22 | key: 'experiment',
|
---|
23 | relatedModel: 'ExperimentNode'
|
---|
24 | }]
|
---|
25 | });
|
---|
26 |
|
---|
27 | var ExperimentNode = Backbone.RelationalModel.extend({
|
---|
28 | defaults: {
|
---|
29 | title: 'Experiment',
|
---|
30 | key: -1,
|
---|
31 | data: {},
|
---|
32 | parent: null,
|
---|
33 | isExperiment: false,
|
---|
34 | nodeId: null
|
---|
35 | },
|
---|
36 | relations: [{
|
---|
37 | type: Backbone.HasMany,
|
---|
38 | key: 'children',
|
---|
39 | relatedModel: 'ExperimentNode',
|
---|
40 | collectionType: 'ScenarioList',
|
---|
41 | reverseRelation: {
|
---|
42 | key: 'parent'
|
---|
43 | }
|
---|
44 | }],
|
---|
45 | url: function () {
|
---|
46 | return this.get('isExperiment') ? '/Experiment/Experiment?nodeId=' + this.get('nodeId') : '/Experiment/Scenario?nodeId=' + this.get('nodeId');
|
---|
47 | },
|
---|
48 | initialize: function (spec) {
|
---|
49 | if (typeof spec.key === 'undefined' || spec.key == -1) {
|
---|
50 | spec.key = ExperimentNode.globalKeyCount;
|
---|
51 | this.set({ key: spec.key });
|
---|
52 | ExperimentNode.globalKeyCount++;
|
---|
53 | }
|
---|
54 | else if (spec.key >= ExperimentNode.globalKeyCount)
|
---|
55 | ExperimentNode.globalKeyCount = spec.key + 1;
|
---|
56 |
|
---|
57 | ExperimentNode.globalNodeMap[spec.key] = this;
|
---|
58 | },
|
---|
59 | // adds a new experimentNode to this node
|
---|
60 | addNode: function (experimentNode) {
|
---|
61 | if (!(experimentNode instanceof ExperimentNode)) {
|
---|
62 | experimentNode = new ExperimentNode(experimentNode);
|
---|
63 | }
|
---|
64 | this.get('children').add(experimentNode);
|
---|
65 | experimentNode.set({ parent: this });
|
---|
66 | this.trigger('node-added', experimentNode);
|
---|
67 | return experimentNode;
|
---|
68 | },
|
---|
69 | // moves an experimentNode into this node
|
---|
70 | moveNode: function (experimentNode) {
|
---|
71 | var parent = experimentNode.get('parent');
|
---|
72 | if (parent != null) {
|
---|
73 | // remove from parent
|
---|
74 | parent.get('children').remove(experimentNode);
|
---|
75 | }
|
---|
76 | this.addNode(experimentNode);
|
---|
77 | },
|
---|
78 | // delete this node
|
---|
79 | remove: function () {
|
---|
80 | var parent = this.get('parent');
|
---|
81 | if (parent != null) {
|
---|
82 | parent.get('children').remove(this);
|
---|
83 | this.set({ parent: null });
|
---|
84 | // simply replace it with 'undefined'
|
---|
85 | delete ExperimentNode.globalNodeMap[this.get('key')];
|
---|
86 | }
|
---|
87 | this.trigger('node-removed', this);
|
---|
88 | },
|
---|
89 | lookup: function (key) {
|
---|
90 | return ExperimentNode.globalNodeMap[key];
|
---|
91 | }
|
---|
92 | },
|
---|
93 | {
|
---|
94 | globalKeyCount: 0,
|
---|
95 | globalNodeMap: {},
|
---|
96 | lookup: function (key) {
|
---|
97 | return ExperimentNode.globalNodeMap[key];
|
---|
98 | },
|
---|
99 | nextGlobalKey: function () {
|
---|
100 | var key = ExperimentNode.globalKeyCount;
|
---|
101 | ExperimentNode.globalKeyCount++;
|
---|
102 | return key;
|
---|
103 | }
|
---|
104 | }
|
---|
105 | );
|
---|
106 |
|
---|
107 | var ExperimentList = Backbone.Collection.extend({
|
---|
108 | url: function () {
|
---|
109 | return "/Experiment/ExperimentList";
|
---|
110 | },
|
---|
111 | model: Experiment
|
---|
112 | });
|
---|
113 |
|
---|
114 | var ScenarioList = Backbone.Collection.extend({
|
---|
115 | url: function () {
|
---|
116 | return "/Experiment/ScenarioList";
|
---|
117 | },
|
---|
118 | model: ExperimentNode
|
---|
119 | }); |
---|