Skip to content

Commit 67693eb

Browse files
committed
refactor: add GroupVersionKindPlural class, used by GenericKubernetesDependentResource
1 parent 434e2be commit 67693eb

File tree

4 files changed

+81
-37
lines changed

4 files changed

+81
-37
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/GroupVersionKind.java

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
package io.javaoperatorsdk.operator.processing;
22

33
import java.util.Objects;
4-
import java.util.Optional;
54

6-
import io.fabric8.kubernetes.api.Pluralize;
75
import io.fabric8.kubernetes.api.model.HasMetadata;
6+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.GroupVersionKindPlural;
87

98
public class GroupVersionKind {
109
private final String group;
1110
private final String version;
1211
private final String kind;
13-
private final String plural;
1412
private final String apiVersion;
1513

14+
/**
15+
* @deprecated Use {@link GroupVersionKindPlural#gvkFor(String, String)} instead
16+
*/
17+
@Deprecated(forRemoval = true)
1618
public GroupVersionKind(String apiVersion, String kind) {
1719
this.kind = kind;
1820
String[] groupAndVersion = apiVersion.split("/");
@@ -23,28 +25,24 @@ public GroupVersionKind(String apiVersion, String kind) {
2325
this.group = groupAndVersion[0];
2426
this.version = groupAndVersion[1];
2527
}
26-
this.plural = null;
2728
this.apiVersion = apiVersion;
2829
}
2930

30-
public GroupVersionKind(String group, String version, String kind) {
31-
this(group, version, kind, null);
31+
public static GroupVersionKind gvkFor(Class<? extends HasMetadata> resourceClass) {
32+
return GroupVersionKindPlural.gvkFor(resourceClass);
3233
}
3334

34-
public GroupVersionKind(String group, String version, String kind, String plural) {
35+
/**
36+
* @deprecated Use {@link GroupVersionKindPlural#gvkFor(String, String, String)} instead
37+
*/
38+
@Deprecated(forRemoval = true)
39+
public GroupVersionKind(String group, String version, String kind) {
3540
this.group = group;
3641
this.version = version;
3742
this.kind = kind;
38-
this.plural = plural;
3943
this.apiVersion = (group == null || group.isBlank()) ? version : group + "/" + version;
4044
}
4145

42-
public static GroupVersionKind gvkFor(Class<? extends HasMetadata> resourceClass) {
43-
return new GroupVersionKind(HasMetadata.getGroup(resourceClass),
44-
HasMetadata.getVersion(resourceClass), HasMetadata.getKind(resourceClass),
45-
HasMetadata.getPlural(resourceClass));
46-
}
47-
4846
public String getGroup() {
4947
return group;
5048
}
@@ -57,18 +55,6 @@ public String getKind() {
5755
return kind;
5856
}
5957

60-
/**
61-
* Returns the plural form associated with the kind if it has been provided explicitly (either
62-
* manually by the user, or determined from the associated resource class definition)
63-
*
64-
* @return {@link Optional#empty()} if the plural form was not provided explicitly (in which case,
65-
* it could be approximated by using {@link Pluralize#toPlural(String)} on the kind), or
66-
* the plural form if it was provided explicitly
67-
*/
68-
public Optional<String> getPlural() {
69-
return Optional.ofNullable(plural);
70-
}
71-
7258
public String apiVersion() {
7359
return apiVersion;
7460
}
@@ -91,8 +77,7 @@ public int hashCode() {
9177
@Override
9278
public String toString() {
9379
return "GroupVersionKind{" +
94-
"group='" + group + '\'' +
95-
", version='" + version + '\'' +
80+
"apiVersion='" + apiVersion + '\'' +
9681
", kind='" + kind + '\'' +
9782
'}';
9883
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@
88
public class GenericKubernetesDependentResource<P extends HasMetadata>
99
extends KubernetesDependentResource<GenericKubernetesResource, P> {
1010

11-
private final GroupVersionKind groupVersionKind;
11+
private final GroupVersionKindPlural groupVersionKind;
1212

1313
public GenericKubernetesDependentResource(GroupVersionKind groupVersionKind) {
14+
this(new GroupVersionKindPlural(groupVersionKind));
15+
}
16+
17+
public GenericKubernetesDependentResource(GroupVersionKindPlural groupVersionKind) {
1418
super(GenericKubernetesResource.class);
1519
this.groupVersionKind = groupVersionKind;
1620
}
@@ -20,7 +24,7 @@ protected InformerConfiguration.InformerConfigurationBuilder<GenericKubernetesRe
2024
}
2125

2226
@SuppressWarnings("unused")
23-
public GroupVersionKind getGroupVersionKind() {
27+
public GroupVersionKindPlural getGroupVersionKind() {
2428
return groupVersionKind;
2529
}
2630
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package io.javaoperatorsdk.operator.processing.dependent.kubernetes;
2+
3+
import java.util.Optional;
4+
5+
import io.fabric8.kubernetes.api.Pluralize;
6+
import io.fabric8.kubernetes.api.model.HasMetadata;
7+
import io.javaoperatorsdk.operator.processing.GroupVersionKind;
8+
9+
public class GroupVersionKindPlural extends GroupVersionKind {
10+
private final String plural;
11+
12+
public GroupVersionKindPlural(String group, String version, String kind, String plural) {
13+
super(group, version, kind);
14+
this.plural = plural;
15+
}
16+
17+
public GroupVersionKindPlural(GroupVersionKind gvk) {
18+
this(gvk.getGroup(), gvk.getVersion(), gvk.getKind(),
19+
gvk instanceof GroupVersionKindPlural ? ((GroupVersionKindPlural) gvk).plural : null);
20+
}
21+
22+
public static GroupVersionKind gvkFor(String group, String version, String kind) {
23+
return new GroupVersionKind(group, version, kind);
24+
}
25+
26+
public static GroupVersionKind gvkFor(String apiVersion, String kind) {
27+
return new GroupVersionKind(apiVersion, kind);
28+
}
29+
30+
public static GroupVersionKindPlural gvkFor(Class<? extends HasMetadata> resourceClass) {
31+
return new GroupVersionKindPlural(HasMetadata.getGroup(resourceClass),
32+
HasMetadata.getVersion(resourceClass), HasMetadata.getKind(resourceClass),
33+
HasMetadata.getPlural(resourceClass));
34+
}
35+
36+
/**
37+
* Returns the plural form associated with the kind if it has been provided explicitly (either
38+
* manually by the user, or determined from the associated resource class definition)
39+
*
40+
* @return {@link Optional#empty()} if the plural form was not provided explicitly, or the plural
41+
* form if it was provided explicitly
42+
*/
43+
public Optional<String> getPlural() {
44+
return Optional.ofNullable(plural);
45+
}
46+
47+
/**
48+
* Returns the plural form associated with the kind if it was provided or a default, computed form
49+
* via {@link Pluralize#toPlural(String)} (which should correspond to the actual plural form in
50+
* most cases but might not always be correct, especially if the resource's creator defined an
51+
* exotic plural form via the CRD.
52+
*
53+
* @return the plural form associated with the kind if provided or a default plural form otherwise
54+
*/
55+
public String getPluralOrDefault() {
56+
return getPlural().orElse(Pluralize.toPlural(getKind()));
57+
}
58+
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/GroupVersionKindTest.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,26 @@
44

55
import io.fabric8.kubernetes.api.model.ConfigMap;
66
import io.fabric8.kubernetes.api.model.HasMetadata;
7+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.GroupVersionKindPlural;
78

89
import static org.assertj.core.api.Assertions.assertThat;
9-
import static org.junit.jupiter.api.Assertions.*;
1010

1111
class GroupVersionKindTest {
1212

1313
@Test
1414
void testInitFromApiVersion() {
15-
var gvk = new GroupVersionKind("v1", "ConfigMap");
15+
var gvk = GroupVersionKindPlural.gvkFor("v1", "ConfigMap");
1616
assertThat(gvk.getGroup()).isNull();
1717
assertThat(gvk.getVersion()).isEqualTo("v1");
1818

19-
gvk = new GroupVersionKind("apps/v1", "Deployment");
19+
gvk = GroupVersionKindPlural.gvkFor("apps/v1", "Deployment");
2020
assertThat(gvk.getGroup()).isEqualTo("apps");
2121
assertThat(gvk.getVersion()).isEqualTo("v1");
2222
}
2323

2424
@Test
2525
void pluralShouldOnlyBeProvidedIfExplicitlySet() {
26-
var gvk = new GroupVersionKind("v1", "ConfigMap");
27-
assertThat(gvk.getPlural()).isEmpty();
28-
29-
gvk = GroupVersionKind.gvkFor(ConfigMap.class);
26+
final var gvk = GroupVersionKindPlural.gvkFor(ConfigMap.class);
3027
assertThat(gvk.getPlural()).hasValue(HasMetadata.getPlural(ConfigMap.class));
3128
}
3229

0 commit comments

Comments
 (0)