update OMF 6 and test it. It works once but not twice
[nepi.git] / src / nepi / resources / omf / messages_6.py
1 #
2 #    NEPI, a framework to manage network experiments
3 #    Copyright (C) 2013 INRIA
4 #
5 #    This program is free software: you can redistribute it and/or modify
6 #    it under the terms of the GNU General Public License as published by
7 #    the Free Software Foundation, either version 3 of the License, or
8 #    (at your option) any later version.
9 #
10 #    This program is distributed in the hope that it will be useful,
11 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #    GNU General Public License for more details.
14 #
15 #    You should have received a copy of the GNU General Public License
16 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #
18 # Author: Alina Quereilhac <alina.quereilhac@inria.fr>
19 #         Julien Tribino <julien.tribino@inria.fr>
20
21 from xml.etree import cElementTree as ET
22
23 class MessageHandler():
24     """
25     .. class:: Class Args :
26       
27         :param sliceid: Slice Name (= Xmpp Slice)
28         :type expid: str
29         :param expid: Experiment ID (= Xmpp User)
30         :type expid: str
31
32     .. note::
33
34        This class is used only for OMF 5.4 Protocol and is going to become unused
35
36     """
37
38     def __init__(self):
39         """
40         
41         """
42         pass
43
44     def _type_element(self, type_elt, xmlns, msg_id):
45         """ Insert a markup element with an id
46
47         """
48         elt = ET.Element(type_elt)
49         elt.set("xmlns", xmlns)
50         elt.set("mid", msg_id)
51         return elt
52
53     
54
55     def _attr_element(self, parent, markup, text, type_key=None, type_value = None):
56         """ Insert a markup element with a text (value)
57
58         :param parent: Parent element in an XML point of view
59         :type parent: ElementTree Element
60         :param markup: Name of the markup
61         :type markup: str
62         :param text: Value of the markup element
63         :type text: str
64
65         """
66         elt = ET.SubElement(parent, markup)
67         if type_key and type_value:
68             elt.set(type_key, type_value)
69         elt.text = text
70         return elt
71
72     def _id_element(self, parent, markup, key, value):
73         """ Insert a markup element with a text (value)
74
75         :param parent: Parent element in an XML point of view
76         :type parent: ElementTree Element
77         :param markup: Name of the markup
78         :type markup: str
79         :param text: Value of the markup element
80         :type text: str
81
82         """
83         elt = ET.SubElement(parent, markup)
84         elt.set(key, value)
85         return elt
86
87     def create_function(self, msg_id, src, rtype, timestamp, props = None, guards = None):
88         """ Build a create message
89         """
90         payload = self._type_element("create", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id )
91         self._attr_element(payload,"src",src)
92         self._attr_element(payload,"ts",timestamp)
93         self._attr_element(payload,"rtype",rtype)
94
95         if props :
96             if rtype == "application" :
97                 properties = self._id_element(payload,"props","xmlns:application",
98                       "http://schema.mytestbed.net/omf/6.0/protocol/application")
99             else:
100                 properties = self._attr_element(payload,"props","")
101
102             for prop in props.keys():
103                 self._attr_element(properties,prop,props[prop],type_key="type", type_value = "string")
104
105         if guards :
106             guardians = self._attr_element(payload,"guard","")
107             for guard in guards.keys():
108                 self._attr_element(guardians,guard,guards[guard],type_key="type", type_value = "string")
109
110         return payload
111
112     def configure_function(self, msg_id, src, timestamp, props = None, guards = None):
113         """ Build a configure message
114         """
115         payload = self._type_element("configure", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id )
116         self._attr_element(payload,"src",src)
117         self._attr_element(payload,"ts",timestamp)
118
119         if props :
120             properties = self._attr_element(payload,"props","")
121             for prop in props.keys():
122                 self._attr_element(properties,prop,props[prop],type_key="type", type_value = "symbol")
123
124         if guards :
125             guardians = self._attr_element(payload,"guard","")
126             for guard in guards.keys():
127                 self._attr_element(guardians,guard,guards[guard],type_key="type", type_value = "string")
128
129         return payload
130
131     def request_function(self, msg_id, src, timestamp,  props = None, guards = None):
132         """ Build a request message
133
134         """
135         payload = self._type_element("request", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id )
136         self._attr_element(payload,"src",src)
137         self._attr_element(payload,"ts",timestamp)
138
139         if props :
140             properties = self._attr_element(payload,"props","")
141             for prop in props.keys():
142                 self._attr_element(properties,prop,props[prop])
143
144         if guards :
145             guardians = self._attr_element(payload,"guard","")
146             for guard in guards.keys():
147                 self._attr_element(guardians,guard,guards[guard])
148         return payload
149
150     def inform_function(self, msg_id, src, timestamp, cid, itype):
151         """ Build an inform message
152
153         """
154         payload = self._type_element("inform", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id )
155         sliceid = self._attr_element(payload,"src",src)
156         expid = self._attr_element(config,"ts",timestamp)
157         target = self._attr_element(config,"cid",cid)
158         value = self._attr_element(config,"itype",value)
159         path = self._attr_element(config,"properties",path)
160         return payload
161
162     def release_function(self, msg_id, src, timestamp, res_id = None, props = None, guards = None):
163         """ Build a release message
164
165         """
166         payload = self._type_element("release", "http://schema.mytestbed.net/omf/6.0/protocol", msg_id )
167         self._attr_element(payload,"src",src)
168         self._attr_element(payload,"ts",timestamp)
169         if res_id :
170             self._attr_element(payload,"res_id",timestamp)
171  
172         if props :
173             properties = self._id_element(payload,"props","xmlns:frcp",
174                       "http://schema.mytestbed.net/omf/6.0/protocol")
175             for prop in props.keys():
176                 self._attr_element(properties,prop,props[prop])
177
178         if guards :
179             guardians = self._attr_element(payload,"guard","")
180             for guard in guards.keys():
181                 self._attr_element(guardians,guard,guards[guard])
182
183         return payload
184