Skip to content

Commit f6b47c2

Browse files
Merge pull request #11724 from renanfranca/10934-add-optional-rank-at-modules
add optional rank at modules domain
2 parents 47eec22 + ddb7ffb commit f6b47c2

File tree

4 files changed

+83
-8
lines changed

4 files changed

+83
-8
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package tech.jhipster.lite.module.domain.resource;
2+
3+
/**
4+
* Represents the maturity and adoption level of JHipster modules.
5+
* Ranks range from experimental to community-validated,
6+
* helping users assess module stability and production readiness.
7+
*/
8+
public enum JHipsterModuleRank {
9+
/**
10+
* Experimental or advanced module requiring specific expertise
11+
*/
12+
RANK_D,
13+
14+
/**
15+
* Module without known production usage
16+
*/
17+
RANK_C,
18+
19+
/**
20+
* Module with at least one confirmed production usage
21+
*/
22+
RANK_B,
23+
24+
/**
25+
* Module with multiple production usages across different projects
26+
* and documented through talks, books or blog posts
27+
*/
28+
RANK_A,
29+
30+
/**
31+
* Production-proven module providing unique features,
32+
* validated by community feedback (10+ endorsements)
33+
*/
34+
RANK_S,
35+
}

src/main/java/tech/jhipster/lite/module/domain/resource/JHipsterModuleResource.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.apache.commons.lang3.builder.ToStringStyle.*;
44

