/**
  * @param array $data
  * @param Document $document
  */
 public function __construct(array $data = [], Document $document = null)
 {
     $this->data = $data;
     if ($document !== null) {
         $this->setStructure($document->getStructure());
         $this->setDocument($document);
     }
 }
 /**
  * @param ResourceModel\Document $sourceDocument
  * @param ResourceModel\Document $destDocument
  * @return bool
  */
 protected function haveEqualStructure(ResourceModel\Document $sourceDocument, ResourceModel\Document $destDocument)
 {
     $diff = array_diff_key($sourceDocument->getStructure()->getFields(), $destDocument->getStructure()->getFields());
     return empty($diff);
 }
 /**
  * @param ResourceModel\Document $sourceDocument
  * @param ResourceModel\Document $destinationDocument
  * @param string $type
  * @return void
  */
 protected function verifyFields($sourceDocument, $destinationDocument, $type)
 {
     $sourceFields = $sourceDocument->getStructure()->getFields();
     $destFields = $destinationDocument->getStructure()->getFields();
     foreach ($sourceFields as $sourceField => $sourceFieldMetaData) {
         $mappedField = $this->map->getFieldMap($sourceDocument->getName(), $sourceField, $type);
         if ($mappedField) {
             if (!isset($destFields[$mappedField])) {
                 $this->notMappedDocumentFields[$type][$sourceDocument->getName()][] = $mappedField;
             } else {
                 if ($sourceFieldMetaData['DATA_TYPE'] != $destFields[$mappedField]['DATA_TYPE'] && !$this->map->isFieldDataTypeIgnored($sourceDocument->getName(), $sourceField, $type)) {
                     $this->mismatchDocumentFieldDataTypes[$type][$sourceDocument->getName()][] = $sourceField;
                 }
             }
         }
     }
 }
 /**
  * @param Document $document
  * @param string $type
  * @return bool
  */
 protected function hasHandlers(Document $document, $type)
 {
     $result = false;
     foreach (array_keys($document->getStructure()->getFields()) as $fieldName) {
         $handlerConfig = $this->map->getHandlerConfig($document->getName(), $fieldName, $type);
         if (!empty($handlerConfig)) {
             $result = true;
             break;
         }
     }
     return $result;
 }
 /**
  * @return void
  */
 public function testGetStructure()
 {
     $this->assertSame($this->structure, $this->document->getStructure());
 }