diff --git a/System/File/File.php b/System/File/File.php
deleted file mode 100644
index 47e6c60da..000000000
--- a/System/File/File.php
+++ /dev/null
@@ -1,301 +0,0 @@
-
- * @author Dennis Eichhorn
- * @copyright 2013 Dennis Eichhorn
- * @license OMS License 1.0
- * @version 1.0.0
- * @link http://orange-management.com
- */
-namespace phpOMS\System\File;
-
-/**
- * Filesystem class.
- *
- * Performing operations on the file system
- *
- * @category Framework
- * @package phpOMS\System\File
- * @author OMS Development Team
- * @author Dennis Eichhorn
- * @license OMS License 1.0
- * @link http://orange-management.com
- * @since 1.0.0
- */
-class File extends FileAbstract
-{
-
- /**
- * Constructor.
- *
- * @param string $path Path
- *
- * @since 1.0.0
- * @author Dennis Eichhorn
- */
- public function __construct(string $path)
- {
- parent::__construct($path);
- $this->count = 1;
-
- if (file_exists($this->path)) {
- $this->index();
- }
- }
-
- /**
- * Index file.
- *
- * @return void
- *
- * @since 1.0.0
- * @author Dennis Eichhorn
- */
- public function index()
- {
- parent::index();
-
- $this->size = filesize($this->path);
- }
-
- public static function put(string $path, string $content, bool $overwrite = true) : bool
- {
- if ($overwrite || !file_exists($path)) {
- if (!Directory::exists(dirname($path))) {
- Directory::create(dirname($path), '0644', true);
- }
-
- file_put_contents($path, $content);
-
- return true;
- }
-
- return false;
- }
-
- public static function get(string $path) : string
- {
- if (!file_exists($path)) {
- throw new PathException($path);
- }
-
- return file_get_contents($path);
- }
-
- public static function exists(string $path) : bool
- {
- return file_exists($path);
- }
-
- public static function parent(string $path) : string
- {
- return Directory::parent(dirname($path));
- }
-
- public static function created(string $path) : \DateTime
- {
- if (!file_exists($path)) {
- throw new PathException($path);
- }
-
- $created = new \DateTime();
- $created->setTimestamp(filemtime($path));
-
- return $created;
- }
-
- public static function changed(string $path) : \DateTime
- {
- if (!file_exists($path)) {
- throw new PathException($path);
- }
-
- $changed = new \DateTime();
- $changed->setTimestamp(filectime($path));
-
- return $changed;
- }
-
- public static function size(string $path) : int
- {
- if (!file_exists($path)) {
- throw new PathException($path);
- }
-
- return filesize($path);
- }
-
- public static function owner(string $path) : int
- {
- if (!file_exists($path)) {
- throw new PathException($path);
- }
-
- return fileowner($path);
- }
-
- public static function permission(string $path) : int
- {
- if (!file_exists($path)) {
- throw new PathException($path);
- }
-
- return fileperms($path);
- }
-
- public static function dirname(string $path) : string
- {
- return dirname($path);
- }
-
- public static function copy(string $from, string $to, bool $overwrite = false) : bool
- {
- if (!file_exists($from)) {
- throw new PathException($from);
- }
-
- if ($overwrite || !file_exists($to)) {
- if (!Directory::exists(dirname($to))) {
- Directory::create(dirname($to), '0644', true);
- }
-
- copy($from, $to);
-
- return true;
- }
-
- return false;
- }
-
- public static function move(string $from, string $to, bool $overwrite = false) : bool
- {
- if (!file_exists($from)) {
- throw new PathException($from);
- }
-
- if ($overwrite || !file_exists($to)) {
- if (!Directory::exists(dirname($to))) {
- Directory::create(dirname($to), '0644', true);
- }
-
- rename($from, $to);
-
- return true;
- }
-
- return false;
- }
-
- public static function delete(string $path) : bool
- {
- if (!file_exists($path)) {
- return false;
- }
-
- unlink($path);
-
- return true;
- }
-
- public function getDirName() : string
- {
- return basename(dirname($this->path));
- }
-
- public function getDirPath() : string
- {
- return dirname($this->path);
- }
-
- /**
- * {@inheritdoc}
- */
- public function createNode() : bool
- {
- return self::create($this->path);
- }
-
- public static function create(string $path) : bool
- {
- if (!file_exists($path)) {
- if (!Directory::exists(dirname($path))) {
- Directory::create(dirname($path), '0644', true);
- }
-
- touch($path);
-
- return true;
- }
-
- return false;
- }
-
- /**
- * Get file content.
- *
- * @return string
- *
- * @since 1.0.0
- * @author Dennis Eichhorn
- */
- public function getContent() : string
- {
- return file_get_contents($this->path);
- }
-
- /**
- * Set file content.
- *
- * @param string $content Content to set
- *
- * @since 1.0.0
- * @author Dennis Eichhorn
- */
- public function setContent(string $content)
- {
- file_put_contents($this->path, $content);
- }
-
- public function getFileName() : string
- {
- return explode('.', $this->name)[0];
- }
-
- public function getExtension() : string
- {
- $extension = explode('.', $this->name);
-
- return $extension[1] ?? '';
- }
-
- public function getParent() : FileInterface
- {
- // TODO: Implement getParent() method.
- }
-
- public function copyNode() : bool
- {
- // TODO: Implement copyNode() method.
- }
-
- public function moveNode() : bool
- {
- // TODO: Implement moveNode() method.
- }
-
- public function deleteNode() : bool
- {
- // TODO: Implement deleteNode() method.
- }
-
- public function putContent() : bool
- {
- // TODO: Implement putContent() method.
- }
-}
\ No newline at end of file
diff --git a/System/File/Local/LocalStorage.php b/System/File/Local/LocalStorage.php
index e69de29bb..cbc9a10cb 100644
--- a/System/File/Local/LocalStorage.php
+++ b/System/File/Local/LocalStorage.php
@@ -0,0 +1,305 @@
+
+ * @author Dennis Eichhorn
+ * @copyright 2013 Dennis Eichhorn
+ * @license OMS License 1.0
+ * @version 1.0.0
+ * @link http://orange-management.com
+ */
+namespace phpOMS\System\File\Local;
+use phpOMS\System\File\ContainerInterface;
+use phpOMS\System\File\FileInterface;
+use phpOMS\System\File\PathException;
+use phpOMS\System\File\StorageAbstract;
+
+/**
+ * Filesystem class.
+ *
+ * Performing operations on the file system
+ *
+ * @category Framework
+ * @package phpOMS\System\File
+ * @author OMS Development Team
+ * @author Dennis Eichhorn
+ * @license OMS License 1.0
+ * @link http://orange-management.com
+ * @since 1.0.0
+ */
+class LocalStorage extends StorageAbstract
+{
+
+ public static function created(string $path) : \DateTime
+ {
+ // TODO: Implement created() method.
+ }
+
+ public static function changed(string $path) : \DateTime
+ {
+ // TODO: Implement changed() method.
+ }
+
+ public static function owner(string $path) : int
+ {
+ // TODO: Implement owner() method.
+ }
+
+ public static function permission(string $path) : int
+ {
+ // TODO: Implement permission() method.
+ }
+
+ public static function parent(string $path) : string
+ {
+ // TODO: Implement parent() method.
+ }
+
+ public static function create(string $path) : bool
+ {
+ // TODO: Implement create() method.
+ }
+
+ public static function delete(string $path) : bool
+ {
+ // TODO: Implement delete() method.
+ }
+
+ public static function copy(string $from, string $to, bool $overwrite = false) : bool
+ {
+ // TODO: Implement copy() method.
+ }
+
+ public static function move(string $from, string $to, bool $overwrite = false) : bool
+ {
+ // TODO: Implement move() method.
+ }
+
+ public static function size(string $path) : int
+ {
+ // TODO: Implement size() method.
+ }
+
+ public static function exists(string $path) : bool
+ {
+ // TODO: Implement exists() method.
+ }
+
+ public function getCount() : int
+ {
+ // TODO: Implement getCount() method.
+ }
+
+ public function getSize() : int
+ {
+ // TODO: Implement getSize() method.
+ }
+
+ public function getName() : string
+ {
+ // TODO: Implement getName() method.
+ }
+
+ public function getPath() : string
+ {
+ // TODO: Implement getPath() method.
+ }
+
+ public function getParent() : FileInterface
+ {
+ // TODO: Implement getParent() method.
+ }
+
+ public function createNode() : bool
+ {
+ // TODO: Implement createNode() method.
+ }
+
+ public function copyNode() : bool
+ {
+ // TODO: Implement copyNode() method.
+ }
+
+ public function moveNode() : bool
+ {
+ // TODO: Implement moveNode() method.
+ }
+
+ public function deleteNode() : bool
+ {
+ // TODO: Implement deleteNode() method.
+ }
+
+ public function getCreatedAt() : \DateTime
+ {
+ // TODO: Implement getCreatedAt() method.
+ }
+
+ public function getChangedAt() : \DateTime
+ {
+ // TODO: Implement getChangedAt() method.
+ }
+
+ public function getOwner() : int
+ {
+ // TODO: Implement getOwner() method.
+ }
+
+ public function getPermission() : string
+ {
+ // TODO: Implement getPermission() method.
+ }
+
+ public function index()
+ {
+ // TODO: Implement index() method.
+ }
+
+ /**
+ * Return the current element
+ * @link http://php.net/manual/en/iterator.current.php
+ * @return mixed Can return any type.
+ * @since 5.0.0
+ */
+ public function current()
+ {
+ // TODO: Implement current() method.
+ }
+
+ /**
+ * Move forward to next element
+ * @link http://php.net/manual/en/iterator.next.php
+ * @return void Any returned value is ignored.
+ * @since 5.0.0
+ */
+ public function next()
+ {
+ // TODO: Implement next() method.
+ }
+
+ /**
+ * Return the key of the current element
+ * @link http://php.net/manual/en/iterator.key.php
+ * @return mixed scalar on success, or null on failure.
+ * @since 5.0.0
+ */
+ public function key()
+ {
+ // TODO: Implement key() method.
+ }
+
+ /**
+ * Checks if current position is valid
+ * @link http://php.net/manual/en/iterator.valid.php
+ * @return boolean The return value will be casted to boolean and then evaluated.
+ * Returns true on success or false on failure.
+ * @since 5.0.0
+ */
+ public function valid()
+ {
+ // TODO: Implement valid() method.
+ }
+
+ /**
+ * Rewind the Iterator to the first element
+ * @link http://php.net/manual/en/iterator.rewind.php
+ * @return void Any returned value is ignored.
+ * @since 5.0.0
+ */
+ public function rewind()
+ {
+ // TODO: Implement rewind() method.
+ }
+
+ /**
+ * Whether a offset exists
+ * @link http://php.net/manual/en/arrayaccess.offsetexists.php
+ * @param mixed $offset
+ * An offset to check for.
+ *
+ * @return boolean true on success or false on failure.
+ *
+ *
+ * The return value will be casted to boolean if non-boolean was returned.
+ * @since 5.0.0
+ */
+ public function offsetExists($offset)
+ {
+ // TODO: Implement offsetExists() method.
+ }
+
+ /**
+ * Offset to retrieve
+ * @link http://php.net/manual/en/arrayaccess.offsetget.php
+ * @param mixed $offset
+ * The offset to retrieve.
+ *
+ * @return mixed Can return all value types.
+ * @since 5.0.0
+ */
+ public function offsetGet($offset)
+ {
+ // TODO: Implement offsetGet() method.
+ }
+
+ /**
+ * Offset to set
+ * @link http://php.net/manual/en/arrayaccess.offsetset.php
+ * @param mixed $offset
+ * The offset to assign the value to.
+ *
+ * @param mixed $value
+ * The value to set.
+ *
+ * @return void
+ * @since 5.0.0
+ */
+ public function offsetSet($offset, $value)
+ {
+ // TODO: Implement offsetSet() method.
+ }
+
+ /**
+ * Offset to unset
+ * @link http://php.net/manual/en/arrayaccess.offsetunset.php
+ * @param mixed $offset
+ * The offset to unset.
+ *
+ * @return void
+ * @since 5.0.0
+ */
+ public function offsetUnset($offset)
+ {
+ // TODO: Implement offsetUnset() method.
+ }
+
+ public static function put(string $path, string $content, bool $overwrite = true) : bool
+ {
+ // TODO: Implement put() method.
+ }
+
+ public static function get(string $path) : string
+ {
+ // TODO: Implement get() method.
+ }
+
+ public function putContent() : bool
+ {
+ // TODO: Implement putContent() method.
+ }
+
+ public function getContent() : string
+ {
+ // TODO: Implement getContent() method.
+ }
+
+ protected function getType() : ContainerInterface
+ {
+ // TODO: Implement getType() method.
+ }
+}
\ No newline at end of file
diff --git a/System/File/Storage.php b/System/File/Storage.php
new file mode 100644
index 000000000..b8b03f026
--- /dev/null
+++ b/System/File/Storage.php
@@ -0,0 +1,40 @@
+
+ * @author Dennis Eichhorn
+ * @copyright 2013 Dennis Eichhorn
+ * @license OMS License 1.0
+ * @version 1.0.0
+ * @link http://orange-management.com
+ */
+namespace phpOMS\System\File;
+
+/**
+ * Filesystem class.
+ *
+ * Performing operations on the file system
+ *
+ * @category Framework
+ * @package phpOMS\System\File
+ * @author OMS Development Team
+ * @author Dennis Eichhorn
+ * @license OMS License 1.0
+ * @link http://orange-management.com
+ * @since 1.0.0
+ */
+final class Storage
+{
+ public static function env(string $env = 'local') : string
+ {
+ $env = ucfirst(strtolower($env));
+ $env = __NAMESPACE__ . '\\' . $env . '\\' . $env . 'Storage';
+
+ return $env::getInstance();
+ }
+}
diff --git a/System/File/StorageAbstract.php b/System/File/StorageAbstract.php
new file mode 100644
index 000000000..f3ce96770
--- /dev/null
+++ b/System/File/StorageAbstract.php
@@ -0,0 +1,49 @@
+
+ * @author Dennis Eichhorn
+ * @copyright 2013 Dennis Eichhorn
+ * @license OMS License 1.0
+ * @version 1.0.0
+ * @link http://orange-management.com
+ */
+namespace phpOMS\System\File;
+
+/**
+ * Filesystem class.
+ *
+ * Performing operations on the file system
+ *
+ * @category Framework
+ * @package phpOMS\System\File
+ * @author OMS Development Team
+ * @author Dennis Eichhorn
+ * @license OMS License 1.0
+ * @link http://orange-management.com
+ * @since 1.0.0
+ */
+abstract class StorageAbstract implements DirectoryInterface, FileInterface
+{
+ protected static $instance = null;
+
+ protected function __construct()
+ {
+ }
+
+ public static function getInstance()
+ {
+ if(!isset(static::$instance)) {
+ static::$instance = new static();
+ }
+
+ return static::$instance;
+ }
+
+ abstract protected function getType() : ContainerInterface;
+}
diff --git a/System/File/StorageInterface.php b/System/File/StorageInterface.php
deleted file mode 100644
index e69de29bb..000000000