public BackupStrategy getBackupStrategy()

in entity-store/src/main/java/jetbrains/exodus/entitystore/FileSystemBlobVaultOld.java [354:424]


    public BackupStrategy getBackupStrategy() {
        return new BackupStrategy() {

            @Override
            public Iterable<VirtualFileDescriptor> getContents() {
                return () -> {
                    final Deque<FileDescriptor> queue = new LinkedList<>();
                    queue.add(new FileDescriptor(location.toFile(), blobsDirectory + File.separator));
                    return new Iterator<VirtualFileDescriptor>() {
                        int i = 0;
                        int n = 0;
                        File[] files;
                        FileDescriptor next;
                        String currentPrefix;

                        @Override
                        public boolean hasNext() {
                            if (next != null) {
                                return true;
                            }
                            while (i < n) {
                                final File file = files[i++];
                                final String name = file.getName();
                                if (file.isDirectory()) {
                                    queue.push(new FileDescriptor(file, currentPrefix + file.getName() + File.separator));
                                } else if (file.isFile()) {
                                    final long fileSize = file.length();
                                    if (fileSize == 0) continue;
                                    if (name.endsWith(blobExtension)) {
                                        next = new FileDescriptor(file, currentPrefix, fileSize);
                                        return true;
                                    } else if (name.equalsIgnoreCase(VERSION_FILE)) {
                                        next = new FileDescriptor(file, currentPrefix, fileSize, false);
                                        return true;
                                    }
                                } else if (file.exists()) {
                                    // something strange with filesystem
                                    throw new EntityStoreException("File or directory expected: " + file);
                                }
                            }
                            if (queue.isEmpty()) {
                                return false;
                            }
                            final FileDescriptor fd = queue.pop();
                            files = IOUtil.listFiles(fd.getFile());
                            currentPrefix = fd.getPath();
                            i = 0;
                            n = files.length;
                            next = fd;
                            return true;
                        }

                        @Override
                        public FileDescriptor next() {
                            if (!hasNext()) {
                                throw new NoSuchElementException();
                            }
                            final FileDescriptor result = next;
                            next = null;
                            return result;
                        }

                        @Override
                        public void remove() {
                            throw new UnsupportedOperationException();
                        }
                    };
                };
            }
        };
    }