I need a way to show the content of a (remote) directory and, since the main application makes an intensive use of Apache Camel, I would like to rely on Apache Camel once more to accomplish this task.
So, the goal is to have a file explorer view which lists the base directory content (directories and files) and, by clicking on a given directory, the view should be refreshed by showing its content, and so on... a sort of FTP client (e.g. WinSCP, FileZilla, etc.) to let the user navigate a directory, which could be remote or local, depending on the context.
If I had to do it with Apache Camel
, I would use:
- the
file component
to gather local directories content - the
sftp component
to gather remote directories content
Then, starting from the given base directory, I would use recursive=true
to retrieve its full content (so, all files contained by the base directory and all sub-directories). That way, by mapping the result in a tree and keeping it in memory, I would be able to identify the directories structure and show to the user only a specific sub-set of information, depending on its navigation.
However, this approach has at least three side-effects:
- since the full structure is immediately retrieved at once, it wouldn't be possible to lazy load the given node, accordingly to the user navigation
- at the same way, it would be necessary to keep the full structure in memory, even if the user is viewing a leaf containing, for instance, a single file
- it wouldn't be possible to show empty directories... as far as I know, in fact, Camel reads files only so, in case a directory /D contains the file
F.txt
and the empty directory/E
, the Camel component would return/D/F.txt
but not/D/E
, which is a directory
Points 1 and 2 could probably be fixed by specifying a maxDepth=2
, in order to identify all files and all directories of the current level... but, again, considering the following structure:
root
|_ file1.txt
|_ sub-dir-1
|_ sub-dir-1-A
|_ nested-file.txt
|_ sub-dir-2
|_ file2.txt
The file component
, starting from root
and having recursive=true
and maxDepth=2
, would only return
- /root/file1.txt
- /root/sub-dir-2/file2.txt
(no sub-dir-1
, which doesn't directly contains files).
So, my questions are:
- Is Apache Camel the right choice?
- Is there a better way, in Apache Camel, to navigate a given directory?
- Is it possible, in Apache Camel, to retrieve information about empty directories too?
Ad 1) Probably not - its an integration library, not a directory listening tool
Ad 2) No its not a directory listening tool
Ad 3) No its for files only.