diff --git a/extensions/camel-k/model-v1/src/main/java/io/fabric8/camelk/CamelKV1ResourceMappingProvider.java b/extensions/camel-k/model-v1/src/main/java/io/fabric8/camelk/CamelKV1ResourceMappingProvider.java deleted file mode 100644 index af639f4c7ff..00000000000 --- a/extensions/camel-k/model-v1/src/main/java/io/fabric8/camelk/CamelKV1ResourceMappingProvider.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.camelk; - -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; -import io.fabric8.kubernetes.api.model.KubernetesResource; - -import java.util.HashMap; -import java.util.Map; - -public class CamelKV1ResourceMappingProvider implements KubernetesResourceMappingProvider { - - public final Map> mappings = new HashMap<>(); - - public CamelKV1ResourceMappingProvider() { - mappings.put("camel.apahce.org/v1#Build", io.fabric8.camelk.v1.Build.class); - mappings.put("camel.apahce.org/v1#CamelCatalog", io.fabric8.camelk.v1.CamelCatalog.class); - mappings.put("camel.apahce.org/v1#Integration", io.fabric8.camelk.v1.Integration.class); - mappings.put("camel.apahce.org/v1#IntegrationKit", io.fabric8.camelk.v1.IntegrationKit.class); - mappings.put("camel.apahce.org/v1#IntegrationPlatform", io.fabric8.camelk.v1.IntegrationPlatform.class); - } - - public Map> getMappings() { - return mappings; - } -} diff --git a/extensions/camel-k/model-v1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider b/extensions/camel-k/model-v1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider deleted file mode 100644 index 9876591d77b..00000000000 --- a/extensions/camel-k/model-v1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (C) 2018 Red Hat inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -io.fabric8.camelk.CamelKV1ResourceMappingProvider \ No newline at end of file diff --git a/extensions/camel-k/model-v1alpha1/src/main/java/io/fabric8/camelk/CamelKV1alpha1ResourceMappingProvider.java b/extensions/camel-k/model-v1alpha1/src/main/java/io/fabric8/camelk/CamelKV1alpha1ResourceMappingProvider.java deleted file mode 100644 index 20aede72305..00000000000 --- a/extensions/camel-k/model-v1alpha1/src/main/java/io/fabric8/camelk/CamelKV1alpha1ResourceMappingProvider.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.camelk; - -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; -import io.fabric8.kubernetes.api.model.KubernetesResource; - -import java.util.HashMap; -import java.util.Map; - -public class CamelKV1alpha1ResourceMappingProvider implements KubernetesResourceMappingProvider { - - public final Map> mappings = new HashMap<>(); - - public CamelKV1alpha1ResourceMappingProvider() { - mappings.put("camel.apache.org/v1alpha1#Kamelet", io.fabric8.camelk.v1alpha1.Kamelet.class); - } - - public Map> getMappings() { - return mappings; - } -} diff --git a/extensions/camel-k/model-v1alpha1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider b/extensions/camel-k/model-v1alpha1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider deleted file mode 100644 index 5179ef1ef8c..00000000000 --- a/extensions/camel-k/model-v1alpha1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (C) 2018 Red Hat inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -io.fabric8.camelk.CamelKV1alpha1ResourceMappingProvider diff --git a/extensions/chaosmesh/model/src/main/java/io/fabric8/chaosmesh/api/model/ChaosMeshResourceMappingProvider.java b/extensions/chaosmesh/model/src/main/java/io/fabric8/chaosmesh/api/model/ChaosMeshResourceMappingProvider.java deleted file mode 100644 index 833169b5fde..00000000000 --- a/extensions/chaosmesh/model/src/main/java/io/fabric8/chaosmesh/api/model/ChaosMeshResourceMappingProvider.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.chaosmesh.api.model; - -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; -import io.fabric8.kubernetes.api.model.KubernetesResource; - -import java.util.HashMap; -import java.util.Map; - -public class ChaosMeshResourceMappingProvider implements KubernetesResourceMappingProvider { - - public final Map> mappings = new HashMap<>(); - - public ChaosMeshResourceMappingProvider() { - mappings.put("chaos-mesh.org/v1alpha1#IoChaos", io.fabric8.chaosmesh.v1alpha1.IoChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#KernelChaos", io.fabric8.chaosmesh.v1alpha1.KernelChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#NetworkChaos", io.fabric8.chaosmesh.v1alpha1.NetworkChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#PodChaos", io.fabric8.chaosmesh.v1alpha1.PodChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#PodIoChaos", io.fabric8.chaosmesh.v1alpha1.PodIoChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#PodNetworkChaos", io.fabric8.chaosmesh.v1alpha1.PodNetworkChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#StressChaos", io.fabric8.chaosmesh.v1alpha1.StressChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#TimeChaos", io.fabric8.chaosmesh.v1alpha1.TimeChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#JVMChaos", io.fabric8.chaosmesh.v1alpha1.JVMChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#HTTPChaos", io.fabric8.chaosmesh.v1alpha1.HTTPChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#DNSChaos", io.fabric8.chaosmesh.v1alpha1.DNSChaos.class); - mappings.put("chaos-mesh.org/v1alpha1#AwsChaos", io.fabric8.chaosmesh.v1alpha1.AwsChaos.class); - } - - public Map> getMappings() { - return mappings; - } -} diff --git a/extensions/chaosmesh/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider b/extensions/chaosmesh/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider deleted file mode 100644 index e1a9b7f33d2..00000000000 --- a/extensions/chaosmesh/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider +++ /dev/null @@ -1,17 +0,0 @@ -# -# Copyright (C) 2018 Red Hat inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -io.fabric8.chaosmesh.api.model.ChaosMeshResourceMappingProvider diff --git a/extensions/knative/model/src/main/java/io/fabric8/knative/api/model/KnativeResourceMappingProvider.java b/extensions/knative/model/src/main/java/io/fabric8/knative/api/model/KnativeResourceMappingProvider.java deleted file mode 100644 index 11dc6302df8..00000000000 --- a/extensions/knative/model/src/main/java/io/fabric8/knative/api/model/KnativeResourceMappingProvider.java +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.knative.api.model; - -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; -import io.fabric8.kubernetes.api.model.KubernetesResource; -import java.util.HashMap; -import java.util.Map; - -public class KnativeResourceMappingProvider implements KubernetesResourceMappingProvider { - - public final Map> mappings = new HashMap<>(); - - public KnativeResourceMappingProvider() { - mappings.put("serving.knative.dev/v1#Configuration", io.fabric8.knative.serving.v1.Configuration.class); - mappings.put("serving.knative.dev/v1#Revision", io.fabric8.knative.serving.v1.Revision.class); - mappings.put("serving.knative.dev/v1#Service", io.fabric8.knative.serving.v1.Service.class); - mappings.put("serving.knative.dev/v1#Route", io.fabric8.knative.serving.v1.Route.class); - - mappings.put("eventing.knative.dev/v1#Broker", io.fabric8.knative.eventing.v1.Broker.class); - mappings.put("eventing.knative.dev/v1#Channel", io.fabric8.knative.messaging.v1.Channel.class); - mappings.put("eventing.knative.dev/v1beta1#EventType", io.fabric8.knative.eventing.v1beta1.EventType.class); - mappings.put("eventing.knative.dev/v1#Trigger", io.fabric8.knative.eventing.v1.Trigger.class); - mappings.put("eventing.knative.dev/v1#Subscription", io.fabric8.knative.messaging.v1.Subscription.class); - - mappings.put("messaging.knative.dev/v1#InMemoryChannel", io.fabric8.knative.messaging.v1.InMemoryChannel.class); - mappings.put("messaging.knative.dev/v1#Sequence", io.fabric8.knative.flows.v1.Sequence.class); - mappings.put("sources.knative.dev/v1#PingSource", io.fabric8.knative.sources.v1.PingSource.class); - mappings.put("sources.knative.dev/v1#ContainerSource", io.fabric8.knative.sources.v1.ContainerSource.class); - mappings.put("sources.knative.dev/v1#ApiServerSource", io.fabric8.knative.sources.v1.ApiServerSource.class); - mappings.put("sources.knative.dev/v1#SinkBinding", io.fabric8.knative.sources.v1.SinkBinding.class); - mappings.put("sources.knative.dev/v1alpha1#AwsSqsSource", io.fabric8.knative.eventing.contrib.awssqs.v1alpha1.AwsSqsSource.class); - mappings.put("sources.knative.dev/v1alpha1#CouchDbSource", io.fabric8.knative.eventing.contrib.couchdb.v1alpha1.CouchDbSource.class); - mappings.put("sources.knative.dev/v1alpha1#GitHubSource", io.fabric8.knative.eventing.contrib.github.v1alpha1.GitHubSource.class); - mappings.put("bindings.knative.dev/v1alpha1#GitHubBinding", io.fabric8.knative.eventing.contrib.github.v1alpha1.GitHubBinding.class); - mappings.put("sources.knative.dev/v1alpha1#GitLabSource", io.fabric8.knative.eventing.contrib.gitlab.v1alpha1.GitLabSource.class); - mappings.put("bindings.knative.dev/v1alpha1#GitLabBinding", io.fabric8.knative.eventing.contrib.gitlab.v1alpha1.GitLabBinding.class); - mappings.put("sources.knative.dev/v1alpha1#PrometheusSource", io.fabric8.knative.eventing.contrib.prometheus.v1alpha1.PrometheusSource.class); - mappings.put("sources.knative.dev/v1beta1#KafkaSource", io.fabric8.knative.eventing.contrib.kafka.v1beta1.KafkaSource.class); - mappings.put("messaging.knative.dev/v1beta1#KafkaChannel", io.fabric8.knative.eventing.contrib.kafka.v1beta1.KafkaChannel.class); - mappings.put("bindings.knative.dev/v1beta11#KafkaBinding", io.fabric8.knative.eventing.contrib.kafka.v1beta1.KafkaBinding.class); - } - - public Map> getMappings() { - return mappings; - } -} diff --git a/extensions/knative/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider b/extensions/knative/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider deleted file mode 100644 index 2a62deba54a..00000000000 --- a/extensions/knative/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider +++ /dev/null @@ -1,17 +0,0 @@ -# -# Copyright (C) 2018 Red Hat inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -io.fabric8.knative.api.model.KnativeResourceMappingProvider diff --git a/extensions/service-catalog/model/src/main/java/io/fabric8/servicecatalog/api/model/ServiceCatalogResourceMappingProvider.java b/extensions/service-catalog/model/src/main/java/io/fabric8/servicecatalog/api/model/ServiceCatalogResourceMappingProvider.java deleted file mode 100644 index c331cb50961..00000000000 --- a/extensions/service-catalog/model/src/main/java/io/fabric8/servicecatalog/api/model/ServiceCatalogResourceMappingProvider.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.servicecatalog.api.model; - -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; -import io.fabric8.kubernetes.api.model.KubernetesResource; - -import java.util.HashMap; -import java.util.Map; - -public class ServiceCatalogResourceMappingProvider implements KubernetesResourceMappingProvider { - - public final Map> mappings = new HashMap<>(); - - public ServiceCatalogResourceMappingProvider() { - mappings.put("servicecatalog.k8s.io/v1beta1#ClusterServiceBroker", ClusterServiceBroker.class); - mappings.put("servicecatalog.k8s.io/v1beta1#ClusterServiceClass", ClusterServiceClass.class); - mappings.put("servicecatalog.k8s.io/v1beta1#ClusterServicePlan", ClusterServicePlan.class); - mappings.put("servicecatalog.k8s.io/v1beta1#ServiceBroker", ServiceBroker.class); - mappings.put("servicecatalog.k8s.io/v1beta1#ServiceBinding", ServiceBinding.class); - mappings.put("servicecatalog.k8s.io/v1beta1#ServiceInstance", ServiceInstance.class); - mappings.put("servicecatalog.k8s.io/v1beta1#ServiceClass", ServiceClass.class); - mappings.put("servicecatalog.k8s.io/v1beta1#ServicePlan", ServicePlan.class); - } - - public Map> getMappings() { - return mappings; - } -} diff --git a/extensions/service-catalog/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider b/extensions/service-catalog/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider deleted file mode 100644 index bac1b8432a1..00000000000 --- a/extensions/service-catalog/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider +++ /dev/null @@ -1,17 +0,0 @@ -# -# Copyright (C) 2018 Red Hat inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -io.fabric8.servicecatalog.api.model.ServiceCatalogResourceMappingProvider diff --git a/extensions/tekton/model-triggers/src/main/java/io/fabric8/tekton/TektonTriggersResourceMappingProvider.java b/extensions/tekton/model-triggers/src/main/java/io/fabric8/tekton/TektonTriggersResourceMappingProvider.java deleted file mode 100644 index a9cafda2d73..00000000000 --- a/extensions/tekton/model-triggers/src/main/java/io/fabric8/tekton/TektonTriggersResourceMappingProvider.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.tekton; - -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; -import io.fabric8.kubernetes.api.model.KubernetesResource; - -import java.util.HashMap; -import java.util.Map; - -public class TektonTriggersResourceMappingProvider implements KubernetesResourceMappingProvider { - - public final Map> mappings = new HashMap<>(); - - public TektonTriggersResourceMappingProvider() { - mappings.put("triggers.tekton.dev/v1alpha1#TriggerTemplate", io.fabric8.tekton.triggers.v1alpha1.TriggerTemplate.class); - mappings.put("triggers.tekton.dev/v1alpha1#TriggerBinding", io.fabric8.tekton.triggers.v1alpha1.TriggerBinding.class); - mappings.put("triggers.tekton.dev/v1alpha1#EventListener", io.fabric8.tekton.triggers.v1alpha1.EventListener.class); - mappings.put("triggers.tekton.dev/v1alpha1#ClusterTriggerBinding", io.fabric8.tekton.triggers.v1alpha1.ClusterTriggerBinding.class); - mappings.put("triggers.tekton.dev/v1alpha1#Trigger", io.fabric8.tekton.triggers.v1alpha1.Trigger.class); - mappings.put("triggers.tekton.dev/v1alpha1#ClusterInterceptor", io.fabric8.tekton.triggers.v1alpha1.ClusterInterceptor.class); - } - - public Map> getMappings() { - return mappings; - } -} diff --git a/extensions/tekton/model-triggers/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider b/extensions/tekton/model-triggers/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider deleted file mode 100644 index 9f10785fd56..00000000000 --- a/extensions/tekton/model-triggers/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (C) 2018 Red Hat inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -io.fabric8.tekton.TektonTriggersResourceMappingProvider diff --git a/extensions/tekton/model-v1alpha1/src/main/java/io/fabric8/tekton/TektonV1alpha1ResourceMappingProvider.java b/extensions/tekton/model-v1alpha1/src/main/java/io/fabric8/tekton/TektonV1alpha1ResourceMappingProvider.java deleted file mode 100644 index 4686f64d580..00000000000 --- a/extensions/tekton/model-v1alpha1/src/main/java/io/fabric8/tekton/TektonV1alpha1ResourceMappingProvider.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.tekton; - -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; -import io.fabric8.kubernetes.api.model.KubernetesResource; - -import java.util.HashMap; -import java.util.Map; - -public class TektonV1alpha1ResourceMappingProvider implements KubernetesResourceMappingProvider { - - public final Map> mappings = new HashMap<>(); - - public TektonV1alpha1ResourceMappingProvider() { - mappings.put("tekton.dev/v1alpha1#Condition", io.fabric8.tekton.pipeline.v1alpha1.Condition.class); - mappings.put("tekton.dev/v1alpha1#Pipeline", io.fabric8.tekton.pipeline.v1alpha1.Pipeline.class); - mappings.put("tekton.dev/v1alpha1#PipelineRun", io.fabric8.tekton.pipeline.v1alpha1.PipelineRun.class); - mappings.put("tekton.dev/v1alpha1#Task", io.fabric8.tekton.pipeline.v1alpha1.Task.class); - mappings.put("tekton.dev/v1alpha1#TaskRun", io.fabric8.tekton.pipeline.v1alpha1.TaskRun.class); - mappings.put("tekton.dev/v1alpha1#ClusterTask", io.fabric8.tekton.pipeline.v1alpha1.ClusterTask.class); - mappings.put("tekton.dev/v1alpha1#PipelineResource", io.fabric8.tekton.resource.v1alpha1.PipelineResource.class); - } - - public Map> getMappings() { - return mappings; - } -} diff --git a/extensions/tekton/model-v1alpha1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider b/extensions/tekton/model-v1alpha1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider deleted file mode 100644 index 2605aaeccae..00000000000 --- a/extensions/tekton/model-v1alpha1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (C) 2018 Red Hat inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -io.fabric8.tekton.TektonV1alpha1ResourceMappingProvider diff --git a/extensions/tekton/model-v1beta1/src/main/java/io/fabric8/tekton/TektonV1beta1ResourceMappingProvider.java b/extensions/tekton/model-v1beta1/src/main/java/io/fabric8/tekton/TektonV1beta1ResourceMappingProvider.java deleted file mode 100644 index 708ed9c4bba..00000000000 --- a/extensions/tekton/model-v1beta1/src/main/java/io/fabric8/tekton/TektonV1beta1ResourceMappingProvider.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.tekton; - -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; -import io.fabric8.kubernetes.api.model.KubernetesResource; - -import java.util.HashMap; -import java.util.Map; - -public class TektonV1beta1ResourceMappingProvider implements KubernetesResourceMappingProvider { - - public final Map> mappings = new HashMap<>(); - - public TektonV1beta1ResourceMappingProvider() { - mappings.put("tekton.dev/v1beta1#Pipeline", io.fabric8.tekton.pipeline.v1beta1.Pipeline.class); - mappings.put("tekton.dev/v1beta1#PipelineRun", io.fabric8.tekton.pipeline.v1beta1.PipelineRun.class); - mappings.put("tekton.dev/v1beta1#Task", io.fabric8.tekton.pipeline.v1beta1.Task.class); - mappings.put("tekton.dev/v1beta1#TaskRun", io.fabric8.tekton.pipeline.v1beta1.TaskRun.class); - mappings.put("tekton.dev/v1beta1#ClusterTask", io.fabric8.tekton.pipeline.v1beta1.ClusterTask.class); - } - - public Map> getMappings() { - return mappings; - }} diff --git a/extensions/tekton/model-v1beta1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider b/extensions/tekton/model-v1beta1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider deleted file mode 100644 index 270bc6139d0..00000000000 --- a/extensions/tekton/model-v1beta1/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (C) 2018 Red Hat inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -io.fabric8.tekton.TektonV1beta1ResourceMappingProvider diff --git a/extensions/volumesnapshot/model/src/main/java/io/fabric8/volumesnapshot/api/model/VolumeSnapshotResourceMappingProvider.java b/extensions/volumesnapshot/model/src/main/java/io/fabric8/volumesnapshot/api/model/VolumeSnapshotResourceMappingProvider.java deleted file mode 100644 index 6d17878f2c8..00000000000 --- a/extensions/volumesnapshot/model/src/main/java/io/fabric8/volumesnapshot/api/model/VolumeSnapshotResourceMappingProvider.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.volumesnapshot.api.model; - -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; -import io.fabric8.kubernetes.api.model.KubernetesResource; - -import java.util.HashMap; -import java.util.Map; - -public class VolumeSnapshotResourceMappingProvider implements KubernetesResourceMappingProvider { - - public final Map> mappings = new HashMap<>(); - - public VolumeSnapshotResourceMappingProvider() { - mappings.put("snapshot.storage.k8s.io/v1#VolumeSnapshot", VolumeSnapshot.class); - mappings.put("snapshot.storage.k8s.io/v1#VolumeSnapshotClass", VolumeSnapshotClass.class); - mappings.put("snapshot.storage.k8s.io/v1#VolumeSnapshotContent", VolumeSnapshotContent.class); - } - - public Map> getMappings() { - return mappings; - } -} diff --git a/extensions/volumesnapshot/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider b/extensions/volumesnapshot/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider deleted file mode 100644 index 846b17f7eac..00000000000 --- a/extensions/volumesnapshot/model/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider +++ /dev/null @@ -1,17 +0,0 @@ -# -# Copyright (C) 2018 Red Hat inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -io.fabric8.volumesnapshot.api.model.VolumeSnapshotResourceMappingProvider diff --git a/kubernetes-model-generator/kubernetes-model-core/pom.xml b/kubernetes-model-generator/kubernetes-model-core/pom.xml index 70867f65fed..22cebccf67e 100644 --- a/kubernetes-model-generator/kubernetes-model-core/pom.xml +++ b/kubernetes-model-generator/kubernetes-model-core/pom.xml @@ -116,6 +116,10 @@ io.fabric8 kubernetes-model-common + + org.jboss + jandex + org.mockito mockito-core diff --git a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/api/KubernetesResourceMappingProvider.java b/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/api/KubernetesResourceMappingProvider.java deleted file mode 100644 index 3c49354e90a..00000000000 --- a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/api/KubernetesResourceMappingProvider.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.kubernetes.api; - -import io.fabric8.kubernetes.api.model.KubernetesResource; - -import java.util.Map; - -public interface KubernetesResourceMappingProvider { - - Map> getMappings(); -} diff --git a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/api/model/KubernetesList.java b/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/api/model/KubernetesList.java index e5429024308..3b670077f7e 100644 --- a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/api/model/KubernetesList.java +++ b/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/api/model/KubernetesList.java @@ -19,15 +19,14 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import io.sundr.builder.annotations.Buildable; - import io.fabric8.kubernetes.model.annotation.Generated; +import io.fabric8.kubernetes.model.annotation.Group; +import io.fabric8.kubernetes.model.annotation.Kind; +import io.fabric8.kubernetes.model.annotation.Version; +import io.sundr.builder.annotations.Buildable; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; - /** * * @@ -35,42 +34,30 @@ @JsonInclude(JsonInclude.Include.NON_NULL) @Generated("org.jsonschema2pojo") @JsonPropertyOrder({ - "apiVersion", - "kind", - "metadata", - "items", + "apiVersion", + "kind", + "metadata", + "items", }) +@Version("v1") +@Group("") +@Kind("List") @JsonDeserialize(using = JsonDeserializer.None.class) -@Buildable(editableEnabled = false, validationEnabled = false, generateBuilderPackage=true, builderPackage = "io.fabric8.kubernetes.api.builder") +@Buildable(editableEnabled = false, validationEnabled = false, generateBuilderPackage = true, builderPackage = "io.fabric8.kubernetes.api.builder") public class KubernetesList extends BaseKubernetesList implements KubernetesResource { - /** - * No args constructor for use in serialization - */ - public KubernetesList() { - super(); - } - - public KubernetesList(String apiVersion, - List items, - String kind, - ListMeta metadata) { - super(apiVersion, items, kind, metadata); - } - - //Let's just override those, cause some IDEs can't handle extending a generated class and can't see those and get crazy. - @Override - public String getKind() { - return super.getKind(); - } + /** + * No args constructor for use in serialization + */ + public KubernetesList() { + super(); + } - @Override - public String getApiVersion() { - return super.getApiVersion(); - } + public KubernetesList(String apiVersion, + List items, + String kind, + ListMeta metadata) { + super(apiVersion, items, kind, metadata); + } - @Override - public List getItems() { - return super.getItems(); - } } diff --git a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/InternalResourceMappingProvider.java b/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/InternalResourceMappingProvider.java deleted file mode 100644 index af105e5e8f4..00000000000 --- a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/InternalResourceMappingProvider.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (C) 2015 Red Hat, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.fabric8.kubernetes.internal; - -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; -import io.fabric8.kubernetes.api.model.KubernetesList; -import io.fabric8.kubernetes.api.model.KubernetesResource; - -import java.util.HashMap; -import java.util.Map; - -public class InternalResourceMappingProvider implements KubernetesResourceMappingProvider { - - private final Map> mappings = new HashMap<>(); - - public InternalResourceMappingProvider() { - mappings.put("List", KubernetesList.class); - mappings.put("v1#List", KubernetesList.class); - } - - @Override - public Map> getMappings() { - return mappings; - } -} diff --git a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java b/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java index 2f6d1f4a2d6..bc8170d449a 100644 --- a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java +++ b/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java @@ -15,25 +15,10 @@ */ package io.fabric8.kubernetes.internal; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.ServiceLoader; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonNode; -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; import io.fabric8.kubernetes.api.model.GenericKubernetesResource; import io.fabric8.kubernetes.api.model.HasMetadata; import io.fabric8.kubernetes.api.model.KubernetesListBuilder; @@ -41,365 +26,235 @@ import io.fabric8.kubernetes.model.annotation.Group; import io.fabric8.kubernetes.model.annotation.Version; import io.fabric8.kubernetes.model.util.Helper; +import org.jboss.jandex.AnnotationInstance; +import org.jboss.jandex.DotName; +import org.jboss.jandex.Index; +import org.jboss.jandex.IndexReader; -public class KubernetesDeserializer extends JsonDeserializer { +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentSkipListSet; - static class TypeKey { - final String kind; - final String apiGroup; - final String version; +public class KubernetesDeserializer extends JsonDeserializer { - TypeKey(String kind, String apiGroup, String version) { - this.kind = kind; - this.apiGroup = apiGroup; - this.version = version; - } + static class TypeKey { + final String kind; + final String apiGroup; + final String version; - @Override - public int hashCode() { - return Objects.hash(kind, apiGroup, version); - } + TypeKey(String kind, String apiGroup, String version) { + this.kind = kind; + this.apiGroup = apiGroup; + this.version = version; + } - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof TypeKey)) { - return false; - } - TypeKey o = (TypeKey) obj; - return Objects.equals(kind, o.kind) && Objects.equals(apiGroup, o.apiGroup) - && Objects.equals(version, o.version); - } + @Override + public int hashCode() { + return Objects.hash(kind, apiGroup, version); + } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof TypeKey)) { + return false; + } + TypeKey o = (TypeKey) obj; + return Objects.equals(kind, o.kind) && Objects.equals(apiGroup, o.apiGroup) + && Objects.equals(version, o.version); } - private static final String TEMPLATE_CLASS_NAME = "io.fabric8.openshift.api.model.Template"; - private static final String KIND = "kind"; - private static final String API_VERSION = "apiVersion"; + } - private static final Mapping mapping = new Mapping(); + private static final String TEMPLATE_CLASS_NAME = "io.fabric8.openshift.api.model.Template"; + private static final String KIND = "kind"; + private static final String API_VERSION = "apiVersion"; - private static final ThreadLocal IN_TEMPLATE = ThreadLocal.withInitial(() -> false); + private static final Mapping mapping = new Mapping(); - public static boolean isInTemplate() { - return IN_TEMPLATE.get(); - } + private static final ThreadLocal IN_TEMPLATE = ThreadLocal.withInitial(() -> false); - @Override - public KubernetesResource deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { - JsonNode node = jp.readValueAsTree(); - if (node.isObject()) { - return fromObjectNode(jp, node); - } else if (node.isArray()) { - return fromArrayNode(jp, node); - } else { - return null; + public static boolean isInTemplate() { + return IN_TEMPLATE.get(); + } + + @Override + public KubernetesResource deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { + JsonNode node = jp.readValueAsTree(); + if (node.isObject()) { + return fromObjectNode(jp, node); + } else if (node.isArray()) { + return fromArrayNode(jp, node); + } else { + return null; + } + } + + private KubernetesResource fromArrayNode(JsonParser jp, JsonNode node) throws IOException { + Iterator iterator = node.elements(); + List list = new ArrayList<>(); + while (iterator.hasNext()) { + JsonNode jsonNode = iterator.next(); + if (jsonNode.isObject()) { + KubernetesResource resource = fromObjectNode(jp, jsonNode); + if (resource instanceof HasMetadata) { + list.add((HasMetadata) resource); } + } } - - private KubernetesResource fromArrayNode(JsonParser jp, JsonNode node) throws IOException { - Iterator iterator = node.elements(); - List list = new ArrayList<>(); - while (iterator.hasNext()) { - JsonNode jsonNode = iterator.next(); - if (jsonNode.isObject()) { - KubernetesResource resource = fromObjectNode(jp, jsonNode); - if (resource instanceof HasMetadata) { - list.add((HasMetadata)resource); - } - } + return new KubernetesListBuilder().withItems(list).build(); + } + + private static KubernetesResource fromObjectNode(JsonParser jp, JsonNode node) throws IOException { + TypeKey key = getKey(node); + if (key != null) { + Class resourceType = mapping.getForKey(key); + if (resourceType == null) { + return jp.getCodec().treeToValue(node, GenericKubernetesResource.class); + } else if (KubernetesResource.class.isAssignableFrom(resourceType)) { + boolean inTemplate = false; + if (TEMPLATE_CLASS_NAME.equals(resourceType.getName())) { + inTemplate = true; + IN_TEMPLATE.set(true); + } + try { + return jp.getCodec().treeToValue(node, resourceType); + } finally { + if (inTemplate) { + IN_TEMPLATE.remove(); + } } - return new KubernetesListBuilder().withItems(list).build(); + } + } + return null; + } + + /** + * Return a string representation of the key of the type: #. + */ + private static TypeKey getKey(JsonNode node) { + JsonNode apiVersion = node.get(API_VERSION); + JsonNode kind = node.get(KIND); + + return mapping.createKey( + apiVersion != null ? apiVersion.textValue() : null, + kind != null ? kind.textValue() : null); + } + + /** + * Registers a Custom Resource Definition Kind + */ + public static void registerCustomKind(String kind, Class clazz) { + registerCustomKind(null, kind, clazz); + } + + /** + * Registers a Custom Resource Definition Kind + */ + public static void registerCustomKind(String apiVersion, String kind, Class clazz) { + mapping.registerKind(apiVersion, kind, clazz); + } + + static class Mapping { + + private Set urlsLoaded = new ConcurrentSkipListSet<>(); + private Map> mappings = new ConcurrentHashMap<>(); + + Mapping() { + loadFromJandex(Mapping.class.getClassLoader()); + loadFromJandex(Thread.currentThread().getContextClassLoader()); } - private static KubernetesResource fromObjectNode(JsonParser jp, JsonNode node) throws IOException { - TypeKey key = getKey(node); - if (key != null) { - Class resourceType = mapping.getForKey(key); - if (resourceType == null) { - return jp.getCodec().treeToValue(node, GenericKubernetesResource.class); - } else if (KubernetesResource.class.isAssignableFrom(resourceType)){ - boolean inTemplate = false; - if (TEMPLATE_CLASS_NAME.equals(resourceType.getName())) { - inTemplate = true; - IN_TEMPLATE.set(true); - } - try { - return jp.getCodec().treeToValue(node, resourceType); - } finally { - if (inTemplate) { - IN_TEMPLATE.remove(); - } - } - } - } + public Class getForKey(TypeKey key) { + if (key == null) { return null; + } + return mappings.get(key); } - /** - * Return a string representation of the key of the type: #. - */ - private static TypeKey getKey(JsonNode node) { - JsonNode apiVersion = node.get(API_VERSION); - JsonNode kind = node.get(KIND); - - return mapping.createKey( - apiVersion != null ? apiVersion.textValue() : null, - kind != null ? kind.textValue() : null); + public void registerKind(String apiVersion, String kind, Class clazz) { + mappings.put(createKey(apiVersion, kind), clazz); } /** - * Registers a Custom Resource Definition Kind + * Returns a composite key for apiVersion and kind. */ - public static void registerCustomKind(String kind, Class clazz) { - registerCustomKind(null, kind, clazz); + TypeKey createKey(String apiVersion, String kind) { + if (kind == null) { + return null; + } else if (apiVersion == null) { + return new TypeKey(kind, null, null); + } else { + String[] versionParts = new String[] { null, apiVersion }; + if (apiVersion.contains("/")) { + versionParts = apiVersion.split("/", 2); + } + return new TypeKey(kind, versionParts[0], versionParts[1]); + } } - /** - * Registers a Custom Resource Definition Kind - */ - public static void registerCustomKind(String apiVersion, String kind, Class clazz) { - mapping.registerKind(apiVersion, kind, clazz); + TypeKey getKeyFromClass(Class clazz) { + String apiGroup = Helper.getAnnotationValue(clazz, Group.class); + String apiVersion = Helper.getAnnotationValue(clazz, Version.class); + String kind = HasMetadata.getKind(clazz); + if (apiGroup != null && !apiGroup.isEmpty() && apiVersion != null && !apiVersion.isEmpty()) { + return new TypeKey(kind, apiGroup, apiVersion); + } else if (apiVersion != null && !apiVersion.isEmpty()) { + return createKey(apiVersion, kind); + } + return new TypeKey(kind, null, null); } - /** - * Registers a Custom Resource Mapping Provider - */ - public static void registerProvider(KubernetesResourceMappingProvider provider) { - mapping.registerProvider(provider); + void loadFromJandex(ClassLoader classLoader) { + try { + internalLoadFromJandex(classLoader); + } catch (IOException e) { + System.err.println(String.format("Could not process jandex files for classloader %s", classLoader)); + e.printStackTrace(); + } } - static class Mapping { - - private static final String KEY_SEPARATOR = "#"; - - // n.b. Packages sorted in order of precedence, deserialization of resources with no - // specific version will default to first available Class in one of these packages: - private static final String[] PACKAGES = { - "io.fabric8.kubernetes.api.model.", - "io.fabric8.kubernetes.api.model.admission.v1.", - "io.fabric8.kubernetes.api.model.admission.v1beta1.", - "io.fabric8.kubernetes.api.model.admissionregistration.v1.", - "io.fabric8.kubernetes.api.model.admissionregistration.v1beta1.", - "io.fabric8.kubernetes.api.model.authentication.", - "io.fabric8.kubernetes.api.model.authorization.v1.", - "io.fabric8.kubernetes.api.model.authorization.v1beta1.", - "io.fabric8.kubernetes.api.model.apiextensions.v1.", - "io.fabric8.kubernetes.api.model.apiextensions.v1beta1.", - "io.fabric8.kubernetes.api.model.apps.", - "io.fabric8.kubernetes.api.model.autoscaling.v1.", - "io.fabric8.kubernetes.api.model.autoscaling.", - "io.fabric8.kubernetes.api.model.autoscaling.v2beta1.", - "io.fabric8.kubernetes.api.model.autoscaling.v2beta2.", - "io.fabric8.kubernetes.api.model.batch.v1.", - "io.fabric8.kubernetes.api.model.batch.v1beta1.", - "io.fabric8.kubernetes.api.model.certificates.v1.", - "io.fabric8.kubernetes.api.model.certificates.v1beta1.", - "io.fabric8.kubernetes.api.model.coordination.v1.", - "io.fabric8.kubernetes.api.model.coordination.", - "io.fabric8.kubernetes.api.model.discovery.v1.", - "io.fabric8.kubernetes.api.model.events.v1.", - "io.fabric8.kubernetes.api.model.events.v1beta1.", - "io.fabric8.kubernetes.api.model.flowcontrol.v1beta1.", - "io.fabric8.kubernetes.api.model.discovery.v1beta1.", - "io.fabric8.kubernetes.api.model.metrics.v1beta1.", - "io.fabric8.kubernetes.api.model.networking.v1.", - "io.fabric8.kubernetes.api.model.networking.v1beta1.", - "io.fabric8.kubernetes.api.model.policy.v1.", - "io.fabric8.kubernetes.api.model.policy.v1beta1.", - "io.fabric8.kubernetes.api.model.rbac.", - "io.fabric8.kubernetes.api.model.storage.", - "io.fabric8.kubernetes.api.model.scheduling.v1.", - "io.fabric8.kubernetes.api.model.scheduling.v1beta1.", - "io.fabric8.kubernetes.api.model.storage.", - "io.fabric8.kubernetes.api.model.storage.v1beta1.", - "io.fabric8.kubernetes.api.model.node.v1alpha1.", - "io.fabric8.kubernetes.api.model.node.v1beta1.", - "io.fabric8.openshift.api.model.", - "io.fabric8.openshift.api.model.clusterautoscaling.v1.", - "io.fabric8.openshift.api.model.clusterautoscaling.v1beta1.", - "io.fabric8.openshift.api.model.runtime.", - "io.fabric8.openshift.api.model.console.v1.", - "io.fabric8.openshift.api.model.console.v1alpha1.", - "io.fabric8.openshift.api.model.hive.v1.", - "io.fabric8.openshift.api.model.installer.v1.", - "io.fabric8.openshift.api.model.monitoring.v1.", - "io.fabric8.openshift.api.model.machine.v1beta1.", - "io.fabric8.openshift.api.model.operator.", - "io.fabric8.openshift.api.model.operator.v1.", - "io.fabric8.openshift.api.model.operator.v1alpha1.", - "io.fabric8.openshift.api.model.imageregistry.v1.", - "io.fabric8.openshift.api.model.operatorhub.manifests.", - "io.fabric8.openshift.api.model.operatorhub.v1.", - "io.fabric8.openshift.api.model.operatorhub.v1alpha1.", - "io.fabric8.openshift.api.model.operatorhub.lifecyclemanager.v1.", - "io.fabric8.openshift.api.model.machineconfig.v1.", - "io.fabric8.openshift.api.model.tuned.v1.", - "io.fabric8.openshift.api.model.whereabouts.v1alpha1.", - "io.fabric8.openshift.api.model.storageversionmigrator.v1alpha1.", - "io.fabric8.openshift.api.model.miscellaneous.cloudcredential.v1.", - "io.fabric8.openshift.api.model.miscellaneous.cncf.cni.v1.", - "io.fabric8.openshift.api.model.miscellaneous.metal3.v1alpha1.", - "io.fabric8.openshift.api.model.miscellaneous.network.operator.v1.", - "io.fabric8.openshift.api.model.miscellaneous.imageregistry.operator.v1.", - "io.fabric8.kubernetes.api.model.extensions." - }; - - private Map> mappings = new ConcurrentHashMap<>(); - private Map> internalMappings = new ConcurrentHashMap<>(); - - Mapping() { - registerAllProviders(); - } - - public Class getForKey(TypeKey key) { - if (key == null) { - return null; - } - // check for an exact match - Class clazz = mappings.get(key); - if (clazz != null) { - return clazz; - } - // check if it's a lazily-loaded internal type - List defaults = internalMappings.get(key.kind); - if (defaults == null) { - defaults = loadInternalTypes(key.kind); - clazz = mappings.get(key); // check again after load for an exact match - if (clazz != null) { - return clazz; - } - } - // if there are internal types matching kind, look for matching groups and versions - // but use first version seen (in PACKAGES order) - TypeKey bestMatch = null; - for (TypeKey typeKey : defaults) { - if (key.apiGroup != null) { - if (!key.apiGroup.equals(typeKey.apiGroup)) { - continue; - } - bestMatch = typeKey; - break; - } - if (key.version != null && key.version.equals(typeKey.apiGroup)) { - bestMatch = typeKey; - break; - } - if (bestMatch == null) { - bestMatch = typeKey; - } - } - if (bestMatch != null) { - return mappings.get(bestMatch); - } - return null; - } - - public void registerKind(String apiVersion, String kind, Class clazz) { - mappings.put(createKey(apiVersion, kind), clazz); - } - - public void registerProvider(KubernetesResourceMappingProvider provider) { - if (provider == null) { - return; - } - provider.getMappings().entrySet().stream() - //If the model is shaded (which is as part of kubernetes-client uberjar) this is going to cause conflicts. - //This is why we NEED TO filter out incompatible resources. - .filter(entry -> KubernetesResource.class.isAssignableFrom(entry.getValue())) - .forEach(e -> mappings.put(createKey(e.getKey()), e.getValue())); - } - - /** - * Returns a composite key for apiVersion and kind. - */ - TypeKey createKey(String apiVersion, String kind) { - if (kind == null) { - return null; - } else if (apiVersion == null) { - return new TypeKey(kind, null, null); - } else { - String[] versionParts = new String[] {null, apiVersion}; - if (apiVersion.contains("/")) { - versionParts = apiVersion.split("/", 2); - } - return new TypeKey(kind, versionParts[0], versionParts[1]); - } + private void internalLoadFromJandex(ClassLoader classLoader) throws IOException { + Enumeration indecies = classLoader.getResources("META-INF/jandex.idx"); + while (indecies.hasMoreElements()) { + URL u = indecies.nextElement(); + if (!urlsLoaded.add(u.toString())) { + continue; } - - TypeKey createKey(String key) { - // null is not allowed - if (key.contains(KEY_SEPARATOR)) { - String[] parts = key.split(KEY_SEPARATOR, 2); - return createKey(parts[0], parts[1]); + URLConnection uc = u.openConnection(); + uc.setUseCaches(false); + try (InputStream input = uc.getInputStream()) { + IndexReader reader = new IndexReader(input); + Index index = reader.read(); + List annotations = index.getAnnotations(DotName.createSimple(Version.class.getName())); + for (AnnotationInstance a : annotations) { + DotName name = a.target().asClass().name(); + Class clazz; + try { + clazz = classLoader.loadClass(name.toString()); + } catch (ClassNotFoundException e) { + continue; } - return createKey(null, key); - } - - private void registerAllProviders() { - getAllMappingProviders().forEach(this::registerProvider); - } - - Stream getAllMappingProviders() { - //Use service loader to load extension types. - Iterable currentThreadClassLoader = - () -> ServiceLoader.load(KubernetesResourceMappingProvider.class, Thread.currentThread().getContextClassLoader()) - .iterator(); - Iterable classClassLoader = - () -> ServiceLoader.load(KubernetesResourceMappingProvider.class, KubernetesDeserializer.class.getClassLoader()) - .iterator(); - return Stream.concat( - StreamSupport.stream(currentThreadClassLoader.spliterator(), false), - StreamSupport.stream(classClassLoader.spliterator(), false)) - .filter(distinctByClassName(KubernetesResourceMappingProvider::getClass)); - } - - private List loadInternalTypes(String kind) { - List ordering = new ArrayList<>(); - for (int i = 0; i < PACKAGES.length; i++) { - Class result = loadClassIfExists(PACKAGES[i] + kind); - if (result == null) { - continue; - } - TypeKey defaultKeyFromClass = getKeyFromClass(result); - mappings.put(defaultKeyFromClass, result); - ordering.add(defaultKeyFromClass); + if (!KubernetesResource.class.isAssignableFrom(clazz)) { + continue; } - - internalMappings.put(kind, ordering); - return ordering; - } - - private TypeKey getKeyFromClass(Class clazz) { - String apiGroup = Helper.getAnnotationValue(clazz, Group.class); - String apiVersion = Helper.getAnnotationValue(clazz, Version.class); - if (apiGroup != null && !apiGroup.isEmpty() && apiVersion != null && !apiVersion.isEmpty()) { - return new TypeKey(clazz.getSimpleName(), apiGroup, apiVersion); - } else if (apiVersion != null && !apiVersion.isEmpty()) { - return createKey(apiVersion, clazz.getSimpleName()); + Class krClazz = (Class) clazz; + mappings.put(getKeyFromClass(krClazz), krClazz); } - return new TypeKey(clazz.getSimpleName(), null, null); - } - - private Class loadClassIfExists(String className) { - try { - Class clazz = KubernetesDeserializer.class.getClassLoader().loadClass(className); - if (!KubernetesResource.class.isAssignableFrom(clazz)) { - return null; - } - return (Class) clazz; - } catch (Exception t) { - return null; - } } - - private Predicate distinctByClassName( - Function> mapperProvider) { - Set existing = ConcurrentHashMap.newKeySet(); - return provider -> existing.add(mapperProvider.apply(provider).getName()); - } - + } } + } } diff --git a/kubernetes-model-generator/kubernetes-model-core/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider b/kubernetes-model-generator/kubernetes-model-core/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider deleted file mode 100644 index ee2125c6841..00000000000 --- a/kubernetes-model-generator/kubernetes-model-core/src/main/resources/META-INF/services/io.fabric8.kubernetes.api.KubernetesResourceMappingProvider +++ /dev/null @@ -1 +0,0 @@ -io.fabric8.kubernetes.internal.InternalResourceMappingProvider \ No newline at end of file diff --git a/kubernetes-model-generator/kubernetes-model-core/src/test/java/io/fabric8/kubernetes/internal/KubernetesDeserializerTest.java b/kubernetes-model-generator/kubernetes-model-core/src/test/java/io/fabric8/kubernetes/internal/KubernetesDeserializerTest.java index 05376f7d2f5..2b35ae4feb9 100644 --- a/kubernetes-model-generator/kubernetes-model-core/src/test/java/io/fabric8/kubernetes/internal/KubernetesDeserializerTest.java +++ b/kubernetes-model-generator/kubernetes-model-core/src/test/java/io/fabric8/kubernetes/internal/KubernetesDeserializerTest.java @@ -15,29 +15,18 @@ */ package io.fabric8.kubernetes.internal; -import io.fabric8.kubernetes.api.KubernetesResourceMappingProvider; import io.fabric8.kubernetes.api.model.KubernetesResource; import io.fabric8.kubernetes.api.model.Pod; import io.fabric8.kubernetes.api.model.Quantity; import io.fabric8.kubernetes.internal.KubernetesDeserializer.TypeKey; -import org.apache.commons.lang3.tuple.Pair; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.util.stream.Collectors; -import java.util.stream.Stream; - import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; class KubernetesDeserializerTest { - private KubernetesDeserializer.Mapping mapping; - - @BeforeEach - public void beforeEach() { - this.mapping = new TestableMapping(createProvider()); - } + private KubernetesDeserializer.Mapping mapping = new KubernetesDeserializer.Mapping(); @Test void shouldRegisterKind() { @@ -76,20 +65,6 @@ void shouldRegisterKindWithoutVersionIfNullVersion() { assertThat(clazz).isEqualTo(SmurfResource.class); } - @Test - void shouldRegisterProvider() { - // given - TypeKey key = mapping.createKey("42", "Hitchhiker"); - assertThat(mapping.getForKey(key)).isNull(); - KubernetesResourceMappingProvider provider = createProvider( - Pair.of("42#Hitchhiker", SmurfResource.class)); - // when - mapping.registerProvider(provider); - // then - Class clazz = mapping.getForKey(key); - assertThat(clazz).isEqualTo(SmurfResource.class); - } - @Test void shouldReturnMappedClass() { // given @@ -114,9 +89,9 @@ void shouldReturnNullIfKeyIsNull() { } @Test - void shouldLoadClassInPackage() { + void shouldLoadDiscoveredClass() { // given - TypeKey key = mapping.createKey("42", Pod.class.getSimpleName()); + TypeKey key = mapping.getKeyFromClass(Pod.class); // when Class clazz = mapping.getForKey(key); // then @@ -144,35 +119,16 @@ void shouldNotLoadClassInPackageIfNotKubernetesResource() { } @Test - void shouldLoadClassIfKeyOnlyHasKind() { - // given Quantity is not a KubernetesResource + void shouldNotLoadClassIfKeyOnlyHasKind() { + // given TypeKey key = mapping.createKey(null, Pod.class.getSimpleName()); // when Class clazz = mapping.getForKey(key); // then - assertThat(clazz).isEqualTo(Pod.class); + assertThat(clazz).isNull(); } - private KubernetesResourceMappingProvider createProvider(Pair>... mappings) { - return () -> Stream.of(mappings) - .collect(Collectors.toMap(Pair::getKey, Pair::getValue)); + static final class SmurfResource implements KubernetesResource { } - public static final class TestableMapping extends KubernetesDeserializer.Mapping { - - private final KubernetesResourceMappingProvider provider; - - public TestableMapping(KubernetesResourceMappingProvider provider) { - this.provider = provider; - } - - @Override - protected Stream getAllMappingProviders() { - return Stream.of(provider); - } - - } - - private static final class SmurfResource implements KubernetesResource { - } } diff --git a/kubernetes-tests/src/test/java/io/fabric8/openshift/client/server/mock/OpenShiftLoadTest.java b/kubernetes-tests/src/test/java/io/fabric8/openshift/client/server/mock/OpenShiftLoadTest.java index 2bc3582bc22..dcf2a2ecf26 100644 --- a/kubernetes-tests/src/test/java/io/fabric8/openshift/client/server/mock/OpenShiftLoadTest.java +++ b/kubernetes-tests/src/test/java/io/fabric8/openshift/client/server/mock/OpenShiftLoadTest.java @@ -55,7 +55,7 @@ void testResourceGetFromLoadWhenSingleDocumentsWithoutDelimiter() { assertNotNull(result); assertEquals(1, result.size()); HasMetadata deploymentResource = result.get(0); - assertEquals("v1", deploymentResource.getApiVersion()); + assertEquals("template.openshift.io/v1", deploymentResource.getApiVersion()); assertEquals("Pod", deploymentResource.getKind()); assertEquals("example-pod", deploymentResource.getMetadata().getName()); } diff --git a/kubernetes-tests/src/test/resources/template-with-json-params.yml b/kubernetes-tests/src/test/resources/template-with-json-params.yml index 37556c7887f..69bb2733f08 100644 --- a/kubernetes-tests/src/test/resources/template-with-json-params.yml +++ b/kubernetes-tests/src/test/resources/template-with-json-params.yml @@ -14,7 +14,7 @@ # limitations under the License. # -apiVersion: v1 +apiVersion: template.openshift.io/v1 kind: Template metadata: name: example-template diff --git a/kubernetes-tests/src/test/resources/template-with-params.yml b/kubernetes-tests/src/test/resources/template-with-params.yml index 4278dd865f2..4ef10ec23a8 100644 --- a/kubernetes-tests/src/test/resources/template-with-params.yml +++ b/kubernetes-tests/src/test/resources/template-with-params.yml @@ -14,7 +14,7 @@ # limitations under the License. # -apiVersion: v1 +apiVersion: template.openshift.io/v1 kind: Template metadata: name: example-template diff --git a/kubernetes-tests/src/test/resources/test-scc.yml b/kubernetes-tests/src/test/resources/test-scc.yml index c8fc1c9fb25..e5720c56f18 100644 --- a/kubernetes-tests/src/test/resources/test-scc.yml +++ b/kubernetes-tests/src/test/resources/test-scc.yml @@ -16,7 +16,7 @@ --- kind: SecurityContextConstraints -apiVersion: v1 +apiVersion: security.openshift.io/v1 metadata: name: scc-get allowPrivilegedContainer: true diff --git a/kubernetes-tests/src/test/resources/test-template.yml b/kubernetes-tests/src/test/resources/test-template.yml index 44658b16354..5533319f007 100644 --- a/kubernetes-tests/src/test/resources/test-template.yml +++ b/kubernetes-tests/src/test/resources/test-template.yml @@ -16,7 +16,7 @@ --- kind: "Template" - apiVersion: "v1" + apiVersion: "template.openshift.io/v1" metadata: annotations: iconClass: "icon-jboss" @@ -107,7 +107,7 @@ description: "The web server's http port." - kind: "Route" - apiVersion: "v1" + apiVersion: "route.openshift.io/v1" id: "${APPLICATION_NAME}-http-route" metadata: name: "${APPLICATION_NAME}-http-route" @@ -121,14 +121,14 @@ name: "${APPLICATION_NAME}" - kind: "ImageStream" - apiVersion: "v1" + apiVersion: "image.openshift.io/v1" metadata: name: "${APPLICATION_NAME}" labels: application: "${APPLICATION_NAME}" - kind: "BuildConfig" - apiVersion: "v1" + apiVersion: "build.openshift.io/v1" metadata: name: "${APPLICATION_NAME}" labels: @@ -165,7 +165,7 @@ imageChange: {} - kind: "DeploymentConfig" - apiVersion: "v1" + apiVersion: "apps.openshift.io/v1" metadata: name: "${APPLICATION_NAME}" labels: diff --git a/pom.xml b/pom.xml index e10c54b4203..33c98bce53d 100644 --- a/pom.xml +++ b/pom.xml @@ -698,6 +698,12 @@ + + org.jboss + jandex + ${jandex.version} + + io.sundr builder-annotations