Multiple Files Extension in Camel - apache-camel

I have a question regarding multiple File extensions. There are two files which I need to check whether it exists or not
File Names
Data.success
Data.failure
It works fine when I load one file b
success.file=Data.success
However, when I try to load multiple file extensions it doesn't file
success.file=Data.success|Data.failure
Code
{{FilePath}}?fileName={{success.file}}&&consumer.bridgeErrorHandler=true

Use the include option instead which is a regular expression, there you can set a pattern to match your files
And then do not use the fileName option.
See more in the Camel documentation: http://camel.apache.org/file2 about these options and how they work.

Related

Apache Camel doneFileName with changing name

I'm currently creating some route and for one of them I have a problem.
Usually I have a data file and then a done file which have the same name prefixed by "ACK" and this works perfectly with camel and the doneFileName option.
But for one of my route I have to work with a different situation, I still receive two files but they have the same typology, it's like: MyFILE-{{timestamp}}. The data file contains the data, and the done file contains just "done".
So I need something to check the content of the file, and if it's juste "done" then process the other file.
Is there a way to handle this with camel?
The most pragmatic solution I see is to write an "adapter script" (bash or whatever you have at your disposal) that peeks into every file with a timestamp in its name.
If the file content is "done":
Lookup the other "MyFILE-{{timestamp}}" (the data file) and rename it to "MyFILE"
Rename the done file to "MyFILE.done"
Camel can then import the data file using the standard done-file-option. Because both files are renamed to something without a timestamp, the peek-script ignores them after renaming.

How to rename a file while using "move" in URL in apache camel

I have an URL like
url = "file:D:/inputFolder?move=D:/outputFolder". we are making this url dynamically.
I want to rename the file while moving, So I made it something like this
url = "file:D:/inputFolder?move=D:/outputFolder&fileName=abc.txt". But I think move and fileName do not work together, it is not renaming.
Is there any alternative to do it? Please remember I want with "move" only.
I cannot use .setHeader(..) also.
Thanks,
Hy,
as far as I understand you, your trying to move the file in one single uri.
That is not really how camel works.
The idea of camel is to have a "consumer" and a "producer", where the consumer loads data (e.g. your file) and the producer puts the data somewhere (e.g. save the file into a folder)
That being said, here is what worked for me with a java route:
from("file:/home/chris/temp/camel/in")
.to("file:/home/chris/temp/camel/out/?fileName=test.txt");
The from part configures the folder where camel looks for new files. A few notes on that:
The file component checks the folder each 0.5 sec for new files. This can be changed with the delay parameter
The option noop configures, if the file is being moved or copied. By default it is set to false, which means it is moved
In the to part you configure, where the file is supposed to be moved. Here you can use the fileName parameter to rename the file.
Be careful with this though, because setting an option in the uri directly does make it "static".
What I mean by that is, that the only way of changing the parameter is by completely reconfiguring the route or by restarting it, where neither is something you would want to do normally.
Note 1:
Moving all files that are put into one folder into the same file always overrides the previous file by default.
You could, for example, use the fileExists parameter to always just append the content of the file: fileExists=Append (See camel file docu for details)
Note 2:
There is an option in the file component to not "move" the file, but copy, rename and delete it, which sometimes is necessary, when you want to move it onto a different drive and a simple copy does not work.
Also see the docu for the camel file component for details on that.
Note 3:
You can have multiple to() statements in the same route to have the file moved to multiple locations. For example:
from("file:/home/chris/temp/camel/in")
.to("file:/home/chris/temp/camel/out/?fileName=test.txt")
.to("smtp:....");
Hope I could help you and answer you question.
Greets
Chris
Two possible ways to achieve your goal.
Use both "consumer" and "producer"
Using this way, you are free to control where and how your destination can be set and has great freedom to control filename with the use of a processor/bean.
from("file:D:/inputFolder")
.to("file:D:/outputFolder?fileName=abc.txt")
Use "consumer" only
Using this way, you are treating your work as source data control. This can be use when your file is going to move within same drive. The drawback is the filename rename pattern is limited (refer to camel file language)
from("file:D:/inputFolder?move=${file:parent}/../outputFolder/abc.txt")

What is file name extension .done?

What is the file name extension ".done"?
How to handle the files with this extension? For example filename.log.gz.done is file name, can we just remove the done extension and use it?
What is the use of this file extension?
".done" is just a marker that signifies that the file is ready for consumption.
So yes, get rid of the done extension and use it.
More details can be found here: http://www.davsclaus.com/2010/12/camel-26-using-done-files-with-fileftp.html
The ".done" file extension may be appended onto any type of file, such as a .TXT or .LOG file, and may be found on an FTP server where multiple have access to the file. The DONE file helps prevents a user from accessing a file that is not meant to be accessed. The ".done" extension should be removed in order to open the actual file.
This takes you to the source from which I'm quoting my answer from. You will see a clear explanation of .done file extension and it's also a great reference for any other file extensions that you might need information about

Remove link to source code in doxygen?

I want my doxygen output to show only documentation, without showing any raw source code. I know that it is possible to hide the file browsing tab so that the user can only browse by namespace/class, and that this effectively hides source.
However, I have lots of functions in a top level namespace that are organized by file only, so I do want to maintain the capability to browse by filename. I just want to remove the link inside a file doc that says "Go to the source code of this file." Is there any way to remove this link?
Of course, I could write a script that analyzed all output HTML files and deletes any file ending in _source.html and also removes lines of this sort from remaining HTML:
<p>Go to the source code of this file.</p>
However I was hoping there would be a cleaner way to do this.
In your configuration file, set the following options:
SOURCE_BROWSER = NO
VERBATIM_HEADERS = NO
This still lists the namespaces in each file, but does not include the source code.

Perforce : passing file extensions in a "diff" command

I'm trying to execute a "diff" command in P4's command line tool on a subset of files.
I would like to diff files in a certain directory that correspond to a certain extension.
Is there any way to specify an extension with the "diff" command ?
From what I gather from the documentation, such a thing is not possible.
How would you do "diff" only for files with a certain extension ?
Thanks !
Not sure if diff in particular allows for multiple files, but in general, P4 allows for wildcards via ..., so for all txt files in a certain subdirectory, you could say
//depot/stuff/whatever/....txt
That will filter out all .txt files in this particular path.

Resources