@Override
    public void onUpdate(CtxChangeEvent event) {

      LOG.info(event.getId() + ": *** UPDATED event ***");
      try {
        if (!event.getId().equals(fooAttrId) && !event.getId().equals(fooAttrId2)) return;
        final CtxAttribute fooAttr = (CtxAttribute) internalCtxBroker.retrieve(event.getId()).get();
        this.receivedId = fooAttr.getId();
        LOG.info("*** attribute id received:" + this.receivedId);
        this.receivedValue = fooAttr.getStringValue();
        LOG.info("*** attribute value received:" + this.receivedValue);

      } catch (Exception e) {

        fail("onUpdate threw exception: " + e.getLocalizedMessage());
      }
    }
    /*
     * @see org.societies.api.context.event.CtxChangeEventListener#onRemoval(org.societies.api.context.event.CtxChangeEvent)
     */
    @Override
    public void onRemoval(CtxChangeEvent event) {

      LOG.info("*** " + this.name + ": Context REMOVED event: " + event.getId());
    }
    /*
     * @see org.societies.api.context.event.CtxChangeEventListener#onUpdate(org.societies.api.context.event.CtxChangeEvent)
     */
    @Override
    public void onUpdate(CtxChangeEvent event) {

      LOG.info("*** " + this.name + ": Context UPDATED event: " + event.getId());
    }
    /*
     * @see org.societies.api.context.event.CtxChangeEventListener#onModification(org.societies.api.context.event.CtxChangeEvent)
     */
    @Override
    public void onModification(CtxChangeEvent event) {

      LOG.info("*** " + this.name + ": Context MODIFIED event: " + event.getId());
    }
    /*
     * @see org.societies.api.context.event.CtxChangeEventListener#onCreation(org.societies.api.context.event.CtxChangeEvent)
     */
    @Override
    public void onCreation(CtxChangeEvent event) {

      LOG.info("*** " + this.name + ": Context CREATED event: " + event.getId());
    }