This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch dp2 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 5e3a6ea65a696cf32e786605d77fda714f619d62 Author: Claus Ibsen <[email protected]> AuthorDate: Wed Jun 19 19:14:01 2024 +0200 CAMEL-20890: camel-core-model: Copy definitions to make deep copy for route templates to avoid side-effects when the template are reused to create multiple routes. --- .../org/apache/camel/model/ChoiceDefinition.java | 13 +------- .../org/apache/camel/model/CopyableDefinition.java | 4 +-- .../apache/camel/model/DataFormatDefinition.java | 4 +-- .../apache/camel/model/LoadBalancerDefinition.java | 4 +-- .../apache/camel/model/OnFallbackDefinition.java | 2 +- .../org/apache/camel/model/OutputDefinition.java | 2 +- .../apache/camel/model/OutputExpressionNode.java | 2 +- .../apache/camel/model/ProcessorDefinition.java | 2 +- .../camel/model/ProcessorDefinitionHelper.java | 19 ++++++++--- .../camel/model/RouteTemplateDefinition.java | 2 +- .../org/apache/camel/model/SagaDefinition.java | 13 +------- .../apache/camel/model/SetHeadersDefinition.java | 12 +------ .../apache/camel/model/SetVariablesDefinition.java | 12 +------ .../java/org/apache/camel/model/TryDefinition.java | 13 +------- .../camel/model/dataformat/ASN1DataFormat.java | 12 +++++++ .../camel/model/dataformat/AvroDataFormat.java | 33 +++++++++++++++++++ .../camel/model/dataformat/BarcodeDataFormat.java | 13 ++++++++ .../camel/model/dataformat/Base64DataFormat.java | 12 +++++++ .../camel/model/dataformat/BeanioDataFormat.java | 17 ++++++++++ .../camel/model/dataformat/BindyDataFormat.java | 15 +++++++++ .../camel/model/dataformat/CBORDataFormat.java | 21 ++++++++++++ .../camel/model/dataformat/CryptoDataFormat.java | 18 ++++++++++ .../camel/model/dataformat/CsvDataFormat.java | 38 ++++++++++++++++++++++ .../camel/model/dataformat/CustomDataFormat.java | 10 ++++++ .../model/dataformat/DataFormatsDefinition.java | 16 ++++++++- .../camel/model/dataformat/FhirDataformat.java | 23 +++++++++++++ .../camel/model/dataformat/FhirJsonDataFormat.java | 9 +++++ .../camel/model/dataformat/FhirXmlDataFormat.java | 9 +++++ .../camel/model/dataformat/FlatpackDataFormat.java | 17 ++++++++++ .../camel/model/dataformat/GrokDataFormat.java | 13 ++++++++ .../model/dataformat/GzipDeflaterDataFormat.java | 9 +++++ .../camel/model/dataformat/HL7DataFormat.java | 11 +++++++ .../camel/model/dataformat/IcalDataFormat.java | 10 ++++++ .../model/dataformat/JacksonXMLDataFormat.java | 28 ++++++++++++++++ .../camel/model/dataformat/JaxbDataFormat.java | 29 +++++++++++++++++ .../camel/model/dataformat/JsonApiDataFormat.java | 13 ++++++++ .../camel/model/dataformat/JsonDataFormat.java | 35 ++++++++++++++++++++ .../camel/model/dataformat/LZFDataFormat.java | 10 ++++++ .../model/dataformat/MimeMultipartDataFormat.java | 14 ++++++++ .../camel/model/dataformat/PGPDataFormat.java | 24 ++++++++++++++ .../model/dataformat/ParquetAvroDataFormat.java | 13 ++++++++ .../camel/model/dataformat/ProtobufDataFormat.java | 34 +++++++++++++++++++ .../camel/model/dataformat/RssDataFormat.java | 9 +++++ .../camel/model/dataformat/SoapDataFormat.java | 16 +++++++++ .../camel/model/dataformat/SwiftMtDataFormat.java | 10 ++++++ .../camel/model/dataformat/SwiftMxDataFormat.java | 15 +++++++++ .../camel/model/dataformat/SyslogDataFormat.java | 9 +++++ .../camel/model/dataformat/TarFileDataFormat.java | 13 ++++++++ .../camel/model/dataformat/ThriftDataFormat.java | 13 ++++++++ .../model/dataformat/TidyMarkupDataFormat.java | 12 +++++++ .../dataformat/UniVocityAbstractDataFormat.java | 18 ++++++++++ .../model/dataformat/UniVocityCsvDataFormat.java | 13 ++++++++ .../model/dataformat/UniVocityFixedDataFormat.java | 12 +++++++ .../camel/model/dataformat/UniVocityHeader.java | 16 ++++++++- .../model/dataformat/UniVocityTsvDataFormat.java | 10 ++++++ .../model/dataformat/XMLSecurityDataFormat.java | 24 ++++++++++++++ .../camel/model/dataformat/YAMLDataFormat.java | 23 +++++++++++++ .../model/dataformat/YAMLTypeFilterDefinition.java | 16 ++++++++- .../model/dataformat/ZipDeflaterDataFormat.java | 10 ++++++ .../camel/model/dataformat/ZipFileDataFormat.java | 13 ++++++++ .../model/language/NamespaceAwareExpression.java | 15 ++------- .../loadbalancer/CustomLoadBalancerDefinition.java | 1 + .../FailoverLoadBalancerDefinition.java | 1 + .../loadbalancer/RandomLoadBalancerDefinition.java | 1 + .../RoundRobinLoadBalancerDefinition.java | 1 + .../loadbalancer/StickyLoadBalancerDefinition.java | 1 + .../loadbalancer/TopicLoadBalancerDefinition.java | 1 + .../WeightedLoadBalancerDefinition.java | 1 + .../transformer/CustomTransformerDefinition.java | 14 ++++++++ .../DataFormatTransformerDefinition.java | 13 ++++++++ .../transformer/EndpointTransformerDefinition.java | 14 ++++++++ .../transformer/LoadTransformerDefinition.java | 15 ++++++++- .../model/transformer/TransformerDefinition.java | 13 +++++++- .../model/transformer/TransformersDefinition.java | 17 ++++++++-- .../model/validator/CustomValidatorDefinition.java | 14 ++++++++ .../validator/EndpointValidatorDefinition.java | 14 ++++++++ .../validator/PredicateValidatorDefinition.java | 13 ++++++++ .../camel/model/validator/ValidatorDefinition.java | 10 +++++- .../model/validator/ValidatorsDefinition.java | 8 +++++ .../camel/model/RouteTemplateDefinitionTest.java | 3 +- 80 files changed, 935 insertions(+), 97 deletions(-) diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java index e752d246558..69192d540a2 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java @@ -64,7 +64,7 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> impl protected ChoiceDefinition(ChoiceDefinition source) { super(source); - this.whenClauses = copyWhenClauses(source); + this.whenClauses = ProcessorDefinitionHelper.deepCopyDefinitions(source.whenClauses); this.otherwise = source.otherwise != null ? source.otherwise.copyDefinition() : null; this.precondition = source.precondition; } @@ -331,15 +331,4 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> impl } } - private static List<WhenDefinition> copyWhenClauses(ChoiceDefinition source) { - if (source.whenClauses != null) { - var answer = new ArrayList<WhenDefinition>(); - for (var def : source.whenClauses) { - answer.add(def.copyDefinition()); - } - return answer; - } - return null; - } - } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/CopyableDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/CopyableDefinition.java index cfd714aac43..262b8c1f396 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/CopyableDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/CopyableDefinition.java @@ -20,10 +20,10 @@ package org.apache.camel.model; * This interface is used to copy {@link ProcessorDefinition ProcessorDefinitions} during instantiation of route * templates. */ -public interface CopyableDefinition { +public interface CopyableDefinition<T> { /** * Makes a copy of this definition. */ - ProcessorDefinition<?> copyDefinition(); + T copyDefinition(); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/DataFormatDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/DataFormatDefinition.java index 7594bab7006..503de71cf7e 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/DataFormatDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/DataFormatDefinition.java @@ -30,7 +30,7 @@ import org.apache.camel.spi.Metadata; @Metadata(label = "dataformat,transformation") @XmlType(name = "dataFormat") @XmlAccessorType(XmlAccessType.FIELD) -public class DataFormatDefinition extends IdentifiedType { +public class DataFormatDefinition extends IdentifiedType implements CopyableDefinition<DataFormatDefinition> { @XmlTransient private DataFormat dataFormat; @@ -50,7 +50,7 @@ public class DataFormatDefinition extends IdentifiedType { } public DataFormatDefinition copyDefinition() { - return new DataFormatDefinition(this); + throw new UnsupportedOperationException("Should be implemented in child classes"); } protected DataFormatDefinition(String dataFormatName) { diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java index 85bd68e9b84..4fb0616b22b 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java @@ -21,7 +21,7 @@ import jakarta.xml.bind.annotation.XmlTransient; /** * Balances message processing among a number of nodes */ -public abstract class LoadBalancerDefinition extends IdentifiedType { +public abstract class LoadBalancerDefinition extends IdentifiedType implements CopyableDefinition<LoadBalancerDefinition> { @XmlTransient private String loadBalancerTypeName; @@ -37,8 +37,6 @@ public abstract class LoadBalancerDefinition extends IdentifiedType { this.loadBalancerTypeName = loadBalancerTypeName; } - protected abstract LoadBalancerDefinition copyDefinition(); - /** * Maximum number of outputs, as some load balancers only support 1 processor */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/OnFallbackDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/OnFallbackDefinition.java index 7b6ad38c3b6..6bd6bd06226 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/OnFallbackDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/OnFallbackDefinition.java @@ -48,7 +48,7 @@ public class OnFallbackDefinition extends ProcessorDefinition<OnFallbackDefiniti protected OnFallbackDefinition(OnFallbackDefinition source) { super(source); this.fallbackViaNetwork = source.fallbackViaNetwork; - this.outputs = ProcessorDefinitionHelper.copyDefinitions(source.outputs); + this.outputs = ProcessorDefinitionHelper.deepCopyDefinitions(source.outputs); } @Override diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/OutputDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/OutputDefinition.java index 5634206975d..57d85d7b51e 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/OutputDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/OutputDefinition.java @@ -42,7 +42,7 @@ public class OutputDefinition<Type extends ProcessorDefinition<Type>> extends Pr protected OutputDefinition(OutputDefinition<?> source) { super(source); - this.outputs = ProcessorDefinitionHelper.copyDefinitions(source.outputs); + this.outputs = ProcessorDefinitionHelper.deepCopyDefinitions(source.outputs); } @Override diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/OutputExpressionNode.java b/core/camel-core-model/src/main/java/org/apache/camel/model/OutputExpressionNode.java index e03d7d8b5b2..cdd438ed548 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/OutputExpressionNode.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/OutputExpressionNode.java @@ -43,7 +43,7 @@ public abstract class OutputExpressionNode extends ExpressionNode implements Out public OutputExpressionNode(OutputExpressionNode source) { super(source); - this.outputs = ProcessorDefinitionHelper.copyDefinitions(source.outputs); + this.outputs = ProcessorDefinitionHelper.deepCopyDefinitions(source.outputs); } public OutputExpressionNode(ExpressionDefinition expression) { diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java index fa0371e16fa..391b2b6ea66 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java @@ -78,7 +78,7 @@ import org.slf4j.Logger; @XmlAccessorType(XmlAccessType.FIELD) @SuppressWarnings("rawtypes") public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>> extends OptionalIdentifiedDefinition<Type> - implements Block, CopyableDefinition { + implements Block, CopyableDefinition<ProcessorDefinition> { @XmlTransient private static final AtomicInteger COUNTER = new AtomicInteger(); @XmlAttribute diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java index e5e34da8081..c48fe079307 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java @@ -461,10 +461,21 @@ public final class ProcessorDefinitionHelper { return null; } - public static List<ProcessorDefinition<?>> copyDefinitions(List<ProcessorDefinition<?>> outputs) { - var answer = new ArrayList<ProcessorDefinition<?>>(); - for (var def : outputs) { - answer.add(def.copyDefinition()); + /** + * Performs a depp copy of the list of model classes + * + * @param models list of model classes + * @return a new list containing a deep copy of the model classes + */ + public static List deepCopyDefinitions(List models) { + var answer = new ArrayList(); + if (models != null) { + for (var def : models) { + if (def instanceof CopyableDefinition<?> copy) { + def = copy.copyDefinition(); + } + answer.add(def); + } } return answer; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java index 450a1845fdd..03618b3ea38 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java @@ -418,7 +418,7 @@ public class RouteTemplateDefinition extends OptionalIdentifiedDefinition<RouteT copy.setLogMask(route.getLogMask()); copy.setMessageHistory(route.getMessageHistory()); copy.setOutputType(route.getOutputType()); - copy.setOutputs(ProcessorDefinitionHelper.copyDefinitions(route.getOutputs())); + copy.setOutputs(ProcessorDefinitionHelper.deepCopyDefinitions(route.getOutputs())); copy.setRoutePolicies(shallowCopy(route.getRoutePolicies())); copy.setRoutePolicyRef(route.getRoutePolicyRef()); copy.setRouteProperties(shallowCopy(route.getRouteProperties())); diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/SagaDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/SagaDefinition.java index fc5119e8a72..bf97caa3797 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/SagaDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/SagaDefinition.java @@ -79,7 +79,7 @@ public class SagaDefinition extends OutputDefinition<SagaDefinition> { this.timeout = source.timeout; this.compensation = source.compensation != null ? source.compensation.copyDefinition() : null; this.completion = source.completion != null ? source.completion.copyDefinition() : null; - this.options = copyOptions(source); + this.options = ProcessorDefinitionHelper.deepCopyDefinitions(source.options); } @Override @@ -313,15 +313,4 @@ public class SagaDefinition extends OutputDefinition<SagaDefinition> { builder.append(key).append(':').append(value); } - private static List<PropertyExpressionDefinition> copyOptions(SagaDefinition source) { - if (source.options != null) { - var answer = new ArrayList<PropertyExpressionDefinition>(); - for (var def : source.options) { - answer.add(def.copyDefinition()); - } - return answer; - } - return null; - } - } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/SetHeadersDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/SetHeadersDefinition.java index a7ee80ba259..e86d1fa23a0 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/SetHeadersDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/SetHeadersDefinition.java @@ -51,7 +51,7 @@ public class SetHeadersDefinition extends ProcessorDefinition<SetHeadersDefiniti protected SetHeadersDefinition(SetHeadersDefinition source) { super(source); - this.headers = copyHeaders(source); + this.headers = ProcessorDefinitionHelper.deepCopyDefinitions(source.headers); } @Override @@ -126,14 +126,4 @@ public class SetHeadersDefinition extends ProcessorDefinition<SetHeadersDefiniti return Collections.emptyList(); } - private static List<SetHeaderDefinition> copyHeaders(SetHeadersDefinition source) { - var answer = new ArrayList<SetHeaderDefinition>(); - if (source.headers != null) { - for (var def : source.headers) { - answer.add(def.copyDefinition()); - } - } - return answer; - } - } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/SetVariablesDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/SetVariablesDefinition.java index f609e2a9142..e52017c1924 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/SetVariablesDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/SetVariablesDefinition.java @@ -49,7 +49,7 @@ public class SetVariablesDefinition extends ProcessorDefinition<SetVariablesDefi protected SetVariablesDefinition(SetVariablesDefinition source) { super(source); - this.variables = copyVariables(source); + this.variables = ProcessorDefinitionHelper.deepCopyDefinitions(source.variables); } @Override @@ -124,14 +124,4 @@ public class SetVariablesDefinition extends ProcessorDefinition<SetVariablesDefi return Collections.emptyList(); } - private static List<SetVariableDefinition> copyVariables(SetVariablesDefinition source) { - var answer = new ArrayList<SetVariableDefinition>(); - if (source.variables != null) { - for (var def : source.variables) { - answer.add(def.copyDefinition()); - } - } - return answer; - } - } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/TryDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/TryDefinition.java index 5701f436b7e..f39217f695c 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/TryDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/TryDefinition.java @@ -58,7 +58,7 @@ public class TryDefinition extends OutputDefinition<TryDefinition> { protected TryDefinition(TryDefinition source) { super(source); - this.catchClauses = copyCatchClauses(source); + this.catchClauses = ProcessorDefinitionHelper.deepCopyDefinitions(source.catchClauses); this.finallyClause = source.finallyClause != null ? source.finallyClause.copyDefinition() : null; } @@ -255,15 +255,4 @@ public class TryDefinition extends OutputDefinition<TryDefinition> { } } - private static List<CatchDefinition> copyCatchClauses(TryDefinition source) { - if (source.catchClauses != null) { - var answer = new ArrayList<CatchDefinition>(); - for (var def : source.catchClauses) { - answer.add(def.copyDefinition()); - } - return answer; - } - return null; - } - } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java index 140470b401d..9f81a5d9313 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java @@ -47,6 +47,13 @@ public class ASN1DataFormat extends DataFormatDefinition { super("asn1"); } + protected ASN1DataFormat(ASN1DataFormat source) { + super(source); + this.unmarshalType = source.unmarshalType; + this.unmarshalTypeName = source.unmarshalTypeName; + this.usingIterator = source.usingIterator; + } + public ASN1DataFormat(Boolean usingIterator) { this(); setUsingIterator(usingIterator != null ? usingIterator.toString() : null); @@ -71,6 +78,11 @@ public class ASN1DataFormat extends DataFormatDefinition { this.unmarshalType = builder.unmarshalType; } + @Override + public ASN1DataFormat copyDefinition() { + return new ASN1DataFormat(this); + } + public String getUsingIterator() { return usingIterator; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java index 00463544127..7fb6c262509 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java @@ -104,6 +104,34 @@ public class AvroDataFormat extends DataFormatDefinition { super("avro"); } + protected AvroDataFormat(AvroDataFormat source) { + super(source); + this.unmarshalType = source.unmarshalType; + this.jsonView = source.jsonView; + this.collectionType = source.collectionType; + this.schema = source.schema; + this.instanceClassName = source.instanceClassName; + this.library = source.library; + this.objectMapper = source.objectMapper; + this.useDefaultObjectMapper = source.useDefaultObjectMapper; + this.unmarshalTypeName = source.unmarshalTypeName; + this.jsonViewTypeName = source.jsonViewTypeName; + this.include = source.include; + this.allowJmsType = source.allowJmsType; + this.collectionTypeName = source.collectionTypeName; + this.useList = source.useList; + this.moduleClassNames = source.moduleClassNames; + this.moduleRefs = source.moduleRefs; + this.enableFeatures = source.enableFeatures; + this.disableFeatures = source.disableFeatures; + this.allowUnmarshallType = source.allowUnmarshallType; + this.timezone = source.timezone; + this.autoDiscoverObjectMapper = source.autoDiscoverObjectMapper; + this.contentTypeHeader = source.contentTypeHeader; + this.schemaResolver = source.schemaResolver; + this.autoDiscoverSchemaResolver = source.autoDiscoverSchemaResolver; + } + public AvroDataFormat(AvroLibrary library) { this(); setLibrary(library); @@ -142,6 +170,11 @@ public class AvroDataFormat extends DataFormatDefinition { this.autoDiscoverSchemaResolver = builder.autoDiscoverSchemaResolver; } + @Override + public AvroDataFormat copyDefinition() { + return new AvroDataFormat(this); + } + public String getInstanceClassName() { return instanceClassName; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java index 20bc655104e..288338d918b 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java @@ -49,6 +49,14 @@ public class BarcodeDataFormat extends DataFormatDefinition { super("barcode"); } + protected BarcodeDataFormat(BarcodeDataFormat source) { + super(source); + this.barcodeFormat = source.barcodeFormat; + this.imageType = source.imageType; + this.width = source.width; + this.height = source.height; + } + private BarcodeDataFormat(Builder builder) { this(); this.barcodeFormat = builder.barcodeFormat; @@ -57,6 +65,11 @@ public class BarcodeDataFormat extends DataFormatDefinition { this.height = builder.height; } + @Override + public BarcodeDataFormat copyDefinition() { + return new BarcodeDataFormat(this); + } + public String getWidth() { return width; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java index 2f994ba7f06..b7cc8572967 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java @@ -48,6 +48,13 @@ public class Base64DataFormat extends DataFormatDefinition { super("base64"); } + protected Base64DataFormat(Base64DataFormat source) { + super(source); + this.lineLength = source.lineLength; + this.lineSeparator = source.lineSeparator; + this.urlSafe = source.urlSafe; + } + private Base64DataFormat(Builder builder) { this(); this.lineLength = builder.lineLength; @@ -55,6 +62,11 @@ public class Base64DataFormat extends DataFormatDefinition { this.urlSafe = builder.urlSafe; } + @Override + public Base64DataFormat copyDefinition() { + return new Base64DataFormat(this); + } + public String getLineLength() { return lineLength; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java index 0b175a8b50f..d113ba00429 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java @@ -61,6 +61,18 @@ public class BeanioDataFormat extends DataFormatDefinition { super("beanio"); } + protected BeanioDataFormat(BeanioDataFormat source) { + super(source); + this.mapping = source.mapping; + this.streamName = source.streamName; + this.ignoreUnidentifiedRecords = source.ignoreUnidentifiedRecords; + this.ignoreUnexpectedRecords = source.ignoreUnexpectedRecords; + this.ignoreInvalidRecords = source.ignoreInvalidRecords; + this.encoding = source.encoding; + this.beanReaderErrorHandlerType = source.beanReaderErrorHandlerType; + this.unmarshalSingleObject = source.unmarshalSingleObject; + } + private BeanioDataFormat(BeanioDataFormat.Builder builder) { this(); this.mapping = builder.mapping; @@ -73,6 +85,11 @@ public class BeanioDataFormat extends DataFormatDefinition { this.unmarshalSingleObject = builder.unmarshalSingleObject; } + @Override + public BeanioDataFormat copyDefinition() { + return new BeanioDataFormat(this); + } + public String getMapping() { return mapping; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java index 5d540686d69..daf486714c0 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java @@ -58,6 +58,16 @@ public class BindyDataFormat extends DataFormatDefinition { super("bindy"); } + protected BindyDataFormat(BindyDataFormat source) { + super(source); + this.classType = source.classType; + this.type = source.type; + this.classTypeAsString = source.classTypeAsString; + this.allowEmptyStream = source.allowEmptyStream; + this.unwrapSingleInstance = source.unwrapSingleInstance; + this.locale = source.locale; + } + private BindyDataFormat(Builder builder) { this(); this.classType = builder.classType; @@ -68,6 +78,11 @@ public class BindyDataFormat extends DataFormatDefinition { this.locale = builder.locale; } + @Override + public BindyDataFormat copyDefinition() { + return new BindyDataFormat(this); + } + public String getType() { return type; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java index 0df047503f5..575ed2dcdc7 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java @@ -71,6 +71,22 @@ public class CBORDataFormat extends DataFormatDefinition { super("cbor"); } + protected CBORDataFormat(CBORDataFormat source) { + super(source); + this.collectionType = source.collectionType; + this.unmarshalType = source.unmarshalType; + this.objectMapper = source.objectMapper; + this.useDefaultObjectMapper = source.useDefaultObjectMapper; + this.unmarshalTypeName = source.unmarshalTypeName; + this.collectionTypeName = source.collectionTypeName; + this.useList = source.useList; + this.allowUnmarshallType = source.allowUnmarshallType; + this.prettyPrint = source.prettyPrint; + this.allowJmsType = source.allowJmsType; + this.enableFeatures = source.enableFeatures; + this.disableFeatures = source.disableFeatures; + } + private CBORDataFormat(Builder builder) { this(); this.collectionType = builder.collectionType; @@ -87,6 +103,11 @@ public class CBORDataFormat extends DataFormatDefinition { this.disableFeatures = builder.disableFeatures; } + @Override + public CBORDataFormat copyDefinition() { + return new CBORDataFormat(this); + } + public String getObjectMapper() { return objectMapper; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java index fe645da8092..146222aa961 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java @@ -64,6 +64,19 @@ public class CryptoDataFormat extends DataFormatDefinition { super("crypto"); } + protected CryptoDataFormat(CryptoDataFormat source) { + super(source); + this.algorithm = source.algorithm; + this.keyRef = source.keyRef; + this.cryptoProvider = source.cryptoProvider; + this.initVectorRef = source.initVectorRef; + this.algorithmParameterRef = source.algorithmParameterRef; + this.bufferSize = source.bufferSize; + this.macAlgorithm = source.macAlgorithm; + this.shouldAppendHMAC = source.shouldAppendHMAC; + this.inline = source.inline; + } + private CryptoDataFormat(Builder builder) { this(); this.algorithm = builder.algorithm; @@ -77,6 +90,11 @@ public class CryptoDataFormat extends DataFormatDefinition { this.inline = builder.inline; } + @Override + public CryptoDataFormat copyDefinition() { + return new CryptoDataFormat(this); + } + public String getAlgorithm() { return algorithm; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java index 5272b99201f..be77d1fe53f 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java @@ -128,6 +128,39 @@ public class CsvDataFormat extends DataFormatDefinition { super("csv"); } + protected CsvDataFormat(CsvDataFormat source) { + super(source); + this.formatRef = source.formatRef; + this.formatName = source.formatName; + this.commentMarkerDisabled = source.commentMarkerDisabled; + this.commentMarker = source.commentMarker; + this.delimiter = source.delimiter; + this.escapeDisabled = source.escapeDisabled; + this.escape = source.escape; + this.headerDisabled = source.headerDisabled; + this.header = source.header; + this.allowMissingColumnNames = source.allowMissingColumnNames; + this.ignoreEmptyLines = source.ignoreEmptyLines; + this.ignoreSurroundingSpaces = source.ignoreSurroundingSpaces; + this.nullStringDisabled = source.nullStringDisabled; + this.nullString = source.nullString; + this.quoteDisabled = source.quoteDisabled; + this.quote = source.quote; + this.recordSeparatorDisabled = source.recordSeparatorDisabled; + this.recordSeparator = source.recordSeparator; + this.skipHeaderRecord = source.skipHeaderRecord; + this.quoteMode = source.quoteMode; + this.ignoreHeaderCase = source.ignoreHeaderCase; + this.trim = source.trim; + this.trailingDelimiter = source.trailingDelimiter; + this.marshallerFactoryRef = source.marshallerFactoryRef; + this.lazyLoad = source.lazyLoad; + this.useMaps = source.useMaps; + this.useOrderedMaps = source.useOrderedMaps; + this.recordConverterRef = source.recordConverterRef; + this.captureHeaderRecord = source.captureHeaderRecord; + } + public CsvDataFormat(String delimiter) { this(); setDelimiter(delimiter); @@ -171,6 +204,11 @@ public class CsvDataFormat extends DataFormatDefinition { this.captureHeaderRecord = builder.captureHeaderRecord; } + @Override + public CsvDataFormat copyDefinition() { + return new CsvDataFormat(this); + } + /** * Sets the implementation of the CsvMarshallerFactory interface which is able to customize * marshalling/unmarshalling behavior by extending CsvMarshaller or creating it from scratch. diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java index 093697a2616..933e409c957 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java @@ -40,6 +40,11 @@ public class CustomDataFormat extends DataFormatDefinition { public CustomDataFormat() { } + protected CustomDataFormat(CustomDataFormat source) { + super(source); + this.ref = source.ref; + } + public CustomDataFormat(String ref) { this.ref = ref; } @@ -49,6 +54,11 @@ public class CustomDataFormat extends DataFormatDefinition { this.ref = builder.ref; } + @Override + public CustomDataFormat copyDefinition() { + return new CustomDataFormat(this); + } + /** * Reference to the custom {@link org.apache.camel.spi.DataFormat} to lookup from the Camel registry. */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java index 5e3f91d2578..e129a74a6a9 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java @@ -26,7 +26,9 @@ import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlElements; import jakarta.xml.bind.annotation.XmlRootElement; +import org.apache.camel.model.CopyableDefinition; import org.apache.camel.model.DataFormatDefinition; +import org.apache.camel.model.ProcessorDefinitionHelper; import org.apache.camel.spi.Metadata; /** @@ -35,7 +37,7 @@ import org.apache.camel.spi.Metadata; @Metadata(label = "dataformat,transformation", title = "Data formats") @XmlRootElement(name = "dataFormats") @XmlAccessorType(XmlAccessType.FIELD) -public class DataFormatsDefinition { +public class DataFormatsDefinition implements CopyableDefinition<DataFormatsDefinition> { // cannot use @XmlElementRef as it doesn't allow optional properties @XmlElements({ @@ -82,6 +84,18 @@ public class DataFormatsDefinition { @XmlElement(name = "zipFile", type = ZipFileDataFormat.class) }) private List<DataFormatDefinition> dataFormats; + public DataFormatsDefinition() { + } + + protected DataFormatsDefinition(DataFormatsDefinition source) { + this.dataFormats = ProcessorDefinitionHelper.deepCopyDefinitions(source.dataFormats); + } + + @Override + public DataFormatsDefinition copyDefinition() { + return new DataFormatsDefinition(this); + } + /** * A list holding the configured data formats */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirDataformat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirDataformat.java index 9e301d104fd..d1825c98333 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirDataformat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirDataformat.java @@ -27,6 +27,7 @@ import org.apache.camel.model.DataFormatDefinition; import org.apache.camel.spi.Metadata; public abstract class FhirDataformat extends DataFormatDefinition implements ContentTypeHeaderAware { + @XmlAttribute @Metadata(enums = "DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", defaultValue = "R4") private String fhirVersion; @@ -88,6 +89,28 @@ public abstract class FhirDataformat extends DataFormatDefinition implements Con super(dataFormatName); } + protected FhirDataformat(FhirDataformat source) { + super(source); + this.fhirContext = source.fhirContext; + this.fhirVersion = source.fhirVersion; + this.prettyPrint = source.prettyPrint; + this.parserErrorHandler = source.parserErrorHandler; + this.parserOptions = source.parserOptions; + this.preferTypes = source.preferTypes; + this.forceResourceId = source.forceResourceId; + this.serverBaseUrl = source.serverBaseUrl; + this.omitResourceId = source.omitResourceId; + this.encodeElementsAppliesToChildResourcesOnly = source.encodeElementsAppliesToChildResourcesOnly; + this.encodeElements = source.encodeElements; + this.dontEncodeElements = source.dontEncodeElements; + this.stripVersionsFromReferences = source.stripVersionsFromReferences; + this.overrideResourceIdWithBundleEntryFullUrl = source.overrideResourceIdWithBundleEntryFullUrl; + this.summaryMode = source.summaryMode; + this.suppressNarratives = source.suppressNarratives; + this.dontStripVersionsFromReferencesAtPaths = source.dontStripVersionsFromReferencesAtPaths; + this.contentTypeHeader = source.contentTypeHeader; + } + protected FhirDataformat() { // This constructor is needed by jaxb for schema generation } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirJsonDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirJsonDataFormat.java index a28a74a5823..c9e72a32738 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirJsonDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirJsonDataFormat.java @@ -35,6 +35,15 @@ public class FhirJsonDataFormat extends FhirDataformat { super("fhirJson"); } + protected FhirJsonDataFormat(FhirJsonDataFormat source) { + super(source); + } + + @Override + public FhirJsonDataFormat copyDefinition() { + return new FhirJsonDataFormat(this); + } + private FhirJsonDataFormat(Builder builder) { super("fhirJson", builder); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirXmlDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirXmlDataFormat.java index 2caad688b51..d663522560a 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirXmlDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirXmlDataFormat.java @@ -39,6 +39,15 @@ public class FhirXmlDataFormat extends FhirDataformat { super("fhirXml", builder); } + protected FhirXmlDataFormat(FhirXmlDataFormat source) { + super(source); + } + + @Override + public FhirXmlDataFormat copyDefinition() { + return new FhirXmlDataFormat(this); + } + /** * {@code Builder} is a specific builder for {@link FhirXmlDataFormat}. */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java index 16c77269866..9ce79bb95e2 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java @@ -63,6 +63,18 @@ public class FlatpackDataFormat extends DataFormatDefinition { super("flatpack"); } + protected FlatpackDataFormat(FlatpackDataFormat source) { + super(source); + this.definition = source.definition; + this.fixed = source.fixed; + this.delimiter = source.delimiter; + this.ignoreFirstRecord = source.ignoreFirstRecord; + this.allowShortLines = source.allowShortLines; + this.ignoreExtraColumns = source.ignoreExtraColumns; + this.textQualifier = source.textQualifier; + this.parserFactoryRef = source.parserFactoryRef; + } + private FlatpackDataFormat(Builder builder) { this(); this.definition = builder.definition; @@ -75,6 +87,11 @@ public class FlatpackDataFormat extends DataFormatDefinition { this.parserFactoryRef = builder.parserFactoryRef; } + @Override + public FlatpackDataFormat copyDefinition() { + return new FlatpackDataFormat(this); + } + public String getDefinition() { return definition; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GrokDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GrokDataFormat.java index b51f93b02b3..5c26891f483 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GrokDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GrokDataFormat.java @@ -51,6 +51,14 @@ public class GrokDataFormat extends DataFormatDefinition { super("grok"); } + protected GrokDataFormat(GrokDataFormat source) { + super(source); + this.pattern = source.pattern; + this.flattened = source.flattened; + this.allowMultipleMatchesPerLine = source.allowMultipleMatchesPerLine; + this.namedOnly = source.namedOnly; + } + private GrokDataFormat(Builder builder) { this(); this.pattern = builder.pattern; @@ -59,6 +67,11 @@ public class GrokDataFormat extends DataFormatDefinition { this.namedOnly = builder.namedOnly; } + @Override + public GrokDataFormat copyDefinition() { + return new GrokDataFormat(this); + } + public String getPattern() { return pattern; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GzipDeflaterDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GzipDeflaterDataFormat.java index 0d71d772539..0d8b0ffe96b 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GzipDeflaterDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GzipDeflaterDataFormat.java @@ -34,6 +34,15 @@ public class GzipDeflaterDataFormat extends DataFormatDefinition { super("gzipDeflater"); } + protected GzipDeflaterDataFormat(GzipDeflaterDataFormat source) { + super(source); + } + + @Override + public GzipDeflaterDataFormat copyDefinition() { + return new GzipDeflaterDataFormat(this); + } + /** * {@code Builder} is a specific builder for {@link GzipDeflaterDataFormat}. */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java index 70aa967189b..9a5e600a136 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java @@ -46,12 +46,23 @@ public class HL7DataFormat extends DataFormatDefinition { super("hl7"); } + protected HL7DataFormat(HL7DataFormat source) { + super(source); + this.parser = source.parser; + this.validate = source.validate; + } + private HL7DataFormat(Builder builder) { this(); this.parser = builder.parser; this.validate = builder.validate; } + @Override + public HL7DataFormat copyDefinition() { + return new HL7DataFormat(this); + } + public String getValidate() { return validate; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/IcalDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/IcalDataFormat.java index 814717ae166..adca1379eb4 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/IcalDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/IcalDataFormat.java @@ -42,11 +42,21 @@ public class IcalDataFormat extends DataFormatDefinition { super("ical"); } + protected IcalDataFormat(IcalDataFormat source) { + super(source); + this.validating = source.validating; + } + private IcalDataFormat(Builder builder) { this(); this.validating = builder.validating; } + @Override + public IcalDataFormat copyDefinition() { + return new IcalDataFormat(this); + } + public String getValidating() { return validating; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java index b7479c4e6fc..429817b657a 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java @@ -91,6 +91,29 @@ public class JacksonXMLDataFormat extends DataFormatDefinition implements Conten super("jacksonXml"); } + protected JacksonXMLDataFormat(JacksonXMLDataFormat builder) { + super(builder); + this.unmarshalType = builder.unmarshalType; + this.jsonView = builder.jsonView; + this.collectionType = builder.collectionType; + this.xmlMapper = builder.xmlMapper; + this.prettyPrint = builder.prettyPrint; + this.unmarshalTypeName = builder.unmarshalTypeName; + this.allowUnmarshallType = builder.allowUnmarshallType; + this.jsonViewTypeName = builder.jsonViewTypeName; + this.include = builder.include; + this.allowJmsType = builder.allowJmsType; + this.collectionTypeName = builder.collectionTypeName; + this.useList = builder.useList; + this.timezone = builder.timezone; + this.enableJaxbAnnotationModule = builder.enableJaxbAnnotationModule; + this.moduleClassNames = builder.moduleClassNames; + this.moduleRefs = builder.moduleRefs; + this.enableFeatures = builder.enableFeatures; + this.disableFeatures = builder.disableFeatures; + this.contentTypeHeader = builder.contentTypeHeader; + } + private JacksonXMLDataFormat(Builder builder) { this(); this.unmarshalType = builder.unmarshalType; @@ -114,6 +137,11 @@ public class JacksonXMLDataFormat extends DataFormatDefinition implements Conten this.contentTypeHeader = builder.contentTypeHeader; } + @Override + public JacksonXMLDataFormat copyDefinition() { + return new JacksonXMLDataFormat(this); + } + public String getXmlMapper() { return xmlMapper; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java index 21e8b14595c..d7181ce785f 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java @@ -98,6 +98,30 @@ public class JaxbDataFormat extends DataFormatDefinition implements ContentTypeH super("jaxb"); } + private JaxbDataFormat(JaxbDataFormat source) { + super(source); + this.contextPath = source.contextPath; + this.contextPathIsClassName = source.contextPathIsClassName; + this.schema = source.schema; + this.schemaSeverityLevel = source.schemaSeverityLevel; + this.prettyPrint = source.prettyPrint; + this.objectFactory = source.objectFactory; + this.ignoreJAXBElement = source.ignoreJAXBElement; + this.mustBeJAXBElement = source.mustBeJAXBElement; + this.filterNonXmlChars = source.filterNonXmlChars; + this.encoding = source.encoding; + this.fragment = source.fragment; + this.partClass = source.partClass; + this.partNamespace = source.partNamespace; + this.namespacePrefixRef = source.namespacePrefixRef; + this.xmlStreamWriterWrapper = source.xmlStreamWriterWrapper; + this.schemaLocation = source.schemaLocation; + this.noNamespaceSchemaLocation = source.noNamespaceSchemaLocation; + this.jaxbProviderProperties = source.jaxbProviderProperties; + this.contentTypeHeader = source.contentTypeHeader; + this.accessExternalSchemaProtocols = source.accessExternalSchemaProtocols; + } + public JaxbDataFormat(boolean prettyPrint) { this(); setPrettyPrint(Boolean.toString(prettyPrint)); @@ -127,6 +151,11 @@ public class JaxbDataFormat extends DataFormatDefinition implements ContentTypeH this.accessExternalSchemaProtocols = builder.accessExternalSchemaProtocols; } + @Override + public JaxbDataFormat copyDefinition() { + return new JaxbDataFormat(this); + } + public String getContextPath() { return contextPath; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java index b5f41718c18..05c03f59bc7 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java @@ -48,6 +48,14 @@ public class JsonApiDataFormat extends DataFormatDefinition { super("jsonApi"); } + protected JsonApiDataFormat(JsonApiDataFormat source) { + super(source); + this.dataFormatTypes = source.dataFormatTypes; + this.dataFormatTypeClasses = source.dataFormatTypeClasses; + this.mainFormatType = source.mainFormatType; + this.mainFormatTypeClass = source.mainFormatTypeClass; + } + private JsonApiDataFormat(Builder builder) { this(); this.dataFormatTypes = builder.dataFormatTypes; @@ -56,6 +64,11 @@ public class JsonApiDataFormat extends DataFormatDefinition { this.mainFormatTypeClass = builder.mainFormatTypeClass; } + @Override + public JsonApiDataFormat copyDefinition() { + return new JsonApiDataFormat(this); + } + public String getDataFormatTypes() { return dataFormatTypes; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java index 4811695bd0b..5f53443d2c3 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java @@ -33,6 +33,7 @@ import org.apache.camel.spi.Metadata; @XmlRootElement(name = "json") @XmlAccessorType(XmlAccessType.FIELD) public class JsonDataFormat extends DataFormatDefinition implements ContentTypeHeaderAware { + @XmlAttribute private String objectMapper; @XmlAttribute @@ -116,6 +117,35 @@ public class JsonDataFormat extends DataFormatDefinition implements ContentTypeH this.library = library; } + protected JsonDataFormat(JsonDataFormat source) { + super(source); + this.objectMapper = source.objectMapper; + this.useDefaultObjectMapper = source.useDefaultObjectMapper; + this.autoDiscoverObjectMapper = source.autoDiscoverObjectMapper; + this.prettyPrint = source.prettyPrint; + this.library = source.library; + this.unmarshalTypeName = source.unmarshalTypeName; + this.unmarshalType = source.unmarshalType; + this.jsonViewTypeName = source.jsonViewTypeName; + this.jsonView = source.jsonView; + this.include = source.include; + this.allowJmsType = source.allowJmsType; + this.collectionTypeName = source.collectionTypeName; + this.collectionType = source.collectionType; + this.useList = source.useList; + this.moduleClassNames = source.moduleClassNames; + this.moduleRefs = source.moduleRefs; + this.enableFeatures = source.enableFeatures; + this.disableFeatures = source.disableFeatures; + this.allowUnmarshallType = source.allowUnmarshallType; + this.timezone = source.timezone; + this.schemaResolver = source.schemaResolver; + this.autoDiscoverSchemaResolver = source.autoDiscoverSchemaResolver; + this.namingStrategy = source.namingStrategy; + this.contentTypeHeader = source.contentTypeHeader; + this.dateFormatPattern = source.dateFormatPattern; + } + private JsonDataFormat(Builder builder) { this(); this.objectMapper = builder.objectMapper; @@ -145,6 +175,11 @@ public class JsonDataFormat extends DataFormatDefinition implements ContentTypeH this.dateFormatPattern = builder.dateFormatPattern; } + @Override + public JsonDataFormat copyDefinition() { + return new JsonDataFormat(this); + } + @Override public String getDataFormatName() { // json data format is special as the name can be from different bundles diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/LZFDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/LZFDataFormat.java index 2af0586275b..d6b69f28ab6 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/LZFDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/LZFDataFormat.java @@ -42,11 +42,21 @@ public class LZFDataFormat extends DataFormatDefinition { super("lzf"); } + protected LZFDataFormat(LZFDataFormat source) { + super(source); + this.usingParallelCompression = source.usingParallelCompression; + } + private LZFDataFormat(Builder builder) { this(); this.usingParallelCompression = builder.usingParallelCompression; } + @Override + public LZFDataFormat copyDefinition() { + return new LZFDataFormat(this); + } + public String getUsingParallelCompression() { return usingParallelCompression; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/MimeMultipartDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/MimeMultipartDataFormat.java index 2ddd1e448da..a9afa6b57a9 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/MimeMultipartDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/MimeMultipartDataFormat.java @@ -53,6 +53,15 @@ public class MimeMultipartDataFormat extends DataFormatDefinition { super("mimeMultipart"); } + protected MimeMultipartDataFormat(MimeMultipartDataFormat source) { + super(source); + this.multipartSubType = source.multipartSubType; + this.multipartWithoutAttachment = source.multipartWithoutAttachment; + this.headersInline = source.headersInline; + this.includeHeaders = source.includeHeaders; + this.binaryContent = source.binaryContent; + } + private MimeMultipartDataFormat(Builder builder) { this(); this.multipartSubType = builder.multipartSubType; @@ -62,6 +71,11 @@ public class MimeMultipartDataFormat extends DataFormatDefinition { this.binaryContent = builder.binaryContent; } + @Override + public MimeMultipartDataFormat copyDefinition() { + return new MimeMultipartDataFormat(this); + } + public String getMultipartSubType() { return multipartSubType; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java index e138dbbdeec..9923cf7b06b 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java @@ -33,6 +33,7 @@ import org.apache.camel.spi.Metadata; @XmlRootElement(name = "pgp") @XmlAccessorType(XmlAccessType.FIELD) public class PGPDataFormat extends DataFormatDefinition { + @XmlAttribute private String keyUserid; @XmlAttribute @@ -71,6 +72,24 @@ public class PGPDataFormat extends DataFormatDefinition { super("pgp"); } + protected PGPDataFormat(PGPDataFormat source) { + super(source); + this.keyUserid = source.keyUserid; + this.signatureKeyUserid = source.signatureKeyUserid; + this.password = source.password; + this.signaturePassword = source.signaturePassword; + this.keyFileName = source.keyFileName; + this.signatureKeyFileName = source.signatureKeyFileName; + this.signatureKeyRing = source.signatureKeyRing; + this.armored = source.armored; + this.integrity = source.integrity; + this.provider = source.provider; + this.algorithm = source.algorithm; + this.compressionAlgorithm = source.compressionAlgorithm; + this.hashAlgorithm = source.hashAlgorithm; + this.signatureVerificationOption = source.signatureVerificationOption; + } + private PGPDataFormat(Builder builder) { this(); this.keyUserid = builder.keyUserid; @@ -89,6 +108,11 @@ public class PGPDataFormat extends DataFormatDefinition { this.signatureVerificationOption = builder.signatureVerificationOption; } + @Override + public PGPDataFormat copyDefinition() { + return new PGPDataFormat(this); + } + public String getSignatureKeyUserid() { return signatureKeyUserid; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ParquetAvroDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ParquetAvroDataFormat.java index fce4152f027..034e332c76f 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ParquetAvroDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ParquetAvroDataFormat.java @@ -49,6 +49,14 @@ public class ParquetAvroDataFormat extends DataFormatDefinition { super("parquetAvro"); } + protected ParquetAvroDataFormat(ParquetAvroDataFormat source) { + super(source); + this.compressionCodecName = source.compressionCodecName; + this.unmarshalTypeName = source.unmarshalTypeName; + this.unmarshalType = source.unmarshalType; + this.lazyLoad = source.lazyLoad; + } + public ParquetAvroDataFormat(String unmarshalTypeName) { this(); setUnmarshalTypeName(unmarshalTypeName); @@ -72,6 +80,11 @@ public class ParquetAvroDataFormat extends DataFormatDefinition { this.lazyLoad = builder.lazyLoad; } + @Override + public ParquetAvroDataFormat copyDefinition() { + return new ParquetAvroDataFormat(this); + } + /** * Compression codec to use when marshalling. */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java index 4fbdb038be5..f325977e1f2 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java @@ -122,6 +122,35 @@ public class ProtobufDataFormat extends DataFormatDefinition implements ContentT setContentTypeFormat(contentTypeFormat); } + protected ProtobufDataFormat(ProtobufDataFormat source) { + super(source); + this.defaultInstance = source.defaultInstance; + this.instanceClass = source.instanceClass; + this.objectMapper = source.objectMapper; + this.useDefaultObjectMapper = source.useDefaultObjectMapper; + this.autoDiscoverObjectMapper = source.autoDiscoverObjectMapper; + this.library = source.library; + this.unmarshalTypeName = source.unmarshalTypeName; + this.unmarshalType = source.unmarshalType; + this.jsonViewTypeName = source.jsonViewTypeName; + this.jsonView = source.jsonView; + this.include = source.include; + this.allowJmsType = source.allowJmsType; + this.collectionTypeName = source.collectionTypeName; + this.collectionType = source.collectionType; + this.useList = source.useList; + this.moduleClassNames = source.moduleClassNames; + this.moduleRefs = source.moduleRefs; + this.enableFeatures = source.enableFeatures; + this.disableFeatures = source.disableFeatures; + this.allowUnmarshallType = source.allowUnmarshallType; + this.timezone = source.timezone; + this.schemaResolver = source.schemaResolver; + this.autoDiscoverSchemaResolver = source.autoDiscoverSchemaResolver; + this.contentTypeFormat = source.contentTypeFormat; + this.contentTypeHeader = source.contentTypeHeader; + } + private ProtobufDataFormat(Builder builder) { this(); this.defaultInstance = builder.defaultInstance; @@ -151,6 +180,11 @@ public class ProtobufDataFormat extends DataFormatDefinition implements ContentT this.contentTypeHeader = builder.contentTypeHeader; } + @Override + public ProtobufDataFormat copyDefinition() { + return new ProtobufDataFormat(this); + } + @Override public String getDataFormatName() { // protobuf data format is special as the name can be from different bundles diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/RssDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/RssDataFormat.java index d77d959e540..5a5975f34f4 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/RssDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/RssDataFormat.java @@ -37,6 +37,15 @@ public class RssDataFormat extends DataFormatDefinition { super("rss"); } + protected RssDataFormat(RssDataFormat source) { + super(source); + } + + @Override + public RssDataFormat copyDefinition() { + return new RssDataFormat(this); + } + /** * {@code Builder} is a specific builder for {@link RssDataFormat}. */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SoapDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SoapDataFormat.java index 2dfd3f54217..b6df4c864e3 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SoapDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SoapDataFormat.java @@ -56,6 +56,17 @@ public class SoapDataFormat extends DataFormatDefinition { super("soap"); } + protected SoapDataFormat(SoapDataFormat source) { + super(source); + this.contextPath = source.contextPath; + this.encoding = source.encoding; + this.elementNameStrategyRef = source.elementNameStrategyRef; + this.elementNameStrategy = source.elementNameStrategy; + this.version = source.version; + this.namespacePrefixRef = source.namespacePrefixRef; + this.schema = source.schema; + } + public SoapDataFormat(String contextPath) { this(); setContextPath(contextPath); @@ -84,6 +95,11 @@ public class SoapDataFormat extends DataFormatDefinition { this.schema = builder.schema; } + @Override + public SoapDataFormat copyDefinition() { + return new SoapDataFormat(this); + } + /** * Package name where your JAXB classes are located. */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMtDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMtDataFormat.java index ab2f8124da4..83f2d2e80e1 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMtDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMtDataFormat.java @@ -42,6 +42,11 @@ public class SwiftMtDataFormat extends DataFormatDefinition { super("swiftMt"); } + protected SwiftMtDataFormat(SwiftMtDataFormat source) { + super(source); + this.writeInJson = source.writeInJson; + } + public SwiftMtDataFormat(String writeInJson) { this(); this.writeInJson = writeInJson; @@ -52,6 +57,11 @@ public class SwiftMtDataFormat extends DataFormatDefinition { this.writeInJson = builder.writeInJson; } + @Override + public SwiftMtDataFormat copyDefinition() { + return new SwiftMtDataFormat(this); + } + public String getWriteInJson() { return writeInJson; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMxDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMxDataFormat.java index 31e3087ab63..6414ea7a8c4 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMxDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMxDataFormat.java @@ -55,6 +55,16 @@ public class SwiftMxDataFormat extends DataFormatDefinition { super("swiftMx"); } + protected SwiftMxDataFormat(SwiftMxDataFormat source) { + super(source); + this.writeConfigRef = source.writeConfigRef; + this.writeConfig = source.writeConfig; + this.writeInJson = source.writeInJson; + this.readMessageId = source.readMessageId; + this.readConfigRef = source.readConfigRef; + this.readConfig = source.readConfig; + } + public SwiftMxDataFormat(boolean writeInJson) { this(); this.writeInJson = Boolean.toString(writeInJson); @@ -96,6 +106,11 @@ public class SwiftMxDataFormat extends DataFormatDefinition { this.readConfig = builder.readConfig; } + @Override + public SwiftMxDataFormat copyDefinition() { + return new SwiftMxDataFormat(this); + } + public Object getWriteConfig() { return writeConfig; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SyslogDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SyslogDataFormat.java index 6a93508d3d4..2ce10bd88a6 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SyslogDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SyslogDataFormat.java @@ -37,6 +37,15 @@ public class SyslogDataFormat extends DataFormatDefinition { super("syslog"); } + protected SyslogDataFormat(SyslogDataFormat source) { + super(source); + } + + @Override + public SyslogDataFormat copyDefinition() { + return new SyslogDataFormat(this); + } + /** * {@code Builder} is a specific builder for {@link SyslogDataFormat}. */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TarFileDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TarFileDataFormat.java index 4c222dc6e3c..de1d4bdb104 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TarFileDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TarFileDataFormat.java @@ -51,6 +51,14 @@ public class TarFileDataFormat extends DataFormatDefinition { super("tarFile"); } + protected TarFileDataFormat(TarFileDataFormat source) { + super(source); + this.usingIterator = source.usingIterator; + this.allowEmptyDirectory = source.allowEmptyDirectory; + this.preservePathElements = source.preservePathElements; + this.maxDecompressedSize = source.maxDecompressedSize; + } + private TarFileDataFormat(Builder builder) { this.usingIterator = builder.usingIterator; this.allowEmptyDirectory = builder.allowEmptyDirectory; @@ -58,6 +66,11 @@ public class TarFileDataFormat extends DataFormatDefinition { this.maxDecompressedSize = builder.maxDecompressedSize; } + @Override + public TarFileDataFormat copyDefinition() { + return new TarFileDataFormat(this); + } + public String getUsingIterator() { return usingIterator; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ThriftDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ThriftDataFormat.java index 9faa9fa33cd..6a8af5ddbf6 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ThriftDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ThriftDataFormat.java @@ -52,6 +52,14 @@ public class ThriftDataFormat extends DataFormatDefinition implements ContentTyp super("thrift"); } + protected ThriftDataFormat(ThriftDataFormat builder) { + super(builder); + this.defaultInstance = builder.defaultInstance; + this.instanceClass = builder.instanceClass; + this.contentTypeFormat = builder.contentTypeFormat; + this.contentTypeHeader = builder.contentTypeHeader; + } + public ThriftDataFormat(String instanceClass) { this(); setInstanceClass(instanceClass); @@ -71,6 +79,11 @@ public class ThriftDataFormat extends DataFormatDefinition implements ContentTyp this.contentTypeHeader = builder.contentTypeHeader; } + @Override + public ThriftDataFormat copyDefinition() { + return new ThriftDataFormat(this); + } + public String getInstanceClass() { return instanceClass; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java index 0166bc6620f..6afeb78d198 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java @@ -51,6 +51,18 @@ public class TidyMarkupDataFormat extends DataFormatDefinition { this.setDataObjectType(Node.class); } + protected TidyMarkupDataFormat(TidyMarkupDataFormat source) { + super(source); + this.dataObjectType = source.dataObjectType; + this.dataObjectTypeName = source.dataObjectTypeName; + this.omitXmlDeclaration = source.omitXmlDeclaration; + } + + @Override + public TidyMarkupDataFormat copyDefinition() { + return new TidyMarkupDataFormat(this); + } + public TidyMarkupDataFormat(Class<?> dataObjectType) { this(); if (!dataObjectType.isAssignableFrom(String.class) && !dataObjectType.isAssignableFrom(Node.class)) { diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityAbstractDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityAbstractDataFormat.java index 6fc5657164c..ca5cdbb703b 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityAbstractDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityAbstractDataFormat.java @@ -81,6 +81,24 @@ public abstract class UniVocityAbstractDataFormat extends DataFormatDefinition { // This constructor is needed by jaxb for schema generation } + protected UniVocityAbstractDataFormat(UniVocityAbstractDataFormat source) { + super(source); + this.nullValue = source.nullValue; + this.skipEmptyLines = source.skipEmptyLines; + this.ignoreTrailingWhitespaces = source.ignoreTrailingWhitespaces; + this.ignoreLeadingWhitespaces = source.ignoreLeadingWhitespaces; + this.headersDisabled = source.headersDisabled; + this.headers = source.headers; + this.headerExtractionEnabled = source.headerExtractionEnabled; + this.numberOfRecordsToRead = source.numberOfRecordsToRead; + this.emptyValue = source.emptyValue; + this.lineSeparator = source.lineSeparator; + this.normalizedLineSeparator = source.normalizedLineSeparator; + this.comment = source.comment; + this.lazyLoad = source.lazyLoad; + this.asMap = source.asMap; + } + protected UniVocityAbstractDataFormat(String dataFormatName) { super(dataFormatName); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityCsvDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityCsvDataFormat.java index d2724bb207d..ad841b829c3 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityCsvDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityCsvDataFormat.java @@ -49,6 +49,14 @@ public class UniVocityCsvDataFormat extends UniVocityAbstractDataFormat { super("univocityCsv"); } + protected UniVocityCsvDataFormat(UniVocityCsvDataFormat source) { + super(source); + this.delimiter = source.delimiter; + this.quoteAllFields = source.quoteAllFields; + this.quote = source.quote; + this.quoteEscape = source.quoteEscape; + } + private UniVocityCsvDataFormat(Builder builder) { super("univocityCsv", builder); this.delimiter = builder.delimiter; @@ -57,6 +65,11 @@ public class UniVocityCsvDataFormat extends UniVocityAbstractDataFormat { this.quoteEscape = builder.quoteEscape; } + @Override + public UniVocityCsvDataFormat copyDefinition() { + return new UniVocityCsvDataFormat(this); + } + public String getQuoteAllFields() { return quoteAllFields; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityFixedDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityFixedDataFormat.java index 138680e4bf9..feb834a46a1 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityFixedDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityFixedDataFormat.java @@ -45,6 +45,13 @@ public class UniVocityFixedDataFormat extends UniVocityAbstractDataFormat { super("univocityFixed"); } + protected UniVocityFixedDataFormat(UniVocityFixedDataFormat source) { + super(source); + this.padding = source.padding; + this.skipTrailingCharsUntilNewline = source.skipTrailingCharsUntilNewline; + this.recordEndsOnNewline = source.recordEndsOnNewline; + } + private UniVocityFixedDataFormat(Builder builder) { super("univocityFixed", builder); this.padding = builder.padding; @@ -52,6 +59,11 @@ public class UniVocityFixedDataFormat extends UniVocityAbstractDataFormat { this.recordEndsOnNewline = builder.recordEndsOnNewline; } + @Override + public UniVocityFixedDataFormat copyDefinition() { + return new UniVocityFixedDataFormat(this); + } + public String getSkipTrailingCharsUntilNewline() { return skipTrailingCharsUntilNewline; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java index f758a9c9cfa..32240aefa75 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java @@ -22,6 +22,7 @@ import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.XmlValue; +import org.apache.camel.model.CopyableDefinition; import org.apache.camel.spi.Metadata; /** @@ -30,13 +31,26 @@ import org.apache.camel.spi.Metadata; @Metadata(label = "dataformat,transformation,csv", title = "uniVocity Header") @XmlRootElement(name = "univocityHeader") @XmlAccessorType(XmlAccessType.FIELD) -public class UniVocityHeader { +public class UniVocityHeader implements CopyableDefinition<UniVocityHeader> { @XmlValue private String name; @XmlAttribute private String length; + public UniVocityHeader() { + } + + protected UniVocityHeader(UniVocityHeader source) { + this.name = source.name; + this.length = source.length; + } + + @Override + public UniVocityHeader copyDefinition() { + return new UniVocityHeader(this); + } + public String getName() { return name; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityTsvDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityTsvDataFormat.java index 8c10c0baa05..94285c24ec3 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityTsvDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityTsvDataFormat.java @@ -40,11 +40,21 @@ public class UniVocityTsvDataFormat extends UniVocityAbstractDataFormat { super("univocityTsv"); } + protected UniVocityTsvDataFormat(UniVocityTsvDataFormat source) { + super(source); + this.escapeChar = source.escapeChar; + } + private UniVocityTsvDataFormat(Builder builder) { super("univocityTsv", builder); this.escapeChar = builder.escapeChar; } + @Override + public UniVocityTsvDataFormat copyDefinition() { + return new UniVocityTsvDataFormat(this); + } + public String getEscapeChar() { return escapeChar; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java index 6c627df216f..5e135d40527 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java @@ -17,6 +17,7 @@ package org.apache.camel.model.dataformat; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import jakarta.xml.bind.annotation.XmlAccessType; @@ -80,6 +81,24 @@ public class XMLSecurityDataFormat extends DataFormatDefinition implements Names super("xmlSecurity"); } + protected XMLSecurityDataFormat(XMLSecurityDataFormat source) { + super(source); + this.xmlCipherAlgorithm = source.xmlCipherAlgorithm; + this.passPhrase = source.passPhrase; + this.passPhraseByte = source.passPhraseByte; + this.secureTag = source.secureTag; + this.secureTagContents = source.secureTagContents; + this.keyCipherAlgorithm = source.keyCipherAlgorithm; + this.recipientKeyAlias = source.recipientKeyAlias; + this.keyOrTrustStoreParametersRef = source.keyOrTrustStoreParametersRef; + this.keyPassword = source.keyPassword; + this.digestAlgorithm = source.digestAlgorithm; + this.mgfAlgorithm = source.mgfAlgorithm; + this.addKeyValueForEncryptedKey = source.addKeyValueForEncryptedKey; + this.keyOrTrustStoreParameters = source.keyOrTrustStoreParameters; + this.namespaces = source.namespaces != null ? new LinkedHashMap<>(source.namespaces) : null; + } + private XMLSecurityDataFormat(Builder builder) { this(); this.xmlCipherAlgorithm = builder.xmlCipherAlgorithm; @@ -98,6 +117,11 @@ public class XMLSecurityDataFormat extends DataFormatDefinition implements Names this.namespaces = builder.namespaces; } + @Override + public XMLSecurityDataFormat copyDefinition() { + return new XMLSecurityDataFormat(this); + } + public String getXmlCipherAlgorithm() { return xmlCipherAlgorithm; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java index fa038e465dd..83b7cd954b0 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java @@ -81,6 +81,24 @@ public class YAMLDataFormat extends DataFormatDefinition { this(YAMLLibrary.SnakeYAML); } + protected YAMLDataFormat(YAMLDataFormat source) { + super(source); + this.classLoader = source.classLoader; + this.unmarshalType = source.unmarshalType; + this.library = source.library; + this.unmarshalTypeName = source.unmarshalTypeName; + this.constructor = source.constructor; + this.representer = source.representer; + this.dumperOptions = source.dumperOptions; + this.resolver = source.resolver; + this.useApplicationContextClassLoader = source.useApplicationContextClassLoader; + this.prettyFlow = source.prettyFlow; + this.allowAnyType = source.allowAnyType; + this.typeFilters = source.typeFilters; + this.maxAliasesForCollections = source.maxAliasesForCollections; + this.allowRecursiveKeys = source.allowRecursiveKeys; + } + public YAMLDataFormat(YAMLLibrary library) { super(library.getDataFormatName()); this.library = library; @@ -110,6 +128,11 @@ public class YAMLDataFormat extends DataFormatDefinition { this.allowRecursiveKeys = builder.allowRecursiveKeys; } + @Override + public YAMLDataFormat copyDefinition() { + return new YAMLDataFormat(this); + } + @Override public String getDataFormatName() { // yaml data format is special as the name can be from different bundles diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLTypeFilterDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLTypeFilterDefinition.java index ee61b427283..9792066ca5a 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLTypeFilterDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLTypeFilterDefinition.java @@ -21,12 +21,13 @@ import jakarta.xml.bind.annotation.XmlAccessorType; import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlRootElement; +import org.apache.camel.model.CopyableDefinition; import org.apache.camel.spi.Metadata; @Metadata(label = "dataformat,transformation,yaml", title = "YAML Type Filter") @XmlRootElement(name = "typeFilter") @XmlAccessorType(XmlAccessType.FIELD) -public class YAMLTypeFilterDefinition { +public class YAMLTypeFilterDefinition implements CopyableDefinition<YAMLTypeFilterDefinition> { @XmlAttribute private String value; @@ -34,6 +35,19 @@ public class YAMLTypeFilterDefinition { @Metadata(javaType = "org.apache.camel.model.dataformat.YAMLTypeFilterType") private String type; + public YAMLTypeFilterDefinition() { + } + + protected YAMLTypeFilterDefinition(YAMLTypeFilterDefinition source) { + this.value = source.value; + this.type = source.type; + } + + @Override + public YAMLTypeFilterDefinition copyDefinition() { + return new YAMLTypeFilterDefinition(this); + } + public String getValue() { return value; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipDeflaterDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipDeflaterDataFormat.java index 1a1141fd9b6..99588e1a4a1 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipDeflaterDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipDeflaterDataFormat.java @@ -42,11 +42,21 @@ public class ZipDeflaterDataFormat extends DataFormatDefinition { super("zipDeflater"); } + protected ZipDeflaterDataFormat(ZipDeflaterDataFormat source) { + super(source); + this.compressionLevel = source.compressionLevel; + } + private ZipDeflaterDataFormat(Builder builder) { this(); this.compressionLevel = builder.compressionLevel; } + @Override + public ZipDeflaterDataFormat copyDefinition() { + return new ZipDeflaterDataFormat(this); + } + public String getCompressionLevel() { return compressionLevel; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java index 3137fcaf1cc..87a7c94c5f7 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java @@ -51,6 +51,14 @@ public class ZipFileDataFormat extends DataFormatDefinition { super("zipFile"); } + protected ZipFileDataFormat(ZipFileDataFormat source) { + super(source); + this.usingIterator = source.usingIterator; + this.allowEmptyDirectory = source.allowEmptyDirectory; + this.preservePathElements = source.preservePathElements; + this.maxDecompressedSize = source.maxDecompressedSize; + } + private ZipFileDataFormat(Builder builder) { this(); this.usingIterator = builder.usingIterator; @@ -59,6 +67,11 @@ public class ZipFileDataFormat extends DataFormatDefinition { this.maxDecompressedSize = builder.maxDecompressedSize; } + @Override + public ZipFileDataFormat copyDefinition() { + return new ZipFileDataFormat(this); + } + public String getUsingIterator() { return usingIterator; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java b/core/camel-core-model/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java index 715c7a973f1..834158bb6ef 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java @@ -16,7 +16,6 @@ */ package org.apache.camel.model.language; -import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -27,6 +26,7 @@ import jakarta.xml.bind.annotation.XmlAccessorType; import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlTransient; +import org.apache.camel.model.ProcessorDefinitionHelper; import org.apache.camel.model.PropertyDefinition; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.NamespaceAware; @@ -50,7 +50,7 @@ public abstract class NamespaceAwareExpression extends SingleInputTypedExpressio protected NamespaceAwareExpression(NamespaceAwareExpression source) { super(source); - this.namespace = copyNamespace(source); + this.namespace = ProcessorDefinitionHelper.deepCopyDefinitions(source.namespace); this.namespaces = source.namespaces != null ? new LinkedHashMap<>(source.namespaces) : null; } @@ -102,17 +102,6 @@ public abstract class NamespaceAwareExpression extends SingleInputTypedExpressio return namespaces; } - private static List<PropertyDefinition> copyNamespace(NamespaceAwareExpression source) { - if (source.namespace != null) { - var answer = new ArrayList<PropertyDefinition>(); - for (var def : source.namespace) { - answer.add(def.copyDefinition()); - } - return answer; - } - return null; - } - /** * {@code NamespaceAwareBuilder} is the base namespace aware expression builder. */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/CustomLoadBalancerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/CustomLoadBalancerDefinition.java index e47b3157eaa..5cf8dbfb134 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/CustomLoadBalancerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/CustomLoadBalancerDefinition.java @@ -53,6 +53,7 @@ public class CustomLoadBalancerDefinition extends LoadBalancerDefinition { this.ref = ref; } + @Override public CustomLoadBalancerDefinition copyDefinition() { return new CustomLoadBalancerDefinition(this); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java index 09c98bc2a73..9c70e700f57 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java @@ -62,6 +62,7 @@ public class FailoverLoadBalancerDefinition extends LoadBalancerDefinition { this.maximumFailoverAttempts = source.maximumFailoverAttempts; } + @Override public FailoverLoadBalancerDefinition copyDefinition() { return new FailoverLoadBalancerDefinition(this); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RandomLoadBalancerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RandomLoadBalancerDefinition.java index 26005c07785..cb71ee5fdc2 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RandomLoadBalancerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RandomLoadBalancerDefinition.java @@ -38,6 +38,7 @@ public class RandomLoadBalancerDefinition extends LoadBalancerDefinition { super(source); } + @Override public RandomLoadBalancerDefinition copyDefinition() { return new RandomLoadBalancerDefinition(this); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RoundRobinLoadBalancerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RoundRobinLoadBalancerDefinition.java index f5bef1e0d0f..2fa4ec8cbf2 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RoundRobinLoadBalancerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RoundRobinLoadBalancerDefinition.java @@ -39,6 +39,7 @@ public class RoundRobinLoadBalancerDefinition extends LoadBalancerDefinition { super(source); } + @Override public RoundRobinLoadBalancerDefinition copyDefinition() { return new RoundRobinLoadBalancerDefinition(this); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java index 39d07d4a93f..c4bb99e847e 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java @@ -48,6 +48,7 @@ public class StickyLoadBalancerDefinition extends LoadBalancerDefinition { = source.correlationExpression != null ? source.correlationExpression.copyDefinition() : null; } + @Override public StickyLoadBalancerDefinition copyDefinition() { return new StickyLoadBalancerDefinition(this); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/TopicLoadBalancerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/TopicLoadBalancerDefinition.java index f786818c7a3..197830b9db2 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/TopicLoadBalancerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/TopicLoadBalancerDefinition.java @@ -38,6 +38,7 @@ public class TopicLoadBalancerDefinition extends LoadBalancerDefinition { super(source); } + @Override public TopicLoadBalancerDefinition copyDefinition() { return new TopicLoadBalancerDefinition(this); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java index 3610484d51d..b710f832156 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java @@ -51,6 +51,7 @@ public class WeightedLoadBalancerDefinition extends LoadBalancerDefinition { this.roundRobin = source.roundRobin; } + @Override public WeightedLoadBalancerDefinition copyDefinition() { return new WeightedLoadBalancerDefinition(this); } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/CustomTransformerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/CustomTransformerDefinition.java index ddd52b37d76..04fca5ecd7b 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/CustomTransformerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/CustomTransformerDefinition.java @@ -38,6 +38,20 @@ public class CustomTransformerDefinition extends TransformerDefinition { @XmlAttribute private String className; + public CustomTransformerDefinition() { + } + + protected CustomTransformerDefinition(CustomTransformerDefinition source) { + super(source); + this.ref = source.ref; + this.className = source.className; + } + + @Override + public CustomTransformerDefinition copyDefinition() { + return new CustomTransformerDefinition(this); + } + public String getRef() { return ref; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/DataFormatTransformerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/DataFormatTransformerDefinition.java index cdca86bca14..a9656a330c6 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/DataFormatTransformerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/DataFormatTransformerDefinition.java @@ -120,6 +120,19 @@ public class DataFormatTransformerDefinition extends TransformerDefinition { @XmlElement(name = "zipFile", type = ZipFileDataFormat.class) }) private DataFormatDefinition dataFormatType; + public DataFormatTransformerDefinition() { + } + + protected DataFormatTransformerDefinition(DataFormatTransformerDefinition source) { + super(source); + this.dataFormatType = source.dataFormatType != null ? source.dataFormatType.copyDefinition() : null; + } + + @Override + public DataFormatTransformerDefinition copyDefinition() { + return new DataFormatTransformerDefinition(this); + } + public DataFormatDefinition getDataFormatType() { return dataFormatType; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/EndpointTransformerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/EndpointTransformerDefinition.java index 905aceab917..7501cbc3f2e 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/EndpointTransformerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/EndpointTransformerDefinition.java @@ -40,6 +40,20 @@ public class EndpointTransformerDefinition extends TransformerDefinition { @XmlAttribute private String uri; + public EndpointTransformerDefinition() { + } + + protected EndpointTransformerDefinition(EndpointTransformerDefinition source) { + super(source); + this.ref = source.ref; + this.uri = source.uri; + } + + @Override + public EndpointTransformerDefinition copyDefinition() { + return new EndpointTransformerDefinition(this); + } + public String getRef() { return ref; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/LoadTransformerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/LoadTransformerDefinition.java index 68a2630d392..3b93b4f0d76 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/LoadTransformerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/LoadTransformerDefinition.java @@ -34,11 +34,24 @@ public class LoadTransformerDefinition extends TransformerDefinition { @XmlAttribute private String packageScan; - @XmlAttribute @Metadata(javaType = "java.lang.Boolean", defaultValue = "false") private String defaults; + public LoadTransformerDefinition() { + } + + protected LoadTransformerDefinition(LoadTransformerDefinition source) { + super(source); + this.packageScan = source.packageScan; + this.defaults = source.defaults; + } + + @Override + public LoadTransformerDefinition copyDefinition() { + return new LoadTransformerDefinition(this); + } + public String getDefaults() { return defaults; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformerDefinition.java index 8006181630a..d49cf958169 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformerDefinition.java @@ -21,6 +21,7 @@ import jakarta.xml.bind.annotation.XmlAccessorType; import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlType; +import org.apache.camel.model.CopyableDefinition; import org.apache.camel.model.InputTypeDefinition; import org.apache.camel.model.OutputTypeDefinition; import org.apache.camel.spi.DataType; @@ -45,7 +46,7 @@ import org.apache.camel.spi.Metadata; @Metadata(label = "transformation") @XmlType(name = "transformer") @XmlAccessorType(XmlAccessType.FIELD) -public abstract class TransformerDefinition { +public abstract class TransformerDefinition implements CopyableDefinition<TransformerDefinition> { @XmlAttribute private String scheme; @@ -56,6 +57,16 @@ public abstract class TransformerDefinition { @XmlAttribute private String toType; + public TransformerDefinition() { + } + + protected TransformerDefinition(TransformerDefinition source) { + this.scheme = source.scheme; + this.name = source.name; + this.fromType = source.fromType; + this.toType = source.toType; + } + public String getScheme() { return scheme; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformersDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformersDefinition.java index 907fc405db5..50ef874d2bf 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformersDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformersDefinition.java @@ -24,6 +24,8 @@ import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlElements; import jakarta.xml.bind.annotation.XmlRootElement; +import org.apache.camel.model.CopyableDefinition; +import org.apache.camel.model.ProcessorDefinitionHelper; import org.apache.camel.spi.Metadata; /** @@ -32,7 +34,7 @@ import org.apache.camel.spi.Metadata; @Metadata(label = "transformation", title = "Transformations") @XmlRootElement(name = "transformers") @XmlAccessorType(XmlAccessType.FIELD) -public class TransformersDefinition { +public class TransformersDefinition implements CopyableDefinition<TransformersDefinition> { @XmlElements({ @XmlElement(name = "dataFormatTransformer", type = DataFormatTransformerDefinition.class), @@ -41,6 +43,18 @@ public class TransformersDefinition { @XmlElement(name = "customTransformer", type = CustomTransformerDefinition.class) }) private List<TransformerDefinition> transformers; + public TransformersDefinition() { + } + + protected TransformersDefinition(TransformersDefinition source) { + this.transformers = ProcessorDefinitionHelper.deepCopyDefinitions(source.transformers); + } + + @Override + public TransformersDefinition copyDefinition() { + return new TransformersDefinition(this); + } + /** * The configured transformers */ @@ -51,5 +65,4 @@ public class TransformersDefinition { public List<TransformerDefinition> getTransformers() { return transformers; } - } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/CustomValidatorDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/CustomValidatorDefinition.java index bd2b6736f64..5bccfc5d307 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/CustomValidatorDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/CustomValidatorDefinition.java @@ -42,6 +42,20 @@ public class CustomValidatorDefinition extends ValidatorDefinition { return ref; } + public CustomValidatorDefinition() { + } + + protected CustomValidatorDefinition(CustomValidatorDefinition source) { + super(source); + this.ref = source.ref; + this.className = source.className; + } + + @Override + public CustomValidatorDefinition copyDefinition() { + return null; + } + /** * Set a bean reference of the {@link Validator} */ diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/EndpointValidatorDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/EndpointValidatorDefinition.java index 458b54d828a..c8eab4cd60b 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/EndpointValidatorDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/EndpointValidatorDefinition.java @@ -42,6 +42,20 @@ public class EndpointValidatorDefinition extends ValidatorDefinition { @XmlAttribute private String uri; + public EndpointValidatorDefinition() { + } + + public EndpointValidatorDefinition(EndpointValidatorDefinition source) { + super(source); + this.ref = source.ref; + this.uri = source.ref; + } + + @Override + public EndpointValidatorDefinition copyDefinition() { + return new EndpointValidatorDefinition(this); + } + public String getRef() { return ref; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/PredicateValidatorDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/PredicateValidatorDefinition.java index 5fc20ce06bb..d191827f0bc 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/PredicateValidatorDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/PredicateValidatorDefinition.java @@ -41,6 +41,19 @@ public class PredicateValidatorDefinition extends ValidatorDefinition { @XmlElementRef private ExpressionDefinition expression; + public PredicateValidatorDefinition() { + } + + protected PredicateValidatorDefinition(PredicateValidatorDefinition source) { + super(source); + this.expression = source.expression != null ? source.expression.copyDefinition() : null; + } + + @Override + public ValidatorDefinition copyDefinition() { + return new PredicateValidatorDefinition(this); + } + public ExpressionDefinition getExpression() { return expression; } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorDefinition.java index 8e81a61bc77..f16b3b920dd 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorDefinition.java @@ -21,6 +21,7 @@ import jakarta.xml.bind.annotation.XmlAccessorType; import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlType; +import org.apache.camel.model.CopyableDefinition; import org.apache.camel.model.InputTypeDefinition; import org.apache.camel.model.OutputTypeDefinition; import org.apache.camel.spi.DataType; @@ -40,7 +41,7 @@ import org.apache.camel.spi.Validator; @Metadata(label = "validation") @XmlType(name = "validator") @XmlAccessorType(XmlAccessType.FIELD) -public abstract class ValidatorDefinition { +public abstract class ValidatorDefinition implements CopyableDefinition<ValidatorDefinition> { @XmlAttribute private String type; @@ -49,6 +50,13 @@ public abstract class ValidatorDefinition { return type; } + public ValidatorDefinition() { + } + + protected ValidatorDefinition(ValidatorDefinition source) { + this.type = source.type; + } + /** * Set the data type name. If you specify 'xml:XYZ', the validator will be picked up if message type is 'xml:XYZ'. * If you specify just 'xml', the validator matches with all of 'xml' message type like 'xml:ABC' or 'xml:DEF'. diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorsDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorsDefinition.java index be66537eb0a..1831b119333 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorsDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorsDefinition.java @@ -24,6 +24,7 @@ import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlElements; import jakarta.xml.bind.annotation.XmlRootElement; +import org.apache.camel.model.ProcessorDefinitionHelper; import org.apache.camel.spi.Metadata; /** @@ -40,6 +41,13 @@ public class ValidatorsDefinition { @XmlElement(name = "customValidator", type = CustomValidatorDefinition.class) }) private List<ValidatorDefinition> validators; + public ValidatorsDefinition() { + } + + protected ValidatorsDefinition(ValidatorsDefinition source) { + this.validators = ProcessorDefinitionHelper.deepCopyDefinitions(source.validators); + } + /** * The configured transformers */ diff --git a/core/camel-core/src/test/java/org/apache/camel/model/RouteTemplateDefinitionTest.java b/core/camel-core/src/test/java/org/apache/camel/model/RouteTemplateDefinitionTest.java index 0b8d0130f89..20beee2cd94 100644 --- a/core/camel-core/src/test/java/org/apache/camel/model/RouteTemplateDefinitionTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/model/RouteTemplateDefinitionTest.java @@ -62,8 +62,7 @@ class RouteTemplateDefinitionTest { } private static final class CopyableDefinitionProcessDefinition - extends ProcessorDefinition<CopyableDefinitionProcessDefinition> - implements CopyableDefinition { + extends ProcessorDefinition<CopyableDefinitionProcessDefinition> { public CopyableDefinitionProcessDefinition() { setId(randomUUID().toString());
