コード例 #1
0
ファイル: MessagePopulator.php プロジェクト: progrupa/edifact
 /**
  * @param array $data
  * @return Message[]
  * @throws \EDI\Exception\MandatorySegmentPieceMissing
  */
 public function populate(&$data)
 {
     $messages = [];
     $remainingData = null;
     $segment = $this->getNextSegment($data);
     while ($segment && $segment->getCode() == 'UNH') {
         $message = new Message();
         $this->fillProperties($message, $segment);
         $identifier = $message->getIdentifier();
         $mapping = $this->mappingLoader->loadMessage($identifier['version'], $identifier['release'], $identifier['type']);
         $this->segmentPopulator->setSegmentConfig($this->mappingLoader->loadSegments($identifier['version'], $identifier['release']));
         $expectedSegments = $mapping->getSegments();
         $segment = $this->getNextSegment($data);
         $this->nextExpectedSegment($expectedSegments);
         //  Ignore the header, already processed when creating Message
         $expected = $this->nextExpectedSegment($expectedSegments);
         while ('UNT' != $segment->getCode()) {
             /** @var MessageSegmentMapping $expected */
             if (!$expected) {
                 break;
             }
             if ($expected->acceptSegment($segment)) {
                 $segment = $this->getNextSegment($data);
             } else {
                 $message->addSegments($expected->getSegments());
                 $expected = $this->nextExpectedSegment($expectedSegments);
             }
         }
         if ($expected && $expected->hasSegments()) {
             $message->addSegments($expected->getSegments());
         }
         $trailer = new MessageTrailer();
         $this->fillProperties($trailer, $segment);
         $message->setTrailer($trailer);
         $messages[] = $message;
         $remainingData = reset($data);
         $segment = $this->getNextSegment($data);
     }
     if ($remainingData) {
         array_unshift($data, $remainingData);
     }
     return $messages;
 }
コード例 #2
0
 /** @test */
 public function should_ignore_missing_nonrequired_fields()
 {
     $segmentMapping = new SegmentMapping('XXX');
     $segmentMapping->addDataElement(1, new DataElementMapping(7583, true, DataElementType::ID, 'ajdi', '', 3));
     $segmentMapping->addDataElement(2, new DataElementMapping(3415, false, DataElementType::A, 'field', '', 35));
     $populator = new SegmentPopulator();
     $populator->setSegmentConfig(['XXX' => $segmentMapping]);
     $data = [['XXX', '345']];
     $segment = $populator->populate($data);
     $this->assertEquals(345, $segment->ajdi);
     $this->assertNull($segment->field);
 }