/**
  * Magic method for get/set/add/del relations
  *
  * @param string $name
  * @param array $arg
  */
 public function __call($name, $arg)
 {
     $name = strtolower($name);
     if (!isset($arg[0])) {
         throw new CentreonClapiException(self::MISSINGPARAMETER);
     }
     $args = explode($this->delim, $arg[0]);
     $hcIds = $this->object->getIdByParameter($this->object->getUniqueLabelField(), array($args[0]));
     if (!count($hcIds)) {
         throw new CentreonClapiException(self::OBJECT_NOT_FOUND . ":" . $args[0]);
     }
     $categoryId = $hcIds[0];
     if (preg_match("/^(get|set|add|del)member\$/", $name, $matches)) {
         $relobj = new Centreon_Object_Relation_Host_Category_Host();
         $obj = new Centreon_Object_Host();
         if ($matches[1] == "get") {
             $tab = $relobj->getTargetIdFromSourceId($relobj->getSecondKey(), $relobj->getFirstKey(), $hcIds);
             echo "id" . $this->delim . "name" . "\n";
             foreach ($tab as $value) {
                 $tmp = $obj->getParameters($value, array($obj->getUniqueLabelField()));
                 echo $value . $this->delim . $tmp[$obj->getUniqueLabelField()] . "\n";
             }
         } else {
             if (!isset($args[1])) {
                 throw new CentreonClapiException(self::MISSINGPARAMETER);
             }
             $relation = $args[1];
             $relations = explode("|", $relation);
             $relationTable = array();
             foreach ($relations as $rel) {
                 $tab = $obj->getIdByParameter($obj->getUniqueLabelField(), array($rel));
                 if (!count($tab)) {
                     throw new CentreonClapiException(self::OBJECT_NOT_FOUND . ":" . $rel);
                 }
                 $relationTable[] = $tab[0];
             }
             if ($matches[1] == "set") {
                 $relobj->delete($categoryId);
             }
             $existingRelationIds = $relobj->getTargetIdFromSourceId($relobj->getSecondKey(), $relobj->getFirstKey(), array($categoryId));
             foreach ($relationTable as $relationId) {
                 if ($matches[1] == "del") {
                     $relobj->delete($categoryId, $relationId);
                 } elseif ($matches[1] == "set" || $matches[1] == "add") {
                     if (!in_array($relationId, $existingRelationIds)) {
                         $relobj->insert($categoryId, $relationId);
                     }
                 }
             }
             $acl = new CentreonACL();
             $acl->reload(true);
         }
     } else {
         throw new CentreonClapiException(self::UNKNOWN_METHOD);
     }
 }