2411e31f97713cd0362458c421cbd8de8cae4534
[unfold.git] / portal / platformview.py
1 from __future__ import print_function
2
3 from django.template             import RequestContext
4 from django.shortcuts            import render_to_response
5
6 from manifold.core.query         import Query
7 from unfold.page                 import Page
8 from plugins.raw                 import Raw
9 from plugins.stack               import Stack
10 from plugins.tabs                import Tabs
11 from plugins.googlemap           import GoogleMap
12 from plugins.senslabmap          import SensLabMap
13
14 from unfold.loginrequired        import FreeAccessView
15 from ui.topmenu                  import topmenu_items_live, the_user
16
17 from plugins.querytable          import QueryTable
18
19 from myslice.configengine        import ConfigEngine
20 from myslice.theme import ThemeView
21
22 # View for 1 platform and its details
23 class PlatformView(FreeAccessView, ThemeView):
24     template_name = "platform.html"
25
26     def get_context_data(self, **kwargs):
27         page = Page(self.request)
28         page.add_js_files  ( [ "js/common.functions.js" ] )
29
30         for key, value in kwargs.iteritems():
31             print("%s = %s" % (key, value))       
32             if key == "platformname":
33                 platformname=value
34                 
35         network_query  = Query().get('local:platform')\
36             .filter_by('platform', '==', platformname)\
37             .select('platform','platform_longname','gateway_type')
38         page.enqueue_query(network_query)
39
40         # ListResources of the platform
41         metadata = page.get_metadata()
42         resource_md = metadata.details_by_object('resource')
43         resource_fields = [column['name'] for column in resource_md['column']]
44         resources = platformname + ':resource'
45         query_resource_all = Query.get(resources).select(resource_fields)
46         page.enqueue_query(query_resource_all)
47         query_resource_default_fields = Query.get(resources).select('hrn','hostname', 'type','country')
48         page.enqueue_query(query_resource_default_fields)
49
50         page.expose_js_metadata()
51         networklist = QueryTable(
52             page  = page,
53             title = 'List',
54             domid = 'checkboxes',
55             # this is the query at the core of the slice list
56             query = network_query,
57             query_all = network_query,
58             checkboxes = False,
59             datatables_options = {
60             'iDisplayLength' : 25,
61             'bLengthChange'  : True,
62             },
63         )
64
65 #        networklist = SimpleList(
66 #            title = None,
67 #            page  = page,
68 #            key   = 'platform',
69 #            query = network_query,
70 #        )
71 #
72         # --------------------------------------------------------------------------
73         # RESOURCES
74         # for internal use in the querytable plugin;
75         # needs to be a unique column present for each returned record
76         main_query_init_key = 'hrn'
77
78         # the resources part is made of a Tabs (Geographic, List), 
79         resources_as_gmap = GoogleMap(
80             page       = page,
81             title      = 'Geographic view',
82             domid      = 'resources-map',
83             # tab's sons preferably turn this off
84             togglable  = False,
85             query      = query_resource_default_fields,
86             query_all  = query_resource_all,
87             # this key is the one issued by google
88             googlemap_api_key = ConfigEngine().googlemap_api_key(),
89             # the key to use at init-time
90             init_key   = main_query_init_key,
91             checkboxes = False,
92             # center on Paris
93             latitude   = 49.,
94             longitude  = 9,
95             zoom       = 4,
96         )
97         resources_as_3dmap = SensLabMap(
98             page       = page,
99             title      = '3D Map',
100             domid      = 'senslabmap',
101             query      = query_resource_default_fields,
102             query_all  = query_resource_all,
103         )
104         resources_as_list = QueryTable(
105             page       = page,
106             domid      = 'resources-list',
107             title      = 'List view',
108             # this is the query at the core of the slice list
109             query      = query_resource_default_fields,
110             query_all  = query_resource_all,
111             init_key     = main_query_init_key,
112             checkboxes = False,
113             datatables_options = {
114                 'iDisplayLength': 25,
115                 'bLengthChange' : True,
116                 'bAutoWidth'    : True,
117                 },
118             )
119         resources_sons = [
120              resources_as_gmap,
121              resources_as_3dmap,
122              resources_as_list,
123              ]
124         resources_area = Tabs ( page=page,
125                                 domid="resources",
126                                 togglable=True,
127                                 title="Resources",
128                                 outline_complete=True,
129                                 sons= resources_sons,
130                                 active_domid = 'resources-map',
131                                 persistent_active=True,
132                                 )
133
134         context = super(PlatformView, self).get_context_data(**kwargs)
135         context['person']   = self.request.user
136         context['networks'] = networklist.render(self.request)
137         context['resources'] = resources_area.render(self.request)
138
139         # XXX This is repeated in all pages
140         # more general variables expected in the template
141         context['title'] = 'Platforms connected to MySlice'
142         # the menu items on the top
143         context['topmenu_items'] = topmenu_items_live('Platforms', page)
144         # so we can sho who is logged
145         context['username'] = the_user(self.request)
146         context['theme'] = self.theme
147         context.update(page.prelude_env())
148
149         return context