Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / ui / static / snf / js / glance_models.js @ 3796f345

History | View | Annotate | Download (5 kB)

1 1a947bb7 Kostas Papadimitriou
;(function(root){
2 1a947bb7 Kostas Papadimitriou
    
3 1a947bb7 Kostas Papadimitriou
    // root
4 1a947bb7 Kostas Papadimitriou
    var root = root;
5 1a947bb7 Kostas Papadimitriou
    
6 1a947bb7 Kostas Papadimitriou
    // setup namepsaces
7 1a947bb7 Kostas Papadimitriou
    var snf = root.synnefo = root.synnefo || {};
8 1a947bb7 Kostas Papadimitriou
    var glance = snf.glance = snf.glance || {};
9 1a947bb7 Kostas Papadimitriou
    var models = glance.models = glance.models || {}
10 1a947bb7 Kostas Papadimitriou
    var storage = glance.storage = glance.storage || {};
11 1a947bb7 Kostas Papadimitriou
    var util = snf.util = snf.util || {};
12 1a947bb7 Kostas Papadimitriou
13 1a947bb7 Kostas Papadimitriou
    // shortcuts
14 1a947bb7 Kostas Papadimitriou
    var bb = root.Backbone;
15 1a947bb7 Kostas Papadimitriou
    var slice = Array.prototype.slice
16 1a947bb7 Kostas Papadimitriou
17 258235f4 Kostas Papadimitriou
    models.GlanceImage = snf.models.Image.extend({
18 258235f4 Kostas Papadimitriou
        api_type: 'glance',
19 1a947bb7 Kostas Papadimitriou
20 258235f4 Kostas Papadimitriou
        get_size: function() {
21 7d98da49 Kostas Papadimitriou
            return this.get('size') / 1024 / 1024;
22 258235f4 Kostas Papadimitriou
        },
23 ea223582 Kostas Papadimitriou
24 258235f4 Kostas Papadimitriou
        get_readable_size: function() {
25 03639c6d Kostas Papadimitriou
            var unknown_title = snf.config.image_deleted_size_title || "(none)";
26 03639c6d Kostas Papadimitriou
            if (this.is_deleted()) { return unknown_title }
27 03639c6d Kostas Papadimitriou
            return this.get('size') > 0 ? util.readablizeBytes(this.get('size')) : unknown_title;
28 258235f4 Kostas Papadimitriou
        },
29 30b6f316 Kostas Papadimitriou
30 ce493ced Kostas Papadimitriou
        get_meta: function(key) {
31 ce493ced Kostas Papadimitriou
            // check for lowercase keys too since glance image meta are set 
32 ce493ced Kostas Papadimitriou
            // via http headers
33 ce493ced Kostas Papadimitriou
            var val = models.GlanceImage.__super__.get_meta.call(this, key)
34 ce493ced Kostas Papadimitriou
            if (val == null) {
35 ce493ced Kostas Papadimitriou
                val = models.GlanceImage.__super__.get_meta.call(this, 
36 ce493ced Kostas Papadimitriou
                                                                 key.toLowerCase())
37 ce493ced Kostas Papadimitriou
            }
38 ce493ced Kostas Papadimitriou
            return val;
39 43ec1206 Kostas Papadimitriou
        },
40 43ec1206 Kostas Papadimitriou
41 ce493ced Kostas Papadimitriou
        display_size: function() {
42 ce493ced Kostas Papadimitriou
            return this.get_readable_size();
43 43ec1206 Kostas Papadimitriou
        },
44 43ec1206 Kostas Papadimitriou
45 ce493ced Kostas Papadimitriou
        display_users: function() {
46 ce493ced Kostas Papadimitriou
            return this.get_meta('users').split(' ').join(", ");
47 30b6f316 Kostas Papadimitriou
        }
48 babfdb9b Kostas Papadimitriou
        
49 1a947bb7 Kostas Papadimitriou
    })
50 1a947bb7 Kostas Papadimitriou
51 258235f4 Kostas Papadimitriou
    models.GlanceImages = snf.models.Images.extend({
52 258235f4 Kostas Papadimitriou
        model: models.GlanceImage,
53 ea223582 Kostas Papadimitriou
        api_type: 'glance',
54 d7612b6e Kostas Papadimitriou
55 ea223582 Kostas Papadimitriou
        type_selections: {'personal':'My images', 
56 ea223582 Kostas Papadimitriou
                          'shared': 'Shared with me', 
57 ea223582 Kostas Papadimitriou
                          'public': 'Public'},
58 ea223582 Kostas Papadimitriou
        type_selections_order: ['system', 'personal', 'shared', 'public'],
59 ce493ced Kostas Papadimitriou
        display_metadata: ['size', 'users', 'osfamily', 'status', 'created_at', 'updated_at', 
60 ce493ced Kostas Papadimitriou
            'filename', 'format', 'root_partition'],
61 ce493ced Kostas Papadimitriou
        meta_labels: {'OS':'OS', 'osfamily':'OS Family', 'GUI':'GUI'},
62 ce493ced Kostas Papadimitriou
        display_extra_metadata: true,
63 258235f4 Kostas Papadimitriou
        read_method: 'head',
64 258235f4 Kostas Papadimitriou
65 258235f4 Kostas Papadimitriou
        // custom glance api parser
66 258235f4 Kostas Papadimitriou
        parse: function (resp, xhr) {
67 258235f4 Kostas Papadimitriou
            if (_.isArray(resp)) {
68 258235f4 Kostas Papadimitriou
                resp = {'images': {'values': resp }};
69 258235f4 Kostas Papadimitriou
            }
70 258235f4 Kostas Papadimitriou
            return models.GlanceImages.__super__.parse.call(this, resp, xhr);
71 258235f4 Kostas Papadimitriou
        },
72 258235f4 Kostas Papadimitriou
73 258235f4 Kostas Papadimitriou
        _read_image_from_request: function(image, msg, xhr) {
74 258235f4 Kostas Papadimitriou
            var img = {};
75 258235f4 Kostas Papadimitriou
            img['metadata'] = {values:{}};
76 258235f4 Kostas Papadimitriou
77 258235f4 Kostas Papadimitriou
            var headers = snf.util.parseHeaders(xhr.getAllResponseHeaders().toLowerCase());
78 258235f4 Kostas Papadimitriou
79 258235f4 Kostas Papadimitriou
            _.each(headers, function(value, key) {
80 258235f4 Kostas Papadimitriou
                if (key.indexOf("x-image-meta") == -1) {
81 258235f4 Kostas Papadimitriou
                    return
82 258235f4 Kostas Papadimitriou
                }
83 258235f4 Kostas Papadimitriou
84 258235f4 Kostas Papadimitriou
                if (key.indexOf("x-image-meta-property") == -1) {
85 258235f4 Kostas Papadimitriou
                    img[key.replace("x-image-meta-","").replace(/-/g,"_")] = _.trim(value);
86 258235f4 Kostas Papadimitriou
                } else {
87 258235f4 Kostas Papadimitriou
                    img.metadata.values[key.replace('x-image-meta-property-',"").replace(/-/g,"_")] = _.trim(value);
88 258235f4 Kostas Papadimitriou
                }
89 258235f4 Kostas Papadimitriou
            
90 258235f4 Kostas Papadimitriou
            })
91 258235f4 Kostas Papadimitriou
92 258235f4 Kostas Papadimitriou
            return img;
93 258235f4 Kostas Papadimitriou
        },
94 ea223582 Kostas Papadimitriou
95 ea223582 Kostas Papadimitriou
        parse_meta: function(img) {
96 ea223582 Kostas Papadimitriou
            if (img.properties) {
97 ea223582 Kostas Papadimitriou
                img.metadata = {};
98 ea223582 Kostas Papadimitriou
                img.metadata.values = img.properties;
99 c16d0b2c Kostas Papadimitriou
            } else {
100 c16d0b2c Kostas Papadimitriou
                if (!img.metadata) {
101 c16d0b2c Kostas Papadimitriou
                    img.metadata = {values:{}};
102 c16d0b2c Kostas Papadimitriou
                }
103 ea223582 Kostas Papadimitriou
            }
104 bbbceeea Kostas Papadimitriou
105 bbbceeea Kostas Papadimitriou
            // fixes plankton regression (returns lowercase meta keys)
106 bbbceeea Kostas Papadimitriou
            if (img.metadata.values.os && !img.metadata.values.OS) {
107 bbbceeea Kostas Papadimitriou
                img.metadata.values.OS = img.metadata.values.os;
108 bbbceeea Kostas Papadimitriou
            }
109 bbbceeea Kostas Papadimitriou
110 258235f4 Kostas Papadimitriou
            img = models.GlanceImages.__super__.parse_meta.call(this, img);
111 ea223582 Kostas Papadimitriou
            return img;
112 ea223582 Kostas Papadimitriou
        },
113 258235f4 Kostas Papadimitriou
114 ea223582 Kostas Papadimitriou
        get_system_images: function() {
115 1faf0b9c Kostas Papadimitriou
            return _.filter(this.active(), function(i) { 
116 1faf0b9c Kostas Papadimitriou
                return _.include(_.keys(snf.config.system_images_owners), 
117 1faf0b9c Kostas Papadimitriou
                                 i.get_owner());
118 1faf0b9c Kostas Papadimitriou
            })
119 ea223582 Kostas Papadimitriou
        },
120 ea223582 Kostas Papadimitriou
121 ea223582 Kostas Papadimitriou
        get_personal_images: function() {
122 1faf0b9c Kostas Papadimitriou
            return _.filter(this.active(), function(i) { 
123 1faf0b9c Kostas Papadimitriou
                return i.get_owner() == snf.user.username 
124 1faf0b9c Kostas Papadimitriou
            });
125 ea223582 Kostas Papadimitriou
        },
126 ea223582 Kostas Papadimitriou
127 ea223582 Kostas Papadimitriou
        get_public_images: function() {
128 258235f4 Kostas Papadimitriou
            return _.filter(this.active(), function(i){ return i.is_public() })
129 ea223582 Kostas Papadimitriou
        },
130 ea223582 Kostas Papadimitriou
131 ea223582 Kostas Papadimitriou
        get_shared_images: function() {
132 1faf0b9c Kostas Papadimitriou
            return _.filter(this.active(), function(i){ 
133 1faf0b9c Kostas Papadimitriou
                return !_.include(_.keys(snf.config.system_images_owners), 
134 1faf0b9c Kostas Papadimitriou
                                  i.get_owner()) && 
135 ea223582 Kostas Papadimitriou
                               i.get_owner() != snf.user.username &&
136 1faf0b9c Kostas Papadimitriou
                               !i.is_public();
137 1faf0b9c Kostas Papadimitriou
            });
138 8b71ea92 Kostas Papadimitriou
        }
139 258235f4 Kostas Papadimitriou
140 1a947bb7 Kostas Papadimitriou
    })
141 30b6f316 Kostas Papadimitriou
        
142 30b6f316 Kostas Papadimitriou
    // replace images storage collection
143 30b6f316 Kostas Papadimitriou
    snf.glance.register = function() {
144 30b6f316 Kostas Papadimitriou
        // storage initialization
145 30b6f316 Kostas Papadimitriou
        snf.storage.glance = {};
146 30b6f316 Kostas Papadimitriou
        snf.storage.glance.images = new models.GlanceImages();
147 30b6f316 Kostas Papadimitriou
148 30b6f316 Kostas Papadimitriou
        // use glance images
149 30b6f316 Kostas Papadimitriou
        snf.storage.images = snf.storage.glance.images;
150 30b6f316 Kostas Papadimitriou
    }
151 ea223582 Kostas Papadimitriou
152 1a947bb7 Kostas Papadimitriou
})(this);