11<?php
22namespace ScriptFUSION \Porter ;
33
4- use ScriptFUSION \Mapper \CollectionMapper ;
5- use ScriptFUSION \Mapper \Mapping ;
64use ScriptFUSION \Porter \Cache \CacheAdvice ;
75use ScriptFUSION \Porter \Cache \CacheToggle ;
86use ScriptFUSION \Porter \Cache \CacheUnavailableException ;
9- use ScriptFUSION \Porter \Collection \CountableMappedRecords ;
107use ScriptFUSION \Porter \Collection \CountablePorterRecords ;
118use ScriptFUSION \Porter \Collection \CountableProviderRecords ;
12- use ScriptFUSION \Porter \Collection \FilteredRecords ;
13- use ScriptFUSION \Porter \Collection \MappedRecords ;
149use ScriptFUSION \Porter \Collection \PorterRecords ;
1510use ScriptFUSION \Porter \Collection \ProviderRecords ;
1611use ScriptFUSION \Porter \Collection \RecordCollection ;
1712use ScriptFUSION \Porter \Connector \RecoverableConnectorException ;
18- use ScriptFUSION \Porter \Mapper \PorterMapper ;
1913use ScriptFUSION \Porter \Provider \ObjectNotCreatedException ;
2014use ScriptFUSION \Porter \Provider \Provider ;
2115use ScriptFUSION \Porter \Provider \ProviderFactory ;
@@ -40,11 +34,6 @@ class Porter
4034 */
4135 private $ providerFactory ;
4236
43- /**
44- * @var CollectionMapper
45- */
46- private $ mapper ;
47-
4837 /**
4938 * @var CacheAdvice
5039 */
@@ -63,7 +52,6 @@ class Porter
6352 public function __construct ()
6453 {
6554 $ this ->defaultCacheAdvice = CacheAdvice::SHOULD_NOT_CACHE ();
66- $ this ->fetchExceptionHandler = new ExponentialBackoffExceptionHandler ;
6755 }
6856
6957 /**
@@ -84,12 +72,12 @@ public function import(ImportSpecification $specification)
8472 $ records = $ this ->createProviderRecords ($ records , $ specification ->getResource ());
8573 }
8674
87- if ($ specification ->getFilter ()) {
88- $ records = $ this ->filter ($ records , $ specification ->getFilter (), $ specification ->getContext ());
89- }
75+ foreach ($ specification ->getTransformers () as $ transformer ) {
76+ if ($ transformer instanceof PorterAware) {
77+ $ transformer ->setPorter ($ this );
78+ }
9079
91- if ($ specification ->getMapping ()) {
92- $ records = $ this ->map ($ records , $ specification ->getMapping (), $ specification ->getContext ());
80+ $ records = $ transformer ->transform ($ records , $ specification ->getContext ());
9381 }
9482
9583 return $ this ->createPorterRecords ($ records , $ specification );
@@ -164,37 +152,6 @@ function (\Exception $exception) {
164152 throw new ImportException (get_class ($ provider ) . '::fetch() did not return an Iterator. ' );
165153 }
166154
167- private function filter (ProviderRecords $ records , callable $ predicate , $ context )
168- {
169- $ filter = function () use ($ records , $ predicate , $ context ) {
170- foreach ($ records as $ record ) {
171- if ($ predicate ($ record , $ context )) {
172- yield $ record ;
173- }
174- }
175- };
176-
177- return new FilteredRecords ($ filter (), $ records , $ filter );
178- }
179-
180- private function map (RecordCollection $ records , Mapping $ mapping , $ context )
181- {
182- return $ this ->createMappedRecords (
183- $ this ->getOrCreateMapper ()->mapCollection ($ records , $ mapping , $ context ),
184- $ records ,
185- $ mapping
186- );
187- }
188-
189- private function createMappedRecords (\Iterator $ records , RecordCollection $ previous , Mapping $ mapping )
190- {
191- if ($ previous instanceof \Countable) {
192- return new CountableMappedRecords ($ records , count ($ previous ), $ previous , $ mapping );
193- }
194-
195- return new MappedRecords ($ records , $ previous , $ mapping );
196- }
197-
198155 private function applyCacheAdvice (Provider $ provider , CacheAdvice $ cacheAdvice )
199156 {
200157 try {
@@ -304,26 +261,6 @@ private function getOrCreateProviderFactory()
304261 return $ this ->providerFactory ?: $ this ->providerFactory = new ProviderFactory ;
305262 }
306263
307- /**
308- * @return CollectionMapper
309- */
310- private function getOrCreateMapper ()
311- {
312- return $ this ->mapper ?: $ this ->mapper = new PorterMapper ($ this );
313- }
314-
315- /**
316- * @param CollectionMapper $mapper
317- *
318- * @return $this
319- */
320- public function setMapper (CollectionMapper $ mapper )
321- {
322- $ this ->mapper = $ mapper ;
323-
324- return $ this ;
325- }
326-
327264 /**
328265 * Gets the maximum number of fetch attempts per import.
329266 *
@@ -353,7 +290,7 @@ public function setMaxFetchAttempts($attempts)
353290 */
354291 private function getFetchExceptionHandler ()
355292 {
356- return $ this ->fetchExceptionHandler ;
293+ return $ this ->fetchExceptionHandler ?: $ this -> fetchExceptionHandler = new ExponentialBackoffExceptionHandler ;
357294 }
358295
359296 /**
0 commit comments