Пример #1
0
 public function encode(Interchange $interchange)
 {
     $out = $this->annotationPrinter->prepareString($interchange);
     foreach ($interchange->getMessages() as $message) {
         $out .= $this->annotationPrinter->prepareString($message);
         $identifier = $message->getIdentifier();
         $this->segmentPrinter->setSegmentMappings($this->mappingLoader->loadSegments($identifier['version'], $identifier['release']));
         foreach ($message->getSegments() as $segment) {
             $out .= $this->segmentPrinter->prepareString($segment);
         }
         $out .= $this->annotationPrinter->prepareString($message->createTrailer());
     }
     $out .= $this->annotationPrinter->prepareString($interchange->createTrailer());
     return $out;
 }
Пример #2
0
 /** @test */
 public function should_load_segment_mapping_from_file()
 {
     $loader = new MappingLoader(__DIR__ . '/../fixtures');
     $result = $loader->loadSegments('D', '96A');
     $this->assertGreaterThanOrEqual(1, count($result));
     /** @var SegmentMapping $segment */
     $segment = $result['ADR'];
     $this->assertEquals('ADR', $segment->getId());
     $this->assertEquals('address', $segment->getName());
     $this->assertEquals('To specify an address.', $segment->getDesc());
     //  Check data elements
     $dataElements = $segment->getDataElements();
     $this->assertEquals(2, count($dataElements));
     $this->assertEquals('3164', $dataElements[1]->getId());
     $this->assertEquals('cityName', $dataElements[1]->getName());
     $this->assertEquals('35', $dataElements[1]->getMaxLength());
     $this->assertEquals('an', $dataElements[1]->getType());
     $this->assertEquals('C517', $dataElements[2]->getId());
     $this->assertEquals('locationIdentification', $dataElements[2]->getName());
     //  Check composite data elements
     $this->assertInstanceOf(CompositeDataElementMapping::class, $dataElements[2]);
     $compositeElements = $dataElements[2]->getDataElements();
     $this->assertEquals('3225', $compositeElements[0]->getId());
     $this->assertEquals('1131', $compositeElements[1]->getId());
 }
Пример #3
0
 /**
  * @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;
 }
Пример #4
0
 /**
  * @param $version
  * @return Populator
  * @throws MappingNotFoundException
  */
 protected function updatePopulatorConfiguration($version)
 {
     $dir = realpath($this->mappingDirectory . "/{$version}");
     if (!file_exists($dir)) {
         throw new MappingNotFoundException(sprintf("Mapping directory '%s' not found", $this->mappingDirectory));
     }
     $segmentsFile = $dir . '/segments.xml';
     if (!file_exists($segmentsFile) || !is_readable($segmentsFile)) {
         throw new MappingNotFoundException(sprintf("segments.xml mapping file not found in directory '%s'", $this->mappingDirectory));
     }
     $this->populator->setSegments($this->mappingLoader->loadSegments($segmentsFile));
     $codesFile = $dir . '/codes.xml';
     if (!file_exists($codesFile) || !is_readable($codesFile)) {
         throw new MappingNotFoundException(sprintf("codes.xml mapping file not found in directory '%s'", $this->mappingDirectory));
     }
     $this->populator->setCodes($this->mappingLoader->loadCodes($codesFile));
 }