Bug fix: if no local storage, this.user = false
[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             if(localStorage.getItem('user')!='undefined'){
110                             this.user = JSON.parse(localStorage.getItem('user'));
111             }else{
112                 return false;
113             }
114                 }
115                 return this.user;
116         },
117
118         login: function(fn) {
119         user = localStorage.getItem('user');
120         if($.isEmptyObject(user)){
121                     $.post("/rest/user/",{'filters':{'user_hrn':'$user_hrn'}}, function( data ) {
122                             //myslice.user = new user(data[0]);
123                             localStorage.setItem('user', JSON.stringify(data[0]));
124                     });
125         }
126         },
127
128     getSlices: function(name) {
129         
130     },
131     
132     refreshUser: function() {
133         
134     },
135     
136     apply: function() {
137
138         //$('div#loading').show();
139         //this.pending = [];
140         //this.save();
141         //setTimeout(function(){
142                 //$('div#loading').hide();
143                 //window.location.href = '/resources/' + this.slice + '?message=true';
144                 //},6000);
145         
146          
147
148          $.post("/rest/slice/", { 'fields': ['resource','slice_hrn'], 'filters': { 'slice_hrn' : this.slice  } }, function(data) {
149                  console.log(data);
150                  resources = [];
151                  reserved = [];
152                  update = [];
153                  if ('resource' in data[0]) {
154                          $.each(data[0].resource, function(idx, r) {
155                                  resources.push(r.urn);
156                          });
157                  }
158                  //myslice.pending
159                  console.log(myslice.pending);
160                  console.log(resources);
161                  $.each(resources.concat(myslice.pending), function(idx, v) {
162                          update.push( v );
163                  });
164                  console.log(update);
165                  $.post("/update/slice/", { 'filters': { 'slice_hrn' : myslice.slice  }, 'params' : update }, function(data) {
166                          console.log(data);
167                  });
168          });
169         console.log(this.slice);
170     }
171     
172 };
173
174
175 /* MySlice Init */
176
177 // var Reflector = function(obj) {
178   // this.getProperties = function() {
179     // var properties = [];
180     // for (var prop in obj) {
181       // if (typeof obj[prop] != 'function') {
182         // properties.push(prop);
183         // console.log("prop: " + prop);
184       // } else {
185         // console.log("func: " + prop);
186       // }
187     // }
188     // return properties;
189   // };
190 // };
191 // var reflector = new Reflector(myslice.slices[0].resources.pending);
192 // reflector.getProperties();
193
194
195 $(document).ready(function() {
196         //console.log(myslice.user().slices);
197         
198         // $.post("/rest/user/",{'filters':{'user_hrn':'$user_hrn'}}, function(data) {
199                 // myslice.user = new user(data[0]);
200                 // console.log(myslice.user.slices);
201                 // myslice.user.list();
202 //        
203         // }).fail(function() {
204                 // throw "error retreiving user data";
205         // });
206         // Put the object into storage
207         //localStorage.setItem('testObject', JSON.stringify(testObject));
208
209         // Retrieve the object from storage
210         //myslice.load();
211
212 });
213
214 /* EXEMPLES */
215 // add a resource to pending
216
217 //myslice.user.slice('ple.upmc.myslicedemo').resources.pending.add(resource);
218