protected void handleMessage(CMessage msg) throws Exception {

    if (msg != null) {
      if (msg.getBody() != null) {
        if (msg.getBody().toString().equalsIgnoreCase("getPropertyValue")) {
          Object uuid = msg.getHeader("uuid");
          Object name = msg.getHeader("name");

          String p = null;
          if (uuid != null && name != null) {
            p = getPropertyValue(uuid.toString(), name.toString());
          }
          CMessage resmsg = new CMessage();
          resmsg.setTo(msg.getFrom());
          resmsg.setCorrelation(msg.getCorrelation());
          resmsg.setObject(msg.getObject());
          resmsg.setBody(p);
          try {
            getCubeAgent().getCommunicator().sendMessage(resmsg);
          } catch (CommunicationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        } else if (msg.getBody().toString().equalsIgnoreCase("addProperty")) {
          Object uuid = msg.getHeader("uuid");
          Object name = msg.getHeader("name");
          Object value = msg.getHeader("value");

          boolean p = false;
          if (uuid != null && name != null && value != null) {
            p = addProperty(uuid.toString(), name.toString(), value.toString());
          }
          CMessage resmsg = new CMessage();
          resmsg.setTo(msg.getFrom());
          resmsg.setCorrelation(msg.getCorrelation());
          resmsg.setObject(msg.getObject());
          if (p == true) resmsg.setBody("true");
          else resmsg.setBody("false");
          try {
            getCubeAgent().getCommunicator().sendMessage(resmsg);
          } catch (CommunicationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        } else if (msg.getBody().toString().equalsIgnoreCase("getReferencedElements")) {
          Object uuid = msg.getHeader("uuid");
          Object name = msg.getHeader("name");

          String resultat = "";
          if (uuid != null && name != null) {
            List<String> res = getReferencedElements(uuid.toString(), name.toString());
            for (String r : res) {
              resultat +=
                  this.agent.getRuntimeModelController().getAgentOfElement(r) + "###" + r + ",";
            }
          }
          CMessage resmsg = new CMessage();
          resmsg.setTo(msg.getFrom());
          resmsg.setCorrelation(msg.getCorrelation());
          resmsg.setObject(msg.getObject());
          resmsg.setBody(resultat);

          try {
            getCubeAgent().getCommunicator().sendMessage(resmsg);
          } catch (CommunicationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        } else if (msg.getBody().toString().equalsIgnoreCase("addReferencedElement")) {
          Object uuid = msg.getHeader("uuid");
          Object name = msg.getHeader("name");
          Object onlyone = msg.getHeader("onlyone");
          Object refuuid = msg.getHeader("refuuid");

          boolean p = false;
          if (uuid != null && name != null && refuuid != null) {
            this.agent.addExternalElement(refuuid.toString(), msg.getFrom().toString());
            p =
                addReferencedElement(
                    uuid.toString(),
                    name.toString(),
                    onlyone.toString().equalsIgnoreCase("true") ? true : false,
                    refuuid.toString());
          }
          CMessage resmsg = new CMessage();
          resmsg.setTo(msg.getFrom());
          resmsg.setCorrelation(msg.getCorrelation());
          resmsg.setObject(msg.getObject());
          if (p == true) resmsg.setBody("true");
          else resmsg.setBody("false");
          try {
            getCubeAgent().getCommunicator().sendMessage(resmsg);
          } catch (CommunicationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        } else if (msg.getBody().toString().equalsIgnoreCase("removeReferencedElement")) {
          Object uuid = msg.getHeader("uuid");
          Object name = msg.getHeader("name");
          Object refuuid = msg.getHeader("refuuid");

          boolean p = false;
          if (uuid != null && name != null && refuuid != null) {
            p = removeReferencedElement(uuid.toString(), name.toString(), refuuid.toString());
          }
          CMessage resmsg = new CMessage();
          resmsg.setTo(msg.getFrom());
          resmsg.setCorrelation(msg.getCorrelation());
          resmsg.setObject(msg.getObject());
          if (p == true) resmsg.setBody("true");
          else resmsg.setBody("false");
          try {
            getCubeAgent().getCommunicator().sendMessage(resmsg);
          } catch (CommunicationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        } else if (msg.getBody().toString().equalsIgnoreCase("hasReferencedElement")) {
          Object uuid = msg.getHeader("uuid");
          Object name = msg.getHeader("name");
          Object refuuid = msg.getHeader("refuuid");

          boolean p = false;
          if (uuid != null && name != null && refuuid != null) {
            p = hasReferencedElement(uuid.toString(), name.toString(), refuuid.toString());
          }
          CMessage resmsg = new CMessage();
          resmsg.setTo(msg.getFrom());
          resmsg.setCorrelation(msg.getCorrelation());
          resmsg.setObject(msg.getObject());
          if (p == true) resmsg.setBody("true");
          else resmsg.setBody("false");
          try {
            getCubeAgent().getCommunicator().sendMessage(resmsg);
          } catch (CommunicationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        } else if (msg.getBody().toString().equalsIgnoreCase("getRemoteElement")) {
          Object uuid = msg.getHeader("uuid");
          ManagedElement me = null;
          if (uuid != null) {
            me = getLocalElement(uuid.toString());
          }
          CMessage resmsg = new CMessage();
          resmsg.setTo(msg.getFrom());
          resmsg.setCorrelation(msg.getCorrelation());
          resmsg.setAttachement(me);
          resmsg.setObject(msg.getObject());
          try {
            getCubeAgent().getCommunicator().sendMessage(resmsg);
          } catch (CommunicationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        }
      }
    }
  }