protected function processSource($source)
 {
     $ds = (string) $source['datasource'];
     if (is_numeric($ds)) {
         $datasources = $this->datasources->xpath("/DataSources/DataSource[@id='" . $ds . "']");
     } else {
         $datasources = $this->datasources->xpath("/DataSources/DataSource[@name='" . $ds . "']");
     }
     switch ((string) $datasources[0]['type']) {
         case 'uri':
             $uri = (string) $datasources[0]['uri'];
             $client = Client::createClient();
             $data = array();
             // TODO : add parameters elements in DataSources.xsd
             if ((string) $datasources[0]['method'] == "" || (string) $datasources[0]['method'] == "GET") {
                 $result = $client->get($uri);
             } else {
                 $result = $client->post($uri, $data);
             }
             break;
         case 'database':
         case 'internal':
             $databases = $this->datasources->xpath("/DataSources/Databases/Database[@id='" . (string) $datasources[0]['database'] . "']");
             $database = new Database(null, (int) $databases[0]['id'], (string) $databases[0]['type'], (string) $databases[0]['name']);
             if ((string) $databases[0]['host'] != "") {
                 $database->setHost((string) $databases[0]['host']);
             }
             if ((string) $databases[0]['port'] != "") {
                 $database->setPort((int) $databases[0]['port']);
             }
             if ((string) $databases[0]['user'] != "") {
                 $database->setUser((string) $databases[0]['user']);
             }
             if ((string) $databases[0]['password'] != "") {
                 $database->setPassword((string) $databases[0]['password']);
             } elseif ((string) $databases[0]['user'] != "") {
                 try {
                     $host = $this->get('kernel')->getContainer()->getParameter('database_host');
                     $port = $this->get('kernel')->getContainer()->getParameter('database_port');
                     $user = $this->get('kernel')->getContainer()->getParameter('database_user');
                     if ((string) $databases[0]['host'] == $host && (string) $databases[0]['port'] == $port && (string) $databases[0]['user'] == $user) {
                         $database->setPassword($this->get('kernel')->getContainer()->getParameter('database_password'));
                     }
                 } catch (\Exception $e) {
                 }
             }
             $query = (string) $source['request'];
             $database->connect();
             $result = $database->query($query);
             break;
     }
     switch ((string) $source['returnType']) {
         case 'json':
             $json = json_decode($result, true);
             return ResultFilter::filter("json", $json, (string) $source['returnPath']);
         case 'assocArray':
             return $this->filterResultByLines($result, (string) $source['returnPath']);
         case 'xml':
             return ResultFilter::filter("xml", $result, (string) $source['returnPath']);
         case 'csv':
             $result = ResultFilter::filter("csv", $result, "", null, (string) $source['separator'], (string) $source['delimiter']);
             return $this->filterResultByLines($result, (string) $source['returnPath']);
     }
     return null;
 }