def _wm_get_cb(self, msg): with self._times: to_ret = srvs.WmGetResponse() if msg.action == msg.GET: to_ret.elements.append( utils.element2msg( self._get_context(msg.context).get_element( msg.element.id))) elif msg.action == msg.GET_TEMPLATE: to_ret.elements.append( utils.element2msg( self._get_context(msg.context).get_template_individual( msg.element.label))) elif msg.action == msg.GET_RECURSIVE: for _, e in self._get_context(msg.context).get_recursive( msg.element.id, msg.relation_filter, msg.type_filter).items(): to_ret.elements.append(utils.element2msg(e)) elif msg.action == msg.RESOLVE: for e in self._get_context(msg.context).resolve_elements( utils.msg2element(msg.element)): to_ret.elements.append(utils.element2msg(e)) output = "" einput = utils.msg2element(msg.element) for e in to_ret.elements: output += "{} ".format(e.id) if self._verbose: log.info( "[WmGet]", "Done {} [{}]. Answer: {}. Time: {:0.3f} secs".format( msg.action, einput, output, self._times.get_last())) to_ret.snapshot_id = self._curr_snapshot.hex return to_ret
def _wm_modify_cb(self, msg): to_ret = srvs.WmModifyResponse() with self._times: if msg.action == msg.ADD: for e in msg.elements: updated_e = self._get_context(msg.context).add_element( utils.msg2element(e), msg.author) to_ret.elements.append(utils.element2msg(updated_e)) self._publish_change(msg.author, "add", elements=to_ret.elements, context_id=msg.context) elif msg.action == msg.UPDATE: for e in msg.elements: self._get_context(msg.context).update_element( utils.msg2element(e), msg.author) er = utils.element2msg( self._get_context(msg.context).get_element(e.id)) to_ret.elements.append(er) self._publish_change(msg.author, "update", elements=to_ret.elements, context_id=msg.context) elif msg.action == msg.UPDATE_PROPERTIES: for e in msg.elements: self._get_context(msg.context).update_properties( utils.msg2element(e), msg.author, self._ontology.get_reasoner(msg.type_filter), False) er = utils.element2msg( self._get_context(msg.context).get_element(e.id)) to_ret.elements.append(er) self._publish_change(msg.author, "update", elements=to_ret.elements, context_id=msg.context) elif msg.action == msg.REMOVE: for e in msg.elements: self._get_context(msg.context).remove_element( utils.msg2element(e), msg.author) to_ret.elements = msg.elements self._publish_change(msg.author, "remove", elements=msg.elements, context_id=msg.context) elif msg.action == msg.REMOVE_RECURSIVE: for e in msg.elements: self._get_context(msg.context).remove_recursive( utils.msg2element(e), msg.author, msg.relation_filter, msg.type_filter) to_ret.elements = msg.elements self._publish_change(msg.author, "remove_recursive", elements=msg.elements, context_id=msg.context) if self._verbose: log.info( "[WmModify]", "{} {} {}. Time: {:0.3f} secs".format( msg.author, msg.action, [e.id for e in to_ret.elements], self._times.get_last())) return to_ret
def remove_element(self, e, recursive=True, rel_filter=":sceneProperty", type_filter="", context_id='scene'): """ @brief Removes an element from the scene. e can be an Element or an id """ #print "{}".format(eid) msg = srvs.WmModifyRequest() msg.context = context_id msg.author = self._author_name + self._debug_info() msg.type_filter = type_filter msg.relation_filter = rel_filter if isinstance(e, Element): msg.elements.append(utils.element2msg(e)) elif isinstance(e, str): e = Element("", "", e) msg.elements.append(utils.element2msg(e)) if recursive: msg.action = msg.REMOVE_RECURSIVE else: msg.action = msg.REMOVE res = self._call(self._modify, msg) if (res): e._id = "" return 1 return -1
def remove_element(self, e, recursive=True, rel_filter="skiros:sceneProperty", type_filter="", context_id='scene'): """ @brief Removes an element from the scene. e can be an Element or an id @param e (Element/string) Element or id of element to remove @param recursive The recursive, if True, remove all children matching the rel_filter @param rel_filter The relative filter @param type_filter The type filter @param context_id (string)Ontology context identifier @return (int) 1 on success, -1 if an error occurs """ msg = srvs.WmModifyRequest() msg.context = context_id msg.author = self._author_name + self._debug_info() msg.type_filter = type_filter msg.relation_filter = rel_filter if isinstance(e, Element): msg.elements.append(utils.element2msg(e)) elif isinstance(e, str): e = Element("", "", e) msg.elements.append(utils.element2msg(e)) if recursive: msg.action = msg.REMOVE_RECURSIVE else: msg.action = msg.REMOVE res = self._call(self._modify, msg) if(res): e._id = "" return 1 return -1
def _wm_change_cb(self, author, action, element=None, relation=None): if element is not None: self._publish_change(author, action, [utils.element2msg(element)]) else: self._publish_change(author, action, relation=utils.relation2msg(relation))
def resolve_elements(self, e, context_id='scene'): msg = srvs.WmGetRequest() msg.context = context_id msg.element = utils.element2msg(e) msg.action = msg.RESOLVE res = self._call(self._get, msg) if (res): return [utils.msg2element(x) for x in res.elements]
def update_element(self, e, context_id='scene'): """ @brief Update properties and relations of an element """ msg = srvs.WmModifyRequest() msg.context = context_id msg.author = self._author_name + self._debug_info() msg.elements.append(utils.element2msg(e)) msg.action = msg.UPDATE res = self._call(self._modify, msg) if res: return e.id return -1
def update_element_properties(self, e, reasoner="", context_id='scene'): """ @brief Update the properties of an element (ignores the relations) """ msg = srvs.WmModifyRequest() msg.context = context_id msg.author = self._author_name + self._debug_info() msg.elements.append(utils.element2msg(e)) msg.action = msg.UPDATE_PROPERTIES msg.type_filter = reasoner res = self._call(self._modify, msg) if (res): return e.id return -1
def add_elements(self, es, context_id='scene'): msg = srvs.WmModifyRequest() msg.context = context_id msg.author = self._author_name + self._debug_info() for e in es: msg.elements.append(utils.element2msg(e)) msg.action = msg.ADD res = self._call(self._modify, msg) to_ret = list() if res: for old, new in zip(es, res.elements): to_ret.append(utils.msg2element(new)) old._id = new.id self._resolve_local_relations(old) return to_ret
def resolve_elements(self, e, context_id='scene'): """ @brief Find all elements matching the input *type, label and properties) @param e An element to match @param context_id (string)Ontology context identifier @return list(Element) List of matches """ msg = srvs.WmGetRequest() msg.context = context_id msg.element = utils.element2msg(e) msg.action = msg.RESOLVE res = self._call(self._get, msg) if (res): return [utils.msg2element(x) for x in res.elements]
def update_element(self, e, context_id='scene'): """ @brief Update properties and relations of an element @param e (Element) to update @param context_id (string)Ontology context identifier @return (int) id of the element, or -1 if an error occurs """ msg = srvs.WmModifyRequest() msg.context = context_id msg.author = self._author_name + self._debug_info() msg.elements.append(utils.element2msg(e)) msg.action = msg.UPDATE res = self._call(self._modify, msg) if res: return e.id return -1
def update_element_properties(self, e, reasoner="", context_id='scene'): """ @brief Update the properties of an element, ignoring the relations. More efficient than full update @param e (Element) to update @param reasoner (string) If specified, only updates properties related to the reasoner @param context_id (string)Ontology context identifier @return (int) id of the element, or -1 if an error occurs """ msg = srvs.WmModifyRequest() msg.context = context_id msg.author = self._author_name + self._debug_info() msg.elements.append(utils.element2msg(e)) msg.action = msg.UPDATE_PROPERTIES msg.type_filter = reasoner res = self._call(self._modify, msg) if (res): return e.id return -1
def add_elements(self, es, context_id='scene'): """ @brief Add elements to the scene. The id is updated with the one assigned from the world model @param es list(Elements) without id @param context_id (string)Ontology context identifier @return list(Elements) with id """ msg = srvs.WmModifyRequest() msg.context = context_id msg.author = self._author_name + self._debug_info() for e in es: msg.elements.append(utils.element2msg(e)) msg.action = msg.ADD res = self._call(self._modify, msg) to_ret = list() if res: for old, new in zip(es, res.elements): to_ret.append(utils.msg2element(new)) old._id = new.id self._resolve_local_relations(old) return to_ret