2f8665534b011042d5cc737e524ba45fe6be16ef
[unfold.git] / portal / static / js / myslice.js
1 /*
2  * MySlice Class
3  */
4
5 function list() {
6         this.elements = [];
7 }
8
9 list.prototype.add = function(element) {
10         if (!this.has(element)) {
11                 this.elements.push(element);
12         }
13 };
14     
15 list.prototype.del = function(element) {
16         if (this.has(element)) {
17                 this.elements.splice(index, 1);
18         }
19 };
20     
21 list.prototype.has = function(element) {
22         index = $.inArray( element, this.elements );
23         if (index != -1) {
24                 return true;
25         }
26         return false;
27 };
28     
29 list.prototype.count = function() {
30     return this.elements.length;
31 };
32
33
34 /*
35  * resources, users, leases
36  */
37
38 function resources() {
39         this.pending = {
40                 toremove: new list(),
41                 toadd: new list(),
42         };
43 };
44
45 function leases() {
46         this.pending = {
47                 toremove: new list(),
48                 toadd: new list(),
49         };
50 };
51
52 function users() {
53         this.pending = {
54                 toremove: new list(),
55                 toadd: new list(),
56         };
57 };
58
59 /*
60  * Slice
61  */
62 function slice(name) {
63         this.name = name;
64         this.resources = new resources();
65         this.users = new users();
66         this.leases = new leases();
67         
68 };
69
70
71 /*
72  * User
73  */
74 function user(user) {
75         this.user = user;
76         this.testbeds = new list();
77         this.slices = new list();
78         
79         for (i = 0; i < this.user.slices.length; i++) {
80                 this.slices[this.user.slices[i]] = new slice(this.user.slices[i]);
81         }
82 };
83
84 user.prototype.slice = function(name) {
85         return this.slices[name];
86 };
87
88 user.prototype.list = function() {
89     for (s in this.slices) {
90     for (o in s) {
91       if (typeof o != 'function') {
92         console.log(o);
93       } else {
94         console.log("w "+o);
95       }
96       }
97     }
98 };
99
100 /*
101  * MySlice
102  */
103 var myslice = {
104         user: {},
105         
106         user: function() {
107                 if ($.isEmptyObject(this.user)) {
108                         //this.login(function() { return this.user; });
109                         this.user = JSON.parse(localStorage.getItem('user'));
110                 }
111                 return this.user;
112         },
113
114         login: function(fn) {
115         user = localStorage.getItem('user');
116         if($.isEmptyObject(user)){
117                     $.post("/rest/user/",{'filters':{'user_hrn':'$user_hrn'}}, function( data ) {
118                             //myslice.user = new user(data[0]);
119                             localStorage.setItem('user', JSON.stringify(data[0]));
120                     });
121         }
122         },
123
124     getSlices: function(name) {
125         
126     },
127     
128     refreshUser: function() {
129         
130     },
131     
132     apply: function() {
133
134         //$('div#loading').show();
135         //this.pending = [];
136         //this.save();
137         //setTimeout(function(){
138                 //$('div#loading').hide();
139                 //window.location.href = '/resources/' + this.slice + '?message=true';
140                 //},6000);
141         
142          
143
144          $.post("/rest/slice/", { 'fields': ['resource','slice_hrn'], 'filters': { 'slice_hrn' : this.slice  } }, function(data) {
145                  console.log(data);
146                  resources = [];
147                  reserved = [];
148                  update = [];
149                  if ('resource' in data[0]) {
150                          $.each(data[0].resource, function(idx, r) {
151                                  resources.push(r.urn);
152                          });
153                  }
154                  //myslice.pending
155                  console.log(myslice.pending);
156                  console.log(resources);
157                  $.each(resources.concat(myslice.pending), function(idx, v) {
158                          update.push( v );
159                  });
160                  console.log(update);
161                  $.post("/update/slice/", { 'filters': { 'slice_hrn' : myslice.slice  }, 'params' : update }, function(data) {
162                          console.log(data);
163                  });
164          });
165         console.log(this.slice);
166     }
167     
168 };
169
170
171 /* MySlice Init */
172
173 // var Reflector = function(obj) {
174   // this.getProperties = function() {
175     // var properties = [];
176     // for (var prop in obj) {
177       // if (typeof obj[prop] != 'function') {
178         // properties.push(prop);
179         // console.log("prop: " + prop);
180       // } else {
181         // console.log("func: " + prop);
182       // }
183     // }
184     // return properties;
185   // };
186 // };
187 // var reflector = new Reflector(myslice.slices[0].resources.pending);
188 // reflector.getProperties();
189
190
191 $(document).ready(function() {
192         //console.log(myslice.user().slices);
193         
194         // $.post("/rest/user/",{'filters':{'user_hrn':'$user_hrn'}}, function(data) {
195                 // myslice.user = new user(data[0]);
196                 // console.log(myslice.user.slices);
197                 // myslice.user.list();
198 //        
199         // }).fail(function() {
200                 // throw "error retreiving user data";
201         // });
202         // Put the object into storage
203         //localStorage.setItem('testObject', JSON.stringify(testObject));
204
205         // Retrieve the object from storage
206         //myslice.load();
207
208 });
209
210 /* EXEMPLES */
211 // add a resource to pending
212
213 //myslice.user.slice('ple.upmc.myslicedemo').resources.pending.add(resource);
214