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