/**
  * Recursively add all subselect properties to their parent. Even when they are member of a subselect themselves.
  *
  * @param Legend $legend            The legend to add the properties to.
  *
  * @param array  $subSelectPalettes All subselect palettes.
  *
  * @param string $propertyName      The name of the property for which all dependant properties shall get added.
  *
  * @param string $legendName        The name of the legend for which properties shall get retrieved.
  */
 protected function addSubSelectProperties(Legend $legend, $subSelectPalettes, $propertyName, $legendName = '', $insert = 'before', $reference = null)
 {
     if (!isset($subSelectPalettes[$propertyName][$legendName])) {
         return;
     }
     $position = null;
     if ($insert && $reference) {
         $properties = $legend->getProperties();
         if (!empty($properties)) {
             $property = current($properties);
             do {
                 if ($property->getName() == $reference) {
                     if ($insert == 'before') {
                         $position = $property;
                     } elseif ($insert == 'after') {
                         $position = next($properties);
                     }
                     break;
                 }
             } while ($property = next($properties));
         }
     }
     if ($position === false) {
         $position = null;
     }
     $legend->addProperties($subSelectPalettes[$propertyName][$legendName], $position);
     foreach ((array) $subSelectPalettes[$propertyName][$legendName] as $property) {
         /** @var Property $property */
         // Add anonymous legends for this property.
         if (isset($subSelectPalettes[$property->getName()][''])) {
             $legend->addProperties($subSelectPalettes[$property->getName()]['']);
         }
         if (isset($subSelectPalettes[$property->getName()][$legendName])) {
             $this->addSubSelectProperties($legend, $subSelectPalettes, $property->getName(), $legendName, $insert, $reference);
         }
     }
 }