public function validateForSubmission(EntryDistribution $entryDistribution, $action)
 {
     // get validation errors from parent class
     $validationErrors = parent::validateForSubmission($entryDistribution, $action);
     // get the entry object
     $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId());
     if (!$entry) {
         KalturaLog::err("Entry [" . $entryDistribution->getEntryId() . "] not found");
         return $validationErrors;
     }
     // validate entry name length
     if (strlen($entry->getName()) < self::ENTRY_NAME_MINIMUM_LENGTH) {
         $description = 'entry name length must be between ' . self::ENTRY_NAME_MINIMUM_LENGTH . ' and ' . self::ENTRY_NAME_MAXIMUM_LENGTH;
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, $description);
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
         $validationError->setValidationErrorParam(self::ENTRY_NAME_MINIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     if (strlen($entry->getName()) > self::ENTRY_NAME_MAXIMUM_LENGTH) {
         $description = 'entry name length must be between ' . self::ENTRY_NAME_MINIMUM_LENGTH . ' and ' . self::ENTRY_NAME_MAXIMUM_LENGTH;
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, $description);
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
         $validationError->setValidationErrorParam(self::ENTRY_NAME_MAXIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     // get all metadata objects that related to the entry
     $metadatas = MetadataPeer::retrieveAllByObject(MetadataObjectType::ENTRY, $entryDistribution->getEntryId());
     if (!count($metadatas)) {
         $description = 'field is missing because there is no metadata object defined';
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_TEST_DATA, $description);
     }
     // get all fields from all metadata profile for the testData key
     $metadataProfileFields = MetadataProfileFieldPeer::retrieveByPartnerAndKey($this->getPartnerId(), self::METADATA_FIELD_TEST_DATA);
     if (!count($metadataProfileFields)) {
         $description = 'field is not defined in any of the metadata profiles';
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_TEST_DATA, $description);
     } elseif (count($metadatas)) {
         // get the values for the testData key from all metadata objects
         $values = $this->findMetadataValue($metadatas, self::METADATA_FIELD_TEST_DATA);
         if (!count($values)) {
             $description = 'field is not defined in any of the metadata objects';
             $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_TEST_DATA, $description);
             continue;
         } else {
             foreach ($metadatas as $metadata) {
                 $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_TEST_DATA);
                 foreach ($values as $value) {
                     // validate that the field is not empty
                     if (!strlen($value)) {
                         $description = 'field is empty';
                         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TEST_DATA, $description);
                         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_EMPTY);
                         $validationError->setMetadataProfileId($metadata->getMetadataProfileId());
                         $validationErrors[] = $validationError;
                         continue;
                     }
                     // match the value to the required format
                     $matches = null;
                     $isMatched = preg_match('/' . self::METADATA_FIELD_TEST_DATA_FORMAT . '/', $value, $matches);
                     if (!$isMatched) {
                         $description = 'test data must match the required format';
                         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TEST_DATA, $description);
                         $validationError->setValidationErrorType(DistributionValidationErrorType::INVALID_FORMAT);
                         $validationError->setValidationErrorParam(self::METADATA_FIELD_TEST_DATA_FORMAT);
                         $validationError->setMetadataProfileId($metadata->getMetadataProfileId());
                         $validationErrors[] = $validationError;
                     }
                     $formatNumber = (int) $matches[1];
                     if ($formatNumber < self::METADATA_FIELD_TEST_DATA_MINIMUM_FORMAT || $formatNumber > self::METADATA_FIELD_TEST_DATA_MAXIMUM_FORMAT) {
                         $description = 'format number must be between ' . self::METADATA_FIELD_TEST_DATA_MINIMUM_FORMAT . ' and ' . self::METADATA_FIELD_TEST_DATA_MAXIMUM_FORMAT;
                         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TEST_DATA, $description);
                         $validationError->setValidationErrorType(DistributionValidationErrorType::CUSTOM_ERROR);
                         $validationError->setMetadataProfileId($metadata->getMetadataProfileId());
                         $validationErrors[] = $validationError;
                     }
                 }
             }
         }
     }
     return $validationErrors;
 }