This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new d7d4766e9f3 (chores) camel-support: consolidate duplicated code
d7d4766e9f3 is described below
commit d7d4766e9f32484dd112861ce05f66771480b952
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Fri Mar 24 15:52:24 2023 +0100
(chores) camel-support: consolidate duplicated code
---
.../camel/support/PropertyBindingSupport.java | 124 ++++++++-------------
1 file changed, 48 insertions(+), 76 deletions(-)
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
index 48fbad00cb3..22b332c5dde 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
@@ -371,20 +371,8 @@ public final class PropertyBindingSupport {
Method method = findBestSetterMethod(camelContext, newClass, key,
fluentBuilder, allowPrivateSetter, ignoreCase);
if (method != null) {
Class<?> parameterType = method.getParameterTypes()[0];
- Object obj = null;
- // special for properties/map/list/array
- if (Properties.class.isAssignableFrom(parameterType)) {
- obj = new Properties();
- } else if (Map.class.isAssignableFrom(parameterType)) {
- obj = new LinkedHashMap<>();
- } else if (Collection.class.isAssignableFrom(parameterType)) {
- obj = new ArrayList<>();
- } else if (parameterType.isArray()) {
- obj = Array.newInstance(parameterType.getComponentType(), 0);
- }
- if (obj == null &&
org.apache.camel.util.ObjectHelper.hasDefaultPublicNoArgConstructor(parameterType))
{
- obj = camelContext.getInjector().newInstance(parameterType);
- }
+ Object obj = getObjectForType(camelContext, parameterType);
+
if (obj != null) {
org.apache.camel.support.ObjectHelper.invokeMethod(method,
newTarget, obj);
answer = obj;
@@ -410,20 +398,7 @@ public final class PropertyBindingSupport {
parameterType = ((PropertyConfigurerGetter)
configurer).getOptionType(key, true);
}
if (parameterType != null) {
- Object obj = null;
- // special for properties/map/list/array
- if (Properties.class.isAssignableFrom(parameterType)) {
- obj = new Properties();
- } else if (Map.class.isAssignableFrom(parameterType)) {
- obj = new LinkedHashMap<>();
- } else if (Collection.class.isAssignableFrom(parameterType)) {
- obj = new ArrayList<>();
- } else if (parameterType.isArray()) {
- obj = Array.newInstance(parameterType.getComponentType(), 0);
- }
- if (obj == null &&
org.apache.camel.util.ObjectHelper.hasDefaultPublicNoArgConstructor(parameterType))
{
- obj = camelContext.getInjector().newInstance(parameterType);
- }
+ Object obj = getObjectForType(camelContext, parameterType);
if (obj != null) {
boolean hit = configurer.configure(camelContext, newTarget,
undashKey(key), obj, ignoreCase);
if (hit) {
@@ -434,6 +409,41 @@ public final class PropertyBindingSupport {
return answer;
}
+ private static Object getObjectForCollectionType(Class<?> type) {
+ if (Properties.class.isAssignableFrom(type)) {
+ return new Properties();
+ } else if (Map.class.isAssignableFrom(type)) {
+ return new LinkedHashMap<>();
+ } else if (Collection.class.isAssignableFrom(type)) {
+ return new ArrayList<>();
+ } else if (type.isArray()) {
+ return Array.newInstance(type.getComponentType(), 0);
+ }
+
+ return null;
+ }
+
+ private static Object getObjectForCollectionType(Class<?> type, String
errorMessage) {
+ Object ret = getObjectForCollectionType(type);
+
+ // not a map or list
+ if (ret == null) {
+ throw new IllegalArgumentException(errorMessage);
+ }
+
+ return ret;
+ }
+
+ private static Object getObjectForType(CamelContext camelContext, Class<?>
parameterType) {
+ // special for properties/map/list/array
+ Object obj = getObjectForCollectionType(parameterType);
+
+ if (obj == null &&
org.apache.camel.util.ObjectHelper.hasDefaultPublicNoArgConstructor(parameterType))
{
+ obj = camelContext.getInjector().newInstance(parameterType);
+ }
+ return obj;
+ }
+
private static boolean doSetPropertyValue(
CamelContext camelContext, Object target, String name, Object
value,
boolean ignoreCase, boolean mandatory,
@@ -561,15 +571,7 @@ public final class PropertyBindingSupport {
if (getter != null) {
// what type does it have
Class<?> returnType = getter.getReturnType();
- if (Properties.class.isAssignableFrom(returnType)) {
- obj = new Properties();
- } else if (Map.class.isAssignableFrom(returnType)) {
- obj = new LinkedHashMap<>();
- } else if (Collection.class.isAssignableFrom(returnType)) {
- obj = new ArrayList<>();
- } else if (returnType.isArray()) {
- obj = Array.newInstance(returnType.getComponentType(), 0);
- }
+ obj = getObjectForCollectionType(returnType);
} else {
// fallback as map type
obj = new LinkedHashMap<>();
@@ -660,15 +662,8 @@ public final class PropertyBindingSupport {
if (returnType == null) {
return false;
}
- if (Properties.class.isAssignableFrom(returnType)) {
- obj = new Properties();
- } else if (Map.class.isAssignableFrom(returnType)) {
- obj = new LinkedHashMap<>();
- } else if (Collection.class.isAssignableFrom(returnType)) {
- obj = new ArrayList<>();
- } else if (returnType.isArray()) {
- obj = Array.newInstance(returnType.getComponentType(), 0);
- }
+ obj = getObjectForCollectionType(returnType);
+
if (obj != null) {
// set
boolean hit = configurer.configure(camelContext, target,
undashKey, obj, ignoreCase);
@@ -916,21 +911,10 @@ public final class PropertyBindingSupport {
if (answer == null) {
if (lookupKey != null) {
- if (Properties.class.isAssignableFrom(type)) {
- answer = new Properties();
- } else if (Map.class.isAssignableFrom(type)) {
- answer = new LinkedHashMap<>();
- } else if (Collection.class.isAssignableFrom(type)) {
- answer = new ArrayList<>();
- } else if (type.isArray()) {
- answer = Array.newInstance(type.getComponentType(), 0);
- } else {
- // not a map or list
- throw new IllegalArgumentException(
- "Cannot set property: " + property
- + " as either a
Map/List/array because target bean is not a Map, List or array type: "
- + target);
- }
+ answer = getObjectForCollectionType(type, "Cannot set
property: " + property
+ + " as either a
Map/List/array because target bean is not a Map, List or array type: "
+ + target);
+
boolean hit = configurer.configure(context, target, undashKey,
answer, ignoreCase);
if (!hit) {
throw new IllegalArgumentException(
@@ -1047,21 +1031,9 @@ public final class PropertyBindingSupport {
if (answer == null) {
if (lookupKey != null) {
- if (Properties.class.isAssignableFrom(type)) {
- answer = new Properties();
- } else if (Map.class.isAssignableFrom(type)) {
- answer = new LinkedHashMap<>();
- } else if (Collection.class.isAssignableFrom(type)) {
- answer = new ArrayList<>();
- } else if (type.isArray()) {
- answer = Array.newInstance(type.getComponentType(), 0);
- } else {
- // not a map or list
- throw new IllegalArgumentException(
- "Cannot set property: " + property
- + " as either a
Map/List/array because target bean is not a Map, List or array type: "
- + target);
- }
+ answer = getObjectForCollectionType(type, "Cannot set
property: " + property
+ + " as either a
Map/List/array because target bean is not a Map, List or array type: "
+ + target);
boolean hit = false;
try {
hit = introspection.setProperty(context, target, key,
answer);