/**
  * Extract Track informations from object
  * @access public
  * @static
  * @param  \stdClass $track Object represent Track
  * @return Track
  */
 public static function extractInfos($track)
 {
     // create Track instance
     $trackItem = new self();
     // update informations
     $trackItem->setUri((string) $track->href);
     $trackItem->setName((string) $track->name);
     // is popularity available ?
     if (isset($track->popularity)) {
         // update popularity
         $trackItem->setPopularity((double) $track->popularity);
     }
     // is disc number available ?
     if (isset($track->{'disc-number'})) {
         // update disc number
         $trackItem->setDiscNumber($track->{'disc-number'});
     }
     // is track number available ?
     if (isset($track->{'track-number'})) {
         // update track number
         $trackItem->setTrackNumber($track->{'track-number'});
     }
     // is track length available ?
     if (isset($track->length)) {
         // update track length
         $trackItem->setLength($track->length);
     }
     // is track albul available ?
     if (isset($track->album)) {
         // update track album
         $trackItem->setAlbum(Album::extractInfos($track->album));
     }
     // is artists available ?
     if (isset($track->artists) && is_array($track->artists)) {
         // setup artists container
         $artists = array();
         // iterate artists
         foreach ($track->artists as $artist) {
             // create Artist and store on container
             $artists[] = Artist::extractInfos($artist);
         }
         // set artists of track
         $trackItem->setArtists($artists);
     }
     // is external ids available ?
     if (isset($track->{'external-ids'}) && is_array($track->{'external-ids'})) {
         // setup external ids container
         $externalIds = array();
         // iterate external ids
         foreach ($track->{'external-ids'} as $externalId) {
             // create ExternalId and store on container
             $externalIds[] = ExternalId::extractInfos($externalId);
         }
         // set external ids of track
         $trackItem->setExternalIds($externalIds);
     }
     // is teritories availabality available ?
     if (isset($track->availability) && isset($track->availability->territories)) {
         // update territories availability
         $trackItem->setTerritories(explode(' ', $track->availability->territories));
     }
     // on retourne l'instance de la piste
     return $trackItem;
 }