Example #1
0
 /**
  * @param string $documentName
  * @param string $idKey
  * @return void
  */
 protected function processChangedRecords($documentName, $idKey)
 {
     $items = $this->source->getChangedRecords($documentName, $idKey);
     if (empty($items)) {
         return;
     }
     if (!$this->eolOnce) {
         $this->eolOnce = true;
         echo PHP_EOL;
     }
     $destinationName = $this->mapReader->getDocumentMap($documentName, MapInterface::TYPE_SOURCE);
     $sourceDocument = $this->source->getDocument($documentName);
     $destDocument = $this->destination->getDocument($destinationName);
     $recordTransformer = $this->getRecordTransformer($sourceDocument, $destDocument);
     do {
         $destinationRecords = $destDocument->getRecords();
         $ids = [];
         foreach ($items as $data) {
             echo '.';
             $ids[] = $data[$idKey];
             $this->transformData($data, $sourceDocument, $destDocument, $recordTransformer, $destinationRecords);
         }
         $this->destination->updateChangedRecords($destinationName, $destinationRecords);
         $documentNameDelta = $this->source->getDeltaLogName($documentName);
         $documentNameDelta = $this->source->addDocumentPrefix($documentNameDelta);
         $this->markRecordsProcessed($documentNameDelta, $idKey, $ids);
     } while (!empty($items = $this->source->getChangedRecords($documentName, $idKey)));
 }
 /**
  * @param Record $from
  * @param Record $to
  * @return void
  */
 protected function copy(Record $from, Record $to)
 {
     foreach ($from->getFields() as $field) {
         if (!$this->mapReader->isFieldIgnored($this->sourceDocument->getName(), $field, MapInterface::TYPE_SOURCE)) {
             $fieldMap = $this->mapReader->getFieldMap($this->sourceDocument->getName(), $field, MapInterface::TYPE_SOURCE);
             $to->setValue($fieldMap, $from->getValue($field));
         }
     }
 }
 public function testTransform()
 {
     $srcHandler = $this->initHandler($this->sourceDocument, 0);
     $destHandler = $this->initHandler($this->destDocument, 1);
     $this->recordTransformer->init();
     $this->sourceDocument->expects($this->any())->method('getName')->willReturn('source_document_name');
     $recordFrom = $this->getMock('Migration\\Resource\\Record', [], [], '', false);
     $recordFrom->expects($this->any())->method('getFields')->will($this->returnValue(['field1', 'field2']));
     $recordFrom->expects($this->any())->method('getData')->will($this->returnValue(['field1' => 1, 'field2' => 2]));
     $recordTo = $this->getMock('Migration\\Resource\\Record', [], [], '', false);
     $recordTo->expects($this->any())->method('getFields')->will($this->returnValue(['field2']));
     $recordTo->expects($this->once())->method('setData')->with(['field2' => 2]);
     $field2Handler = $this->getMock('Migration\\Handler\\SetValue', ['handle'], [], '', false);
     $field2Handler->expects($this->once())->method('handle');
     $srcHandler->expects($this->any())->method('getHandlers')->willReturn(['field2' => $field2Handler]);
     $destHandler->expects($this->any())->method('getHandlers')->willReturn([]);
     $this->mapReader->expects($this->any())->method('getFieldMap')->with('source_document_name', 'field1')->willReturnArgument(1);
     $this->recordTransformer->transform($recordFrom, $recordTo);
 }
 /**
  * @param Resource\Document $sourceDocument
  * @param Resource\Document $destinationDocument
  * @param string $type
  * @return void
  */
 protected function verifyFields($sourceDocument, $destinationDocument, $type)
 {
     $sourceFields = array_keys($sourceDocument->getStructure()->getFields());
     $destFields = $destinationDocument->getStructure()->getFields();
     foreach ($sourceFields as $field) {
         $mappedField = $this->map->getFieldMap($sourceDocument->getName(), $field, $type);
         if ($mappedField && !isset($destFields[$mappedField])) {
             $this->missingDocumentFields[$type][$sourceDocument->getName()][] = $mappedField;
         }
     }
 }
Example #5
0
 /**
  * @param Record $from
  * @param Record $to
  * @return void
  */
 protected function copy(Record $from, Record $to)
 {
     $sourceDocumentName = $this->sourceDocument->getName();
     $data = $from->getData();
     $sourceFields = $from->getFields();
     $destinationFields = $to->getFields();
     $diff = array_diff($sourceFields, $destinationFields);
     foreach ($diff as $field) {
         if (!$this->mapReader->isFieldIgnored($sourceDocumentName, $field, MapInterface::TYPE_SOURCE)) {
             $fieldMap = $this->mapReader->getFieldMap($sourceDocumentName, $field, MapInterface::TYPE_SOURCE);
             $data[$fieldMap] = $from->getValue($field);
         }
         unset($data[$field]);
     }
     $to->setData($data);
 }
Example #6
0
 /**
  * @param Resource\Document $sourceDocument
  * @param Resource\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->missingDocumentFields[$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;
                 }
             }
         }
     }
 }