This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch file-confirm
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/file-confirm by this push:
     new 9dd826c77f4 CAMEL-19010: camel-file - Idempontent=true should be in 
eager mode and call confirm/remove.
9dd826c77f4 is described below

commit 9dd826c77f44aaa4ad828e28e6944fc467af1c17
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Jun 16 11:05:38 2024 +0200

    CAMEL-19010: camel-file - Idempontent=true should be in eager mode and call 
confirm/remove.
---
 .../org/apache/camel/catalog/components/file.json  | 81 +++++++++++-----------
 .../endpoint/dsl/FileEndpointBuilderFactory.java   | 37 ++++++++++
 .../apache/camel/kotlin/components/FileUriDsl.kt   | 18 +++++
 3 files changed, 96 insertions(+), 40 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/file.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/file.json
index d92732e7ffe..982c327b86c 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/file.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/file.json
@@ -105,45 +105,46 @@
     "filterDirectory": { "index": 54, "kind": "parameter", "displayName": 
"Filter Directory", "group": "filter", "label": "consumer,filter", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Filters the directory 
based on Simple language. For example to filter on current date, you can use a 
simple date pattern such as ${date:now:yyyMMdd}" },
     "filterFile": { "index": 55, "kind": "parameter", "displayName": "Filter 
File", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Filters the file based on 
Simple language. For example to filter on file size, you can use ${file:size} 
5000" },
     "idempotent": { "index": 56, "kind": "parameter", "displayName": 
"Idempotent", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "false", "description": 
"Option to use the Idempotent Consumer EIP pattern to let Camel skip already 
processed files. Will by default use a memory based LRUCache that holds 1000 
entries. If noop=true then idempotent w [...]
-    "idempotentKey": { "index": 57, "kind": "parameter", "displayName": 
"Idempotent Key", "group": "filter", "label": "consumer,filter", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "To use a custom idempotent 
key. By default the absolute path of the file is used. You can use the File 
Language, for example to use the file name and file size, you can do: 
idempotentKey=${file:name}-${file:size}" },
-    "idempotentRepository": { "index": 58, "kind": "parameter", "displayName": 
"Idempotent Repository", "group": "filter", "label": "consumer,filter", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "description": "A pluggable repository 
org.apache.camel.spi.IdempotentRepository which by default use 
MemoryIdempotentRepository if none is specified and idempotent is true." },
-    "include": { "index": 59, "kind": "parameter", "displayName": "Include", 
"group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Is used to include files, if filename 
matches the regex pattern (matching is case in-sensitive). Notice if you use 
symbols such as plus sign and others you would need to configure this using the 
RAW() syntax if configuring th [...]
-    "includeExt": { "index": 60, "kind": "parameter", "displayName": "Include 
Ext", "group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Is used to include files matching file 
extension name (case insensitive). For example to include txt files, then use 
includeExt=txt. Multiple extensions can be separated by comma, for example to 
include txt and xml fil [...]
-    "maxDepth": { "index": 61, "kind": "parameter", "displayName": "Max 
Depth", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 2147483647, "description": "The maximum depth 
to traverse when recursively processing a directory." },
-    "maxMessagesPerPoll": { "index": 62, "kind": "parameter", "displayName": 
"Max Messages Per Poll", "group": "filter", "label": "consumer,filter", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To define a maximum 
messages to gather per poll. By default no maximum is set. Can be used to set a 
limit of e.g. 1000 to avoid when starting up the server that there are 
thousands of files. Set a value of 0 or n [...]
-    "minDepth": { "index": 63, "kind": "parameter", "displayName": "Min 
Depth", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "description": "The minimum depth to start processing when 
recursively processing a directory. Using minDepth=1 means the base directory. 
Using minDepth=2 means the first sub directory." },
-    "move": { "index": 64, "kind": "parameter", "displayName": "Move", 
"group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Expression (such as Simple Language) 
used to dynamically set the filename when moving it after processing. To move 
files into a .done subdirectory just enter .done." },
-    "exclusiveReadLockStrategy": { "index": 65, "kind": "parameter", 
"displayName": "Exclusive Read Lock Strategy", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy<java.io.File>",
 "deprecated": false, "autowired": false, "secret": false, "description": 
"Pluggable read-lock as a 
org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy 
implementation." },
-    "readLock": { "index": 66, "kind": "parameter", "displayName": "Read 
Lock", "group": "lock", "label": "consumer,lock", "required": false, "type": 
"string", "javaType": "java.lang.String", "enum": [ "none", "markerFile", 
"fileLock", "rename", "changed", "idempotent", "idempotent-changed", 
"idempotent-rename" ], "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": "none", "description": "Used by consumer, to only poll 
the files if it has exclusive read-lock on the  [...]
-    "readLockCheckInterval": { "index": 67, "kind": "parameter", 
"displayName": "Read Lock Check Interval", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "integer", "javaType": "long", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, 
"description": "Interval in millis for the read-lock, if supported by the read 
lock. This interval is used for sleeping between attempts to acquire the read 
lock. For example when using the changed read  [...]
-    "readLockDeleteOrphanLockFiles": { "index": 68, "kind": "parameter", 
"displayName": "Read Lock Delete Orphan Lock Files", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether or not read lock with marker files should upon startup 
delete any orphan read lock files, which may have been left on the file system, 
if Camel was not proper [...]
-    "readLockIdempotentReleaseAsync": { "index": 69, "kind": "parameter", 
"displayName": "Read Lock Idempotent Release Async", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether the delayed release task should be synchronous 
or asynchronous. See more details at the readLockIdempotentReleaseDelay 
option." },
-    "readLockIdempotentReleaseAsyncPoolSize": { "index": 70, "kind": 
"parameter", "displayName": "Read Lock Idempotent Release Async Pool Size", 
"group": "lock", "label": "consumer,lock", "required": false, "type": 
"integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "description": "The number of threads in the scheduled thread 
pool when using asynchronous release tasks. Using a default of 1 core threads 
should be sufficient in almost all use-cases, onl [...]
-    "readLockIdempotentReleaseDelay": { "index": 71, "kind": "parameter", 
"displayName": "Read Lock Idempotent Release Delay", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Whether to delay the release task for a period of millis. This can be used to 
delay the release tasks to expand the window when a file is regarded as 
read-locked, in an active\/active cluster [...]
-    "readLockIdempotentReleaseExecutorService": { "index": 72, "kind": 
"parameter", "displayName": "Read Lock Idempotent Release Executor Service", 
"group": "lock", "label": "consumer,lock", "required": false, "type": "object", 
"javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom and 
shared thread pool for asynchronous release tasks. See more details at the 
readLockIdempotentReleaseDelay opt [...]
-    "readLockLoggingLevel": { "index": 73, "kind": "parameter", "displayName": 
"Read Lock Logging Level", "group": "lock", "label": "consumer,lock", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", 
"ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "DEBUG", "description": "Logging level used when a read lock 
could not be acquired. By default a DEBUG is logged. You can cha [...]
-    "readLockMarkerFile": { "index": 74, "kind": "parameter", "displayName": 
"Read Lock Marker File", "group": "lock", "label": "consumer,lock", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether to use marker file with the changed, rename, or exclusive read lock 
types. By default a marker file is used as well to guard against other 
processes picking up the same files. This b [...]
-    "readLockMinAge": { "index": 75, "kind": "parameter", "displayName": "Read 
Lock Min Age", "group": "lock", "label": "consumer,lock", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "This option is applied only 
for readLock=changed. It allows to specify a minimum age the file must be 
before attempting to acquire the read lock. For example use readLockMinAge=300s 
to require the file is [...]
-    "readLockMinLength": { "index": 76, "kind": "parameter", "displayName": 
"Read Lock Min Length", "group": "lock", "label": "consumer,lock", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 1, "description": "This option is 
applied only for readLock=changed. It allows you to configure a minimum file 
length. By default Camel expects the file to contain data, and thus the default 
value is 1. You can set th [...]
-    "readLockRemoveOnCommit": { "index": 77, "kind": "parameter", 
"displayName": "Read Lock Remove On Commit", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "This option is applied only for readLock=idempotent. It 
allows to specify whether to remove the file name entry from the idempotent 
repository when processing the file is succeeded [...]
-    "readLockRemoveOnRollback": { "index": 78, "kind": "parameter", 
"displayName": "Read Lock Remove On Rollback", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "This option is applied only for readLock=idempotent. It allows 
to specify whether to remove the file name entry from the idempotent repository 
when processing the file failed an [...]
-    "readLockTimeout": { "index": 79, "kind": "parameter", "displayName": 
"Read Lock Timeout", "group": "lock", "label": "consumer,lock", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 10000, "description": "Optional timeout 
in millis for the read-lock, if supported by the read-lock. If the read-lock 
could not be granted and the timeout triggered, then Camel will skip the file. 
At next poll Camel, will t [...]
-    "backoffErrorThreshold": { "index": 80, "kind": "parameter", 
"displayName": "Backoff Error Threshold", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
number of subsequent error polls (failed due some error) that should happen 
before the backoffMultipler should kick-in." },
-    "backoffIdleThreshold": { "index": 81, "kind": "parameter", "displayName": 
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
-    "backoffMultiplier": { "index": 82, "kind": "parameter", "displayName": 
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To let the scheduled 
polling consumer backoff if there has been a number of subsequent idles\/errors 
in a row. The multiplier is then the number of polls that will be skipped 
before the next actual attempt is h [...]
-    "delay": { "index": 83, "kind": "parameter", "displayName": "Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
-    "greedy": { "index": 84, "kind": "parameter", "displayName": "Greedy", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
-    "initialDelay": { "index": 85, "kind": "parameter", "displayName": 
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "long", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1000, "description": 
"Milliseconds before the first poll starts." },
-    "repeatCount": { "index": 86, "kind": "parameter", "displayName": "Repeat 
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit 
of number of fires. So if you set it to 1, the scheduler will only fire once. 
If you set it to 5, it will only fire five times. A value of zero or negative 
means fire forever." },
-    "runLoggingLevel": { "index": 87, "kind": "parameter", "displayName": "Run 
Logging Level", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", 
"ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "TRACE", "description": "The consumer logs a start\/complete 
log line when it polls. This option allows you to configure the l [...]
-    "scheduledExecutorService": { "index": 88, "kind": "parameter", 
"displayName": "Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
-    "scheduler": { "index": 89, "kind": "parameter", "displayName": 
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "none", "description": "To 
use a cron scheduler from either camel-spring or camel-quartz component. Use 
value spring or quartz for built in scheduler" },
-    "schedulerProperties": { "index": 90, "kind": "parameter", "displayName": 
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure additional properties when using a custom 
scheduler or any of the Quartz, Spring based scheduler." },
-    "startScheduler": { "index": 91, "kind": "parameter", "displayName": 
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether the scheduler should be auto started." },
-    "timeUnit": { "index": 92, "kind": "parameter", "displayName": "Time 
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ 
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", 
"DAYS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and 
delay options." },
-    "useFixedDelay": { "index": 93, "kind": "parameter", "displayName": "Use 
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in 
JDK for details." },
-    "shuffle": { "index": 94, "kind": "parameter", "displayName": "Shuffle", 
"group": "sort", "label": "consumer,sort", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "To shuffle the list of 
files (sort in random order)" },
-    "sortBy": { "index": 95, "kind": "parameter", "displayName": "Sort By", 
"group": "sort", "label": "consumer,sort", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Built-in sort by using the File Language. 
Supports nested sorts, so you can have a sort by file name and as a 2nd group 
sort by modified date." },
-    "sorter": { "index": 96, "kind": "parameter", "displayName": "Sorter", 
"group": "sort", "label": "consumer,sort", "required": false, "type": "object", 
"javaType": 
"java.util.Comparator<org.apache.camel.component.file.GenericFile<java.io.File>>",
 "deprecated": false, "autowired": false, "secret": false, "description": 
"Pluggable sorter as a java.util.Comparator class." }
+    "idempotentEager": { "index": 57, "kind": "parameter", "displayName": 
"Idempotent Eager", "group": "filter", "label": "consumer,filter", "required": 
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 
"false", "description": "Option to use the Idempotent Consumer EIP pattern to 
let Camel skip already processed files. Will by default use a memory based 
LRUCache that holds 1000 entri [...]
+    "idempotentKey": { "index": 58, "kind": "parameter", "displayName": 
"Idempotent Key", "group": "filter", "label": "consumer,filter", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "To use a custom idempotent 
key. By default the absolute path of the file is used. You can use the File 
Language, for example to use the file name and file size, you can do: 
idempotentKey=${file:name}-${file:size}" },
+    "idempotentRepository": { "index": 59, "kind": "parameter", "displayName": 
"Idempotent Repository", "group": "filter", "label": "consumer,filter", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "description": "A pluggable repository 
org.apache.camel.spi.IdempotentRepository which by default use 
MemoryIdempotentRepository if none is specified and idempotent is true." },
+    "include": { "index": 60, "kind": "parameter", "displayName": "Include", 
"group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Is used to include files, if filename 
matches the regex pattern (matching is case in-sensitive). Notice if you use 
symbols such as plus sign and others you would need to configure this using the 
RAW() syntax if configuring th [...]
+    "includeExt": { "index": 61, "kind": "parameter", "displayName": "Include 
Ext", "group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Is used to include files matching file 
extension name (case insensitive). For example to include txt files, then use 
includeExt=txt. Multiple extensions can be separated by comma, for example to 
include txt and xml fil [...]
+    "maxDepth": { "index": 62, "kind": "parameter", "displayName": "Max 
Depth", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 2147483647, "description": "The maximum depth 
to traverse when recursively processing a directory." },
+    "maxMessagesPerPoll": { "index": 63, "kind": "parameter", "displayName": 
"Max Messages Per Poll", "group": "filter", "label": "consumer,filter", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To define a maximum 
messages to gather per poll. By default no maximum is set. Can be used to set a 
limit of e.g. 1000 to avoid when starting up the server that there are 
thousands of files. Set a value of 0 or n [...]
+    "minDepth": { "index": 64, "kind": "parameter", "displayName": "Min 
Depth", "group": "filter", "label": "consumer,filter", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "description": "The minimum depth to start processing when 
recursively processing a directory. Using minDepth=1 means the base directory. 
Using minDepth=2 means the first sub directory." },
+    "move": { "index": 65, "kind": "parameter", "displayName": "Move", 
"group": "filter", "label": "consumer,filter", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "Expression (such as Simple Language) 
used to dynamically set the filename when moving it after processing. To move 
files into a .done subdirectory just enter .done." },
+    "exclusiveReadLockStrategy": { "index": 66, "kind": "parameter", 
"displayName": "Exclusive Read Lock Strategy", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy<java.io.File>",
 "deprecated": false, "autowired": false, "secret": false, "description": 
"Pluggable read-lock as a 
org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy 
implementation." },
+    "readLock": { "index": 67, "kind": "parameter", "displayName": "Read 
Lock", "group": "lock", "label": "consumer,lock", "required": false, "type": 
"string", "javaType": "java.lang.String", "enum": [ "none", "markerFile", 
"fileLock", "rename", "changed", "idempotent", "idempotent-changed", 
"idempotent-rename" ], "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": "none", "description": "Used by consumer, to only poll 
the files if it has exclusive read-lock on the  [...]
+    "readLockCheckInterval": { "index": 68, "kind": "parameter", 
"displayName": "Read Lock Check Interval", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "integer", "javaType": "long", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, 
"description": "Interval in millis for the read-lock, if supported by the read 
lock. This interval is used for sleeping between attempts to acquire the read 
lock. For example when using the changed read  [...]
+    "readLockDeleteOrphanLockFiles": { "index": 69, "kind": "parameter", 
"displayName": "Read Lock Delete Orphan Lock Files", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether or not read lock with marker files should upon startup 
delete any orphan read lock files, which may have been left on the file system, 
if Camel was not proper [...]
+    "readLockIdempotentReleaseAsync": { "index": 70, "kind": "parameter", 
"displayName": "Read Lock Idempotent Release Async", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether the delayed release task should be synchronous 
or asynchronous. See more details at the readLockIdempotentReleaseDelay 
option." },
+    "readLockIdempotentReleaseAsyncPoolSize": { "index": 71, "kind": 
"parameter", "displayName": "Read Lock Idempotent Release Async Pool Size", 
"group": "lock", "label": "consumer,lock", "required": false, "type": 
"integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "description": "The number of threads in the scheduled thread 
pool when using asynchronous release tasks. Using a default of 1 core threads 
should be sufficient in almost all use-cases, onl [...]
+    "readLockIdempotentReleaseDelay": { "index": 72, "kind": "parameter", 
"displayName": "Read Lock Idempotent Release Delay", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": 
"Whether to delay the release task for a period of millis. This can be used to 
delay the release tasks to expand the window when a file is regarded as 
read-locked, in an active\/active cluster [...]
+    "readLockIdempotentReleaseExecutorService": { "index": 73, "kind": 
"parameter", "displayName": "Read Lock Idempotent Release Executor Service", 
"group": "lock", "label": "consumer,lock", "required": false, "type": "object", 
"javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom and 
shared thread pool for asynchronous release tasks. See more details at the 
readLockIdempotentReleaseDelay opt [...]
+    "readLockLoggingLevel": { "index": 74, "kind": "parameter", "displayName": 
"Read Lock Logging Level", "group": "lock", "label": "consumer,lock", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", 
"ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "DEBUG", "description": "Logging level used when a read lock 
could not be acquired. By default a DEBUG is logged. You can cha [...]
+    "readLockMarkerFile": { "index": 75, "kind": "parameter", "displayName": 
"Read Lock Marker File", "group": "lock", "label": "consumer,lock", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether to use marker file with the changed, rename, or exclusive read lock 
types. By default a marker file is used as well to guard against other 
processes picking up the same files. This b [...]
+    "readLockMinAge": { "index": 76, "kind": "parameter", "displayName": "Read 
Lock Min Age", "group": "lock", "label": "consumer,lock", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "This option is applied only 
for readLock=changed. It allows to specify a minimum age the file must be 
before attempting to acquire the read lock. For example use readLockMinAge=300s 
to require the file is [...]
+    "readLockMinLength": { "index": 77, "kind": "parameter", "displayName": 
"Read Lock Min Length", "group": "lock", "label": "consumer,lock", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 1, "description": "This option is 
applied only for readLock=changed. It allows you to configure a minimum file 
length. By default Camel expects the file to contain data, and thus the default 
value is 1. You can set th [...]
+    "readLockRemoveOnCommit": { "index": 78, "kind": "parameter", 
"displayName": "Read Lock Remove On Commit", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "This option is applied only for readLock=idempotent. It 
allows to specify whether to remove the file name entry from the idempotent 
repository when processing the file is succeeded [...]
+    "readLockRemoveOnRollback": { "index": 79, "kind": "parameter", 
"displayName": "Read Lock Remove On Rollback", "group": "lock", "label": 
"consumer,lock", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "This option is applied only for readLock=idempotent. It allows 
to specify whether to remove the file name entry from the idempotent repository 
when processing the file failed an [...]
+    "readLockTimeout": { "index": 80, "kind": "parameter", "displayName": 
"Read Lock Timeout", "group": "lock", "label": "consumer,lock", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 10000, "description": "Optional timeout 
in millis for the read-lock, if supported by the read-lock. If the read-lock 
could not be granted and the timeout triggered, then Camel will skip the file. 
At next poll Camel, will t [...]
+    "backoffErrorThreshold": { "index": 81, "kind": "parameter", 
"displayName": "Backoff Error Threshold", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
number of subsequent error polls (failed due some error) that should happen 
before the backoffMultipler should kick-in." },
+    "backoffIdleThreshold": { "index": 82, "kind": "parameter", "displayName": 
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
+    "backoffMultiplier": { "index": 83, "kind": "parameter", "displayName": 
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To let the scheduled 
polling consumer backoff if there has been a number of subsequent idles\/errors 
in a row. The multiplier is then the number of polls that will be skipped 
before the next actual attempt is h [...]
+    "delay": { "index": 84, "kind": "parameter", "displayName": "Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
+    "greedy": { "index": 85, "kind": "parameter", "displayName": "Greedy", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
+    "initialDelay": { "index": 86, "kind": "parameter", "displayName": 
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "long", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1000, "description": 
"Milliseconds before the first poll starts." },
+    "repeatCount": { "index": 87, "kind": "parameter", "displayName": "Repeat 
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit 
of number of fires. So if you set it to 1, the scheduler will only fire once. 
If you set it to 5, it will only fire five times. A value of zero or negative 
means fire forever." },
+    "runLoggingLevel": { "index": 88, "kind": "parameter", "displayName": "Run 
Logging Level", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", 
"ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "TRACE", "description": "The consumer logs a start\/complete 
log line when it polls. This option allows you to configure the l [...]
+    "scheduledExecutorService": { "index": 89, "kind": "parameter", 
"displayName": "Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
+    "scheduler": { "index": 90, "kind": "parameter", "displayName": 
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "none", "description": "To 
use a cron scheduler from either camel-spring or camel-quartz component. Use 
value spring or quartz for built in scheduler" },
+    "schedulerProperties": { "index": 91, "kind": "parameter", "displayName": 
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure additional properties when using a custom 
scheduler or any of the Quartz, Spring based scheduler." },
+    "startScheduler": { "index": 92, "kind": "parameter", "displayName": 
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether the scheduler should be auto started." },
+    "timeUnit": { "index": 93, "kind": "parameter", "displayName": "Time 
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ 
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", 
"DAYS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and 
delay options." },
+    "useFixedDelay": { "index": 94, "kind": "parameter", "displayName": "Use 
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in 
JDK for details." },
+    "shuffle": { "index": 95, "kind": "parameter", "displayName": "Shuffle", 
"group": "sort", "label": "consumer,sort", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "To shuffle the list of 
files (sort in random order)" },
+    "sortBy": { "index": 96, "kind": "parameter", "displayName": "Sort By", 
"group": "sort", "label": "consumer,sort", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Built-in sort by using the File Language. 
Supports nested sorts, so you can have a sort by file name and as a 2nd group 
sort by modified date." },
+    "sorter": { "index": 97, "kind": "parameter", "displayName": "Sorter", 
"group": "sort", "label": "consumer,sort", "required": false, "type": "object", 
"javaType": 
"java.util.Comparator<org.apache.camel.component.file.GenericFile<java.io.File>>",
 "deprecated": false, "autowired": false, "secret": false, "description": 
"Pluggable sorter as a java.util.Comparator class." }
   }
 }
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/FileEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/FileEndpointBuilderFactory.java
index 51858e263e1..0111b1d872e 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/FileEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/FileEndpointBuilderFactory.java
@@ -562,6 +562,43 @@ public interface FileEndpointBuilderFactory {
             doSetProperty("idempotent", idempotent);
             return this;
         }
+        /**
+         * Option to use the Idempotent Consumer EIP pattern to let Camel skip
+         * already processed files. Will by default use a memory based LRUCache
+         * that holds 1000 entries. If noop=true then idempotent will be 
enabled
+         * as well to avoid consuming the same files over and over again.
+         * 
+         * The option is a: <code>java.lang.Boolean</code> type.
+         * 
+         * Default: false
+         * Group: filter
+         * 
+         * @param idempotentEager the value to set
+         * @return the dsl builder
+         */
+        default FileEndpointConsumerBuilder idempotentEager(Boolean 
idempotentEager) {
+            doSetProperty("idempotentEager", idempotentEager);
+            return this;
+        }
+        /**
+         * Option to use the Idempotent Consumer EIP pattern to let Camel skip
+         * already processed files. Will by default use a memory based LRUCache
+         * that holds 1000 entries. If noop=true then idempotent will be 
enabled
+         * as well to avoid consuming the same files over and over again.
+         * 
+         * The option will be converted to a <code>java.lang.Boolean</code>
+         * type.
+         * 
+         * Default: false
+         * Group: filter
+         * 
+         * @param idempotentEager the value to set
+         * @return the dsl builder
+         */
+        default FileEndpointConsumerBuilder idempotentEager(String 
idempotentEager) {
+            doSetProperty("idempotentEager", idempotentEager);
+            return this;
+        }
         /**
          * To use a custom idempotent key. By default the absolute path of the
          * file is used. You can use the File Language, for example to use the
diff --git 
a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/FileUriDsl.kt
 
b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/FileUriDsl.kt
index 138fce23c00..a218b5118c3 100644
--- 
a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/FileUriDsl.kt
+++ 
b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/FileUriDsl.kt
@@ -850,6 +850,24 @@ public class FileUriDsl(
     it.property("idempotent", idempotent.toString())
   }
 
+  /**
+   * Option to use the Idempotent Consumer EIP pattern to let Camel skip 
already processed files.
+   * Will by default use a memory based LRUCache that holds 1000 entries. If 
noop=true then idempotent
+   * will be enabled as well to avoid consuming the same files over and over 
again.
+   */
+  public fun idempotentEager(idempotentEager: String) {
+    it.property("idempotentEager", idempotentEager)
+  }
+
+  /**
+   * Option to use the Idempotent Consumer EIP pattern to let Camel skip 
already processed files.
+   * Will by default use a memory based LRUCache that holds 1000 entries. If 
noop=true then idempotent
+   * will be enabled as well to avoid consuming the same files over and over 
again.
+   */
+  public fun idempotentEager(idempotentEager: Boolean) {
+    it.property("idempotentEager", idempotentEager.toString())
+  }
+
   /**
    * To use a custom idempotent key. By default the absolute path of the file 
is used. You can use
    * the File Language, for example to use the file name and file size, you 
can do:


Reply via email to