diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java index d318560480..ea776f3a6c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java @@ -103,21 +103,22 @@ static boolean getBooleanFromSystemPropsOrDefault(String propertyName, boolean d return defaultValue; } else { property = property.trim().toLowerCase(); - switch (property) { - case "true": - return true; - case "false": - return false; - default: - return defaultValue; - } + return switch (property) { + case "true" -> true; + case "false" -> false; + default -> defaultValue; + }; } } public static Class> getFirstTypeArgumentFromExtendedClass(Class> clazz) { + return getTypeArgumentFromExtendedClassByIndex(clazz, 0); + } + + public static Class> getTypeArgumentFromExtendedClassByIndex(Class> clazz, int index) { try { Type type = clazz.getGenericSuperclass(); - return (Class>) ((ParameterizedType) type).getActualTypeArguments()[0]; + return (Class>) ((ParameterizedType) type).getActualTypeArguments()[index]; } catch (Exception e) { throw new RuntimeException(GENERIC_PARAMETER_TYPE_ERROR_PREFIX + clazz.getSimpleName() @@ -186,27 +187,31 @@ private static Optional extends Class>> extractType(Class> clazz, public static Class> getFirstTypeArgumentFromSuperClassOrInterface(Class> clazz, Class> expectedImplementedInterface) { + return getTypeArgumentFromSuperClassOrInterfaceByIndex(clazz, expectedImplementedInterface, 0); + } + + public static Class> getTypeArgumentFromSuperClassOrInterfaceByIndex(Class> clazz, + Class> expectedImplementedInterface, int index) { // first check super class if it exists try { final Class> superclass = clazz.getSuperclass(); if (!superclass.equals(Object.class)) { try { - return getFirstTypeArgumentFromExtendedClass(clazz); + return getTypeArgumentFromExtendedClassByIndex(clazz, index); } catch (Exception e) { // try interfaces try { - return getFirstTypeArgumentFromInterface(clazz, expectedImplementedInterface); + return getTypeArgumentFromInterfaceByIndex(clazz, expectedImplementedInterface, index); } catch (Exception ex) { // try on the parent - return getFirstTypeArgumentFromSuperClassOrInterface(superclass, - expectedImplementedInterface); + return getTypeArgumentFromSuperClassOrInterfaceByIndex(superclass, + expectedImplementedInterface, index); } } } - return getFirstTypeArgumentFromInterface(clazz, expectedImplementedInterface); + return getTypeArgumentFromInterfaceByIndex(clazz, expectedImplementedInterface, index); } catch (Exception e) { - throw new OperatorException( - GENERIC_PARAMETER_TYPE_ERROR_PREFIX + clazz.getSimpleName(), e); + throw new OperatorException(GENERIC_PARAMETER_TYPE_ERROR_PREFIX + clazz.getSimpleName(), e); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java index 98f2346577..9897ee71e2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java @@ -2,13 +2,14 @@ import io.fabric8.kubernetes.api.model.GenericKubernetesResource; import io.fabric8.kubernetes.api.model.HasMetadata; +import io.javaoperatorsdk.operator.api.config.Utils; import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; import io.javaoperatorsdk.operator.processing.GroupVersionKind; public class GenericKubernetesDependentResource
extends KubernetesDependentResource ) Utils.getFirstTypeArgumentFromExtendedClass(getClass());
+ }
+
+ @SuppressWarnings("unused")
public GroupVersionKind getGroupVersionKind() {
return groupVersionKind;
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java
index 2fe4d2bea6..49f8faee04 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java
@@ -9,9 +9,11 @@
import org.slf4j.LoggerFactory;
import io.fabric8.kubernetes.api.model.HasMetadata;
+import io.fabric8.kubernetes.api.model.Namespaced;
import io.fabric8.kubernetes.client.dsl.Resource;
import io.javaoperatorsdk.operator.OperatorException;
import io.javaoperatorsdk.operator.ReconcilerUtils;
+import io.javaoperatorsdk.operator.api.config.Utils;
import io.javaoperatorsdk.operator.api.config.dependent.Configured;
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.Constants;
@@ -36,28 +38,36 @@ public abstract class KubernetesDependentResource getPrimaryResourceType() {
+ return (Class ) Utils.getTypeArgumentFromExtendedClassByIndex(getClass(), 1);
+ }
+
@Override
public void configureWith(KubernetesDependentResourceConfig