/**
 * This function performs the validation work for complex object models.
 *
 * In addition to checking the current object, all related objects will
 * also be validated.  If all pass then <code>true</code> is returned; otherwise
 * an aggreagated array of ValidationFailed objects will be returned.
 *
 * @param      array $columns Array of column names to validate.
 * @return     mixed <code>true</code> if all validations pass; 
               array of <code>ValidationFailed</code> objects otherwise.
 */
 protected function doValidate($columns = null)
 {
     if (!$this->alreadyInValidation) {
         $this->alreadyInValidation = true;
         $retval = null;
         $failureMap = array();
         if (($retval = ConfigurationPeer::doValidate($this, $columns)) !== true) {
             $failureMap = array_merge($failureMap, $retval);
         }
         $this->alreadyInValidation = false;
     }
     return !empty($failureMap) ? $failureMap : true;
 }