5+
import java.util.Optional;
56
import org.apache.commons.lang3.builder.ToStringBuilder;
67
import tech.jhipster.lite.module.domain.JHipsterModuleFactory;
78
import tech.jhipster.lite.module.domain.JHipsterModuleSlug;
@@ -14,6 +15,7 @@ public final class JHipsterModuleResource {
1415
private final JHipsterModuleApiDoc apiDoc;
1516
private final JHipsterModuleOrganization organization;
1617
private final JHipsterModuleTags tags;
18+
private final JHipsterModuleRank rank;
1719
private final JHipsterModuleFactory factory;
1820

1921
private JHipsterModuleResource(JHipsterModuleResourceBuilder builder) {
@@ -24,6 +26,7 @@ private JHipsterModuleResource(JHipsterModuleResourceBuilder builder) {
2426
apiDoc = builder.apiDoc;
2527
tags = builder.tags;
2628
organization = builder.organization;
29+
rank = Optional.ofNullable(builder.rank).orElse(JHipsterModuleRank.RANK_D);
2730
factory = builder.factory;
2831
}
2932

@@ -60,6 +63,10 @@ public JHipsterModuleOrganization organization() {
6063
return organization;
6164
}
6265

66+
public JHipsterModuleRank rank() {
67+
return rank;
68+
}
69+
6370
public JHipsterModuleFactory factory() {
6471
return factory;
6572
}
@@ -86,10 +93,11 @@ private static final class JHipsterModuleResourceBuilder
8693
JHipsterModuleResourceApiDocBuilder,
8794
JHipsterModuleResourceOrganizationBuilder,
8895
JHipsterModuleResourceTagsBuilder,
89-
JHipsterModuleResourceFactoryBuilder {
96+
JHipsterModuleResourceOptionalBuilder {
9097

9198
private JHipsterModuleSlugFactory slug;
9299
private JHipsterModuleApiDoc apiDoc;
100+
private JHipsterModuleRank rank;
93101
private JHipsterModuleFactory factory;
94102
private JHipsterModulePropertiesDefinition propertiesDefinition;
95103

@@ -125,12 +133,19 @@ public JHipsterModuleResourceTagsBuilder organization(JHipsterModuleOrganization
125133
}
126134

127135
@Override
128-
public JHipsterModuleResourceFactoryBuilder tags(JHipsterModuleTags tags) {
136+
public JHipsterModuleResourceOptionalBuilder tags(JHipsterModuleTags tags) {
129137
this.tags = tags;
130138

131139
return this;
132140
}
133141

142+
@Override
143+
public JHipsterModuleResourceOptionalBuilder rank(JHipsterModuleRank rank) {
144+
this.rank = rank;
145+
146+
return this;
147+
}
148+
134149
@Override
135150
public JHipsterModuleResource factory(JHipsterModuleFactory factory) {
136151
this.factory = factory;
@@ -168,14 +183,16 @@ default JHipsterModuleResourceTagsBuilder standalone() {
168183
}
169184

170185
public interface JHipsterModuleResourceTagsBuilder {
171-
JHipsterModuleResourceFactoryBuilder tags(JHipsterModuleTags tags);
186+
JHipsterModuleResourceOptionalBuilder tags(JHipsterModuleTags tags);
172187

173-
default JHipsterModuleResourceFactoryBuilder tags(String... tags) {
188+
default JHipsterModuleResourceOptionalBuilder tags(String... tags) {
174189
return tags(JHipsterModuleTags.builder().add(tags).build());
175190
}
176191
}
177192

178-
public interface JHipsterModuleResourceFactoryBuilder {
193+
public interface JHipsterModuleResourceOptionalBuilder {
194+
JHipsterModuleResourceOptionalBuilder rank(JHipsterModuleRank rank);
195+
179196
JHipsterModuleResource factory(JHipsterModuleFactory factory);
180197
}
181198
}

src/test/java/tech/jhipster/lite/module/domain/resource/JHipsterModulesResourceFixture.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.ArrayList;
66
import java.util.Collection;
77
import java.util.List;
8+
import java.util.Optional;
89
import tech.jhipster.lite.module.domain.JHipsterModuleFactory;
910
import tech.jhipster.lite.module.domain.resource.JHipsterModuleOrganization.JHipsterModuleOrganizationBuilder;
1011
import tech.jhipster.lite.module.domain.resource.JHipsterModuleTags.JHipsterModuleTagsBuilder;
@@ -76,6 +77,7 @@ public static final class JHipsterTestModuleResourceBuilder {
7677
private JHipsterModuleFactory factory;
7778
private JHipsterModuleTags tags;
7879
private String feature;
80+
private JHipsterModuleRank rank;
7981

8082
private final Collection<JHipsterModuleSlugFactory> moduleDependencies = new ArrayList<>();
8183
private final Collection<JHipsterFeatureSlugFactory> featureDependencies = new ArrayList<>();
@@ -130,14 +132,21 @@ public JHipsterTestModuleResourceBuilder tags(JHipsterModuleTags tags) {
130132
return this;
131133
}
132134

135+
public JHipsterTestModuleResourceBuilder rank(JHipsterModuleRank rank) {
136+
this.rank = rank;
137+
138+
return this;
139+
}
140+
133141
public JHipsterModuleResource build() {
134-
return JHipsterModuleResource.builder()
142+
JHipsterModuleResource.JHipsterModuleResourceOptionalBuilder builder = JHipsterModuleResource.builder()
135143
.slug(() -> slug)
136144
.propertiesDefinition(propertiesDefinition())
137145
.apiDoc(group, operation)
138146
.organization(buildOrganization())
139-
.tags(tags)
140-
.factory(factory);
147+
.tags(tags);
148+
149+
return Optional.ofNullable(rank).map(builder::rank).orElse(builder).factory(factory);
141150
}
142151

143152
private JHipsterModuleOrganization buildOrganization() {

src/test/java/tech/jhipster/lite/module/domain/resource/JHipsterModulesResourcesTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,18 @@ void shouldHaveMeaningfulToString() {
4646

4747
assertThat(resource.toString()).contains("JHipsterModuleResource[", "slug=dummy");
4848
}
49+
50+
@Test
51+
void shouldBuildWithRankedResources() {
52+
var resource = defaultModuleResourceBuilder().rank(JHipsterModuleRank.RANK_S).build();
53+
54+
assertThat(resource.rank()).isEqualTo(JHipsterModuleRank.RANK_S);
55+
}
56+
57+
@Test
58+
void shouldBuildWithDefaultRankedResources() {
59+
var resource = defaultModuleResourceBuilder().build();
60+
61+
assertThat(resource.rank()).isEqualTo(JHipsterModuleRank.RANK_D);
62+
}
4963
}

0 commit comments

Comments
 (0)