Skip to content

Commit e5909fa

Browse files
author
Soroosh Sarabadani
committed
extract custom resource mapping logic
1 parent 99a541d commit e5909fa

File tree

2 files changed

+61
-39
lines changed

2 files changed

+61
-39
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package io.javaoperatorsdk.operator;
2+
3+
import io.fabric8.kubernetes.client.CustomResource;
4+
import io.javaoperatorsdk.operator.api.ResourceController;
5+
import org.apache.commons.lang3.ClassUtils;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
9+
import java.io.BufferedReader;
10+
import java.io.IOException;
11+
import java.io.InputStreamReader;
12+
import java.net.URL;
13+
import java.util.*;
14+
import java.util.stream.Collectors;
15+
16+
17+
class ControllerToCustomResourceMappingsProvider {
18+
private static final Logger log = LoggerFactory.getLogger(ControllerUtils.class);
19+
20+
static Map<Class<? extends ResourceController>, Class<? extends CustomResource>> provide(final String resourcePath) {
21+
Map<Class<? extends ResourceController>, Class<? extends CustomResource>> controllerToCustomResourceMappings = new HashMap();
22+
try {
23+
final Enumeration<URL> customResourcesMetadataList = ControllerUtils.class.getClassLoader().getResources(resourcePath);
24+
for (Iterator<URL> it = customResourcesMetadataList.asIterator(); it.hasNext(); ) {
25+
URL url = it.next();
26+
27+
List<String> classNamePairs = retrieveClassNamePairs(url);
28+
classNamePairs.forEach(clazzPair -> {
29+
try {
30+
final String[] classNames = clazzPair.split(",");
31+
if (classNames.length != 2) {
32+
throw new IllegalStateException(String.format("%s is not valid CustomResource metadata defined in %s", clazzPair, url.toString()));
33+
}
34+
35+
controllerToCustomResourceMappings.put(
36+
(Class<? extends ResourceController>) ClassUtils.getClass(classNames[0]),
37+
(Class<? extends CustomResource>) ClassUtils.getClass(classNames[1])
38+
);
39+
} catch (ClassNotFoundException e) {
40+
throw new RuntimeException(e);
41+
}
42+
});
43+
}
44+
log.debug("Loaded Controller to CustomResource mappings {}", controllerToCustomResourceMappings);
45+
return controllerToCustomResourceMappings;
46+
} catch (IOException e) {
47+
throw new RuntimeException(e);
48+
}
49+
}
50+
51+
private static List<String> retrieveClassNamePairs(URL url) throws IOException {
52+
return new BufferedReader(
53+
new InputStreamReader(url.openStream())
54+
).lines().collect(Collectors.toList());
55+
}
56+
}

operator-framework/src/main/java/io/javaoperatorsdk/operator/ControllerUtils.java

Lines changed: 5 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,54 +4,20 @@
44
import io.fabric8.kubernetes.client.CustomResourceDoneable;
55
import io.javaoperatorsdk.operator.api.Controller;
66
import io.javaoperatorsdk.operator.api.ResourceController;
7-
import org.apache.commons.lang3.ClassUtils;
87

9-
import java.io.BufferedReader;
10-
import java.io.IOException;
11-
import java.io.InputStreamReader;
12-
import java.net.URL;
13-
import java.nio.file.Files;
14-
import java.nio.file.Path;
15-
import java.util.*;
16-
import java.util.stream.Collectors;
8+
import java.util.Map;
179

1810

1911
public class ControllerUtils {
2012

2113
private static final String FINALIZER_NAME_SUFFIX = "/finalizer";
2214
public static final String CONTROLLERS_RESOURCE_PATH = "javaoperatorsdk/controllers";
23-
private static Map<Class<? extends ResourceController>, Class<? extends CustomResource>> controllerToCustomResourceMappings = new HashMap();
15+
private static Map<Class<? extends ResourceController>, Class<? extends CustomResource>> controllerToCustomResourceMappings;
2416

2517
static {
26-
try {
27-
final Enumeration<URL> customResourcesMetadaList = ControllerUtils.class.getClassLoader().getResources(CONTROLLERS_RESOURCE_PATH);
28-
for (Iterator<URL> it = customResourcesMetadaList.asIterator(); it.hasNext(); ) {
29-
URL url = it.next();
30-
31-
List<String> classNamePairs = new BufferedReader(
32-
new InputStreamReader(
33-
url.openStream()
34-
)
35-
).lines().collect(Collectors.toList());
36-
classNamePairs.forEach(clazzPair -> {
37-
try {
38-
39-
final String[] classNames = clazzPair.split(",");
40-
if (classNames.length != 2) {
41-
throw new IllegalStateException(String.format("%s is not custom-resource metadata defined in %s", url.toString()));
42-
}
43-
44-
controllerToCustomResourceMappings.put((Class<? extends ResourceController>) ClassUtils.getClass(classNames[0]), (Class<? extends CustomResource>) ClassUtils.getClass(classNames[1]));
45-
} catch (ClassNotFoundException e) {
46-
throw new RuntimeException(e);
47-
}
48-
});
49-
}
50-
51-
} catch (IOException e) {
52-
throw new RuntimeException(e);
53-
}
54-
//TODO: DEBUG log
18+
controllerToCustomResourceMappings =
19+
ControllerToCustomResourceMappingsProvider
20+
.provide(CONTROLLERS_RESOURCE_PATH);
5521
}
5622

5723
static String getFinalizer(ResourceController controller) {

0 commit comments

Comments
 (0)