public function findNext()
    {
        if (!isset($this->cache['wdb_next'])) {
            $this->cache['wdb_next'] = null;

            $filepath       = $this->getPathname();
            if ($this->isLink() || $this->isRootLink()) {
                $filepath = FilesystemHelper::slashDirname($this->getWebPath()).$this->getFilename();
//                $filepath = FilesystemHelper::slashDirname($this->getWebPath()).$this->getPathname();
            }
            $dir_realpath   = dirname(realpath($filepath));
            $dir_targetpath = dirname($filepath);
            if (empty($dir_realpath)) {
                $dir_realpath = $dir_targetpath;
            }
            $dir            = new FilesystemIterator($dir_realpath, FilesystemIterator::CURRENT_AS_PATHNAME);
            $dir_table      = iterator_to_array($dir, false);
            $i              = array_search($this->getRealPath(), $dir_table);
            if (false!==$i) {
                $j = $i+1;
                while ($j<=count($dir_table) && array_key_exists($j, $dir_table) && (
                    (is_dir($dir_table[$j]) && !Helper::isDirValid($dir_table[$j])) ||
                    !Helper::isFileValid($dir_table[$j]) ||
                    FilesystemHelper::isDotPath($dir_table[$j]) || Helper::isTranslationFile($dir_table[$j])
                )) {
                    $j = $j+1;
                }
                if ($j<=count($dir_table) && array_key_exists($j, $dir_table) && (
                        (is_dir($dir_table[$j]) && Helper::isDirValid($dir_table[$j])) ||
                        (!is_dir($dir_table[$j]) && Helper::isFileValid($dir_table[$j]) && !Helper::isTranslationFile($dir_table[$j]))
                    ) && !FilesystemHelper::isDotPath($dir_table[$j])
                ) {
                    $next = new File($dir_table[$j]);
                    $this->cache['wdb_next'] = $next->getWDBStack();
                }
            }
        }
        return $this->cache['wdb_next'];
    }