Version 1
[yaffs-website] / vendor / alchemy / zippy / src / Resource / Teleporter / GenericTeleporter.php
diff --git a/vendor/alchemy/zippy/src/Resource/Teleporter/GenericTeleporter.php b/vendor/alchemy/zippy/src/Resource/Teleporter/GenericTeleporter.php
new file mode 100644 (file)
index 0000000..ed7b51b
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+
+namespace Alchemy\Zippy\Resource\Teleporter;
+
+use Alchemy\Zippy\Exception\InvalidArgumentException;
+use Alchemy\Zippy\Exception\IOException;
+use Alchemy\Zippy\Resource\Resource as ZippyResource;
+use Alchemy\Zippy\Resource\ResourceLocator;
+use Alchemy\Zippy\Resource\ResourceReaderFactory;
+use Alchemy\Zippy\Resource\ResourceWriter;
+
+class GenericTeleporter implements TeleporterInterface
+{
+    /**
+     * @var ResourceReaderFactory
+     */
+    private $readerFactory;
+
+    /**
+     * @var ResourceWriter
+     */
+    private $resourceWriter;
+
+    /**
+     * @var ResourceLocator
+     */
+    private $resourceLocator;
+
+    /**
+     * @param ResourceReaderFactory $readerFactory
+     * @param ResourceWriter        $resourceWriter
+     * @param ResourceLocator       $resourceLocator
+     */
+    public function __construct(
+        ResourceReaderFactory $readerFactory,
+        ResourceWriter $resourceWriter,
+        ResourceLocator $resourceLocator = null
+    ) {
+        $this->readerFactory = $readerFactory;
+        $this->resourceWriter = $resourceWriter;
+        $this->resourceLocator = $resourceLocator ?: new ResourceLocator();
+    }
+
+    /**
+     * Teleports a file from a destination to an other
+     *
+     * @param ZippyResource $resource A Resource
+     * @param string        $context  The current context
+     *
+     * @throws IOException when file could not be written on local
+     * @throws InvalidArgumentException when path to file is not valid
+     */
+    public function teleport(ZippyResource $resource, $context)
+    {
+        $reader = $this->readerFactory->getReader($resource, $context);
+        $target = $this->resourceLocator->mapResourcePath($resource, $context);
+
+        $this->resourceWriter->writeFromReader($reader, $target);
+    }
+}