Skip to content

Commit

Permalink
CAMEL-17641: Generate json metadata for pojo beans in camel-core that…
Browse files Browse the repository at this point in the history
… end users can use such as AggregationStrategy implementations. And have that information in camel-catalog for tooling assistance.
  • Loading branch information
davsclaus committed Mar 14, 2024
1 parent 1ee83e5 commit 79d5117
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ MemoryIdempotentRepository
StringAggregationStrategy
UseLatestAggregationStrategy
UseOriginalAggregationStrategy
ZipAggregationStrategy
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"bean": {
"kind": "bean",
"name": "ZipAggregationStrategy",
"javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy",
"interfaceType": "org.apache.camel.AggregationStrategy",
"title": "Zip Aggregation Strategy",
"description": "AggregationStrategy to zip together incoming messages into a zip file. Please note that this aggregation strategy requires eager completion check to work properly.",
"deprecated": false,
"groupId": "org.apache.camel",
"artifactId": "camel-zipfile",
"version": "4.5.0-SNAPSHOT",
"properties": { "filePrefix": { "index": 0, "kind": "property", "displayName": "File Prefix", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the prefix that will be used when creating the ZIP filename." }, "fileSuffix": { "index": 1, "kind": "property", "displayName": "File Suffix", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "zip", "description": "Sets the suffix that will be used when creating the ZIP filename." }, "parentDir": { "index": 2, "kind": "property", "displayName": "Parent Dir", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the parent directory to use for writing temporary files" }, "preserveFolderStructure": { "index": 3, "kind": "property", "displayName": "Preserve Folder Structure", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "If the incoming message is from a file, then the folder structure of said file can be preserved" }, "useFilenameHeader": { "index": 4, "kind": "property", "displayName": "Use Filename Header", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Whether to use CamelFileName header for the filename instead of using unique message id" }, "useTempFile": { "index": 5, "kind": "property", "displayName": "Use Temp File", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Whether to use temporary files for zip manipulations instead of memory." } }
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Generated by camel build tools - do NOT edit this file!
bean=ZipAggregationStrategy
groupId=org.apache.camel
artifactId=camel-zipfile
version=4.5.0-SNAPSHOT
projectName=Camel :: Zip File
projectDescription=Camel Zip file support
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"bean": {
"kind": "bean",
"name": "ZipAggregationStrategy",
"javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy",
"interfaceType": "org.apache.camel.AggregationStrategy",
"title": "Zip Aggregation Strategy",
"description": "AggregationStrategy to zip together incoming messages into a zip file. Please note that this aggregation strategy requires eager completion check to work properly.",
"deprecated": false,
"groupId": "org.apache.camel",
"artifactId": "camel-zipfile",
"version": "4.5.0-SNAPSHOT",
"properties": { "filePrefix": { "index": 0, "kind": "property", "displayName": "File Prefix", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the prefix that will be used when creating the ZIP filename." }, "fileSuffix": { "index": 1, "kind": "property", "displayName": "File Suffix", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "zip", "description": "Sets the suffix that will be used when creating the ZIP filename." }, "parentDir": { "index": 2, "kind": "property", "displayName": "Parent Dir", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the parent directory to use for writing temporary files" }, "preserveFolderStructure": { "index": 3, "kind": "property", "displayName": "Preserve Folder Structure", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "If the incoming message is from a file, then the folder structure of said file can be preserved" }, "useFilenameHeader": { "index": 4, "kind": "property", "displayName": "Use Filename Header", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Whether to use CamelFileName header for the filename instead of using unique message id" }, "useTempFile": { "index": 5, "kind": "property", "displayName": "Use Temp File", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.aggregate.zipfile.ZipAggregationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "Whether to use temporary files for zip manipulations instead of memory." } }
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import org.apache.camel.component.file.GenericFile;
import org.apache.camel.component.file.GenericFileMessage;
import org.apache.camel.component.file.GenericFileOperationFailedException;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.Synchronization;
import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.util.FileUtil;
Expand All @@ -51,13 +52,24 @@
* <b>Note:</b> Please note that this aggregation strategy requires eager completion check to work properly.
* </p>
*/
@Metadata(label = "bean",
description = "AggregationStrategy to zip together incoming messages into a zip file."
+ " Please note that this aggregation strategy requires eager completion check to work properly.")
public class ZipAggregationStrategy implements AggregationStrategy {

@Metadata(description = "Sets the prefix that will be used when creating the ZIP filename.")
private String filePrefix;
@Metadata(description = "Sets the suffix that will be used when creating the ZIP filename.", defaultValue = "zip")
private String fileSuffix = ".zip";
@Metadata(label = "advanced",
description = "If the incoming message is from a file, then the folder structure of said file can be preserved")
private boolean preserveFolderStructure;
@Metadata(label = "advanced",
description = "Whether to use CamelFileName header for the filename instead of using unique message id")
private boolean useFilenameHeader;
@Metadata(label = "advanced", description = "Whether to use temporary files for zip manipulations instead of memory.")
private boolean useTempFile;
@Metadata(label = "advanced", description = "Sets the parent directory to use for writing temporary files")
private File parentDir = new File(System.getProperty("java.io.tmpdir"));

public ZipAggregationStrategy() {
Expand Down Expand Up @@ -150,6 +162,22 @@ public void setParentDir(String parentDir) {
this.parentDir = new File(parentDir);
}

public boolean isPreserveFolderStructure() {
return preserveFolderStructure;
}

public void setPreserveFolderStructure(boolean preserveFolderStructure) {
this.preserveFolderStructure = preserveFolderStructure;
}

public boolean isUseTempFile() {
return useTempFile;
}

public void setUseTempFile(boolean useTempFile) {
this.useTempFile = useTempFile;
}

@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
File zipFile;
Expand Down

0 comments on commit 79d5117

Please sign in to comment.