Skip to content

Commit 814bc5c

Browse files
authored
flavour extra config yml #333 (#334)
* flavour extra config yml #333 * test flavour facade extra config #333 * improved testing #333 * testing param config for flavours #333 * remove sonar cloud issues #333 * add extra config for all flavours #333 * flavour extra config documentation #333
1 parent 1830961 commit 814bc5c

File tree

17 files changed

+397
-1
lines changed

17 files changed

+397
-1
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Changed
1111

12+
- [fj-doc-maven-plugin] flavour extra configurations <https://github.com/fugerit-org/fj-doc/issues/333>
1213
- release notes integration <https://github.com/fugerit-org/fj-doc/issues/331>
1314
- quarkus-version set to 3.19.4 across all the modules
1415

fj-doc-guide/src/main/docs/asciidoc/chapters/02_2_maven_plugin_init.adoc

+156
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@ Project folder will be `./${artifactId}/`.
2929
NOTE: it is possible to set any property from 'add' goal, except 'projectFolder' which is set to `./${artifactId}`.
3030

3131
[#flavour-list]
32+
===== Flavours list
33+
3234
[cols="25,20,55", options="header"]
3335
|====================================================================================================================================
3436
| flavour | model | description
37+
| vanilla | maven | Vanilla java, with maven packaging
3538
| quarkus-3 | maven | Based on link:https://quarkus.io/[Quarkus 3], with maven packaging (yaml)
3639
| quarkus-3-gradle | gradle | Based on link:https://quarkus.io/[Quarkus 3], with gradle packaging (yaml)
3740
| quarkus-3-gradle-kts | gradle-kts | Based on link:https://quarkus.io/[Quarkus 3], with gradle kotlin packaging (yaml)
@@ -41,3 +44,156 @@ NOTE: it is possible to set any property from 'add' goal, except 'projectFolder'
4144
| springboot-3 | maven | Based on link:https://spring.io/projects/spring-boot[Sping Boot 3], with maven packaging
4245
| openliberty | maven | Based on link:https://openliberty.io/[Open Liberty], with maven packaging
4346
|====================================================================================================================================
47+
48+
[#flavour-extra-config]
49+
===== Specific flavour configuration
50+
51+
[#flavour-vanilla]
52+
====== Vanilla
53+
54+
Vanilla flavour accepts all configuration options.
55+
56+
[#flavour-quarkus-3]
57+
====== Quarkus 3
58+
59+
Quarkus 3 flavour has the following specific configurations
60+
61+
_Configuration_ : *YAML*
62+
63+
_Java Packaging_ : *Maven*
64+
65+
[cols="3*", options="header"]
66+
|====================================================================================================================================
67+
| parameter | accepted value | note
68+
| addLombok | _true_ | currently only generation with lombok is supported
69+
| javaRelease | _17+_ | this flavour does not support java lower than 17
70+
|====================================================================================================================================
71+
72+
[#flavour-quarkus-2]
73+
====== Quarkus 2
74+
75+
Quarkus 2 flavour has the following specific configurations
76+
77+
_Configuration_ : *YAML*
78+
79+
_Java Packaging_ : *Maven*
80+
81+
[cols="3*", options="header"]
82+
|====================================================================================================================================
83+
| parameter | accepted value | note
84+
| addLombok | _true_ | currently only generation with lombok is supported
85+
| javaRelease | _11+_ | this flavour does not support java lower than 11
86+
|====================================================================================================================================
87+
88+
[#flavour-quarkus-3-gradle]
89+
====== Quarkus 3 Gradle
90+
91+
Quarkus 3 Gradle flavour has the following specific configurations
92+
93+
_Configuration_ : *YAML*
94+
95+
_Java Packaging_ : *Gradle*
96+
97+
[cols="3*", options="header"]
98+
|====================================================================================================================================
99+
| parameter | accepted value | note
100+
| addLombok | _true_ | currently only generation with lombok is supported
101+
| javaRelease | _17+_ | this flavour does not support java lower than 17
102+
|====================================================================================================================================
103+
104+
[#flavour-quarkus-3-gradle-kts]
105+
====== Quarkus 3 Gradle KTS
106+
107+
Quarkus 3 Gradle KTS flavour has the following specific configurations
108+
109+
_Configuration_ : *YAML*
110+
111+
_Java Packaging_ : *Gradle with Kotlin DSL*
112+
113+
[cols="3*", options="header"]
114+
|====================================================================================================================================
115+
| parameter | accepted value | note
116+
| addLombok | _true_ | currently only generation with lombok is supported
117+
| javaRelease | _17+_ | this flavour does not support java lower than 17
118+
|====================================================================================================================================
119+
120+
[#flavour-quarkus-3-properties]
121+
====== Quarkus 3 Properties
122+
123+
Quarkus 3 properties flavour has the following specific configurations
124+
125+
_Configuration_ : *properties*
126+
127+
_Java Packaging_ : *Maven*
128+
129+
[cols="3*", options="header"]
130+
|====================================================================================================================================
131+
| parameter | accepted value | note
132+
| addLombok | _true_ | currently only generation with lombok is supported
133+
| javaRelease | _17+_ | this flavour does not support java lower than 17
134+
|====================================================================================================================================
135+
136+
[#flavour-micronaut-4]
137+
====== Micronaut 4
138+
139+
Micronaut 4 flavour has the following specific configurations
140+
141+
_Configuration_ : *YAML*
142+
143+
_Java Packaging_ : *Maven*
144+
145+
[cols="3*", options="header"]
146+
|====================================================================================================================================
147+
| parameter | accepted value | note
148+
| addLombok | _true_ | currently only generation with lombok is supported
149+
| javaRelease | _17+_ | this flavour does not support java lower than 17
150+
|====================================================================================================================================
151+
152+
[#flavour-micronaut-4]
153+
====== Micronaut 4
154+
155+
Micronaut 4 flavour has the following specific configurations
156+
157+
_Configuration_ : *YAML*
158+
159+
_Java Packaging_ : *Maven*
160+
161+
[cols="3*", options="header"]
162+
|====================================================================================================================================
163+
| parameter | accepted value | note
164+
| addLombok | _true_ | currently only generation with lombok is supported
165+
| javaRelease | _17+_ | this flavour does not support java lower than 17
166+
|====================================================================================================================================
167+
168+
[#flavour-openliberty-properties]
169+
====== Open Liberty
170+
171+
Open Liberty flavour has the following specific configurations
172+
173+
_Configuration_ : *properties*
174+
175+
_Java Packaging_ : *Maven*
176+
177+
[cols="3*", options="header"]
178+
|====================================================================================================================================
179+
| parameter | accepted value | note
180+
| addLombok | _true_ | currently only generation with lombok is supported
181+
| javaRelease | _17+_ | this flavour does not support java lower than 17
182+
|====================================================================================================================================
183+
184+
[#flavour-springboot-3]
185+
====== Spring Boot 3
186+
187+
Spring Boot 3 flavour has the following specific configurations
188+
189+
_Configuration_ : *YAML*
190+
191+
_Java Packaging_ : *Maven*
192+
193+
[cols="3*", options="header"]
194+
|====================================================================================================================================
195+
| parameter | accepted value | note
196+
| addLombok | _true_ | currently only generation with lombok is supported
197+
| javaRelease | _17+_ | this flavour does not support java lower than 17
198+
|====================================================================================================================================
199+

fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/FlavourFacade.java

+54
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,17 @@
99
import org.fugerit.java.core.io.StreamIO;
1010
import org.fugerit.java.core.lang.helpers.ClassHelper;
1111
import org.fugerit.java.core.lang.helpers.StringUtils;
12+
import org.fugerit.java.core.lang.helpers.reflect.MethodHelper;
1213
import org.fugerit.java.core.util.PropsIO;
1314
import org.fugerit.java.doc.project.facade.flavour.FlavourConfig;
1415
import org.fugerit.java.doc.project.facade.flavour.ProcessEntry;
16+
import org.fugerit.java.doc.project.facade.flavour.extra.FlavourExtraConfig;
17+
import org.fugerit.java.doc.project.facade.flavour.extra.FlavourExtraConfigFacade;
18+
import org.fugerit.java.doc.project.facade.flavour.extra.ParamConfig;
1519

1620
import java.io.*;
21+
import java.lang.reflect.Field;
22+
import java.lang.reflect.Method;
1723
import java.util.*;
1824

1925
@Slf4j
@@ -78,6 +84,7 @@ public static void checkFlavour( FlavourContext context, String actualFlavour )
7884
}
7985
log.info( "checkFlavour {} done", actualFlavour );
8086
checkFlavourVersion( context, actualFlavour );
87+
checkFlavourExtraConfig( context, actualFlavour );
8188
}
8289

8390
public static void checkFlavourVersion( FlavourContext context, String actualFlavour ) {
@@ -91,6 +98,53 @@ public static void checkFlavourVersion( FlavourContext context, String actualFla
9198
}
9299
}
93100

101+
public static void checkFlavourExtraConfig( FlavourContext context, String actualFlavour ) {
102+
FlavourExtraConfig flavourExtraConfig = SafeFunction.get( () -> {
103+
String flavourConfigPath = String.format( "config/flavour-extra-config/%s-config.yml", actualFlavour );
104+
log.info( "flavourConfigPath : {}", flavourConfigPath );
105+
try (InputStream is = ClassHelper.loadFromDefaultClassLoader( flavourConfigPath ) ) {
106+
return FlavourExtraConfigFacade.readConfigBlankDefault( is );
107+
}
108+
});
109+
checkFlavourExtraConfig( context, actualFlavour , flavourExtraConfig );
110+
}
111+
112+
public static void checkFlavourExtraConfigParam( String fieldName, ParamConfig paramConfig, String actualFlavour, Object value ) {
113+
log.debug( "fieldName : {}, value : {}", fieldName, value );
114+
if ( value != null && paramConfig.getAcceptOnly() != null && !paramConfig.getAcceptOnly().contains( value.toString() ) ) {
115+
log.debug( "accept only list : {} -> {}", fieldName, paramConfig.getAcceptOnly() );
116+
String message = String.format( "Value '%s' not valid for flavour '%s' and param '%s', refer to flavour documentation.", value, actualFlavour, fieldName );
117+
log.warn( message );
118+
throw new ConfigRuntimeException( message );
119+
}
120+
}
121+
122+
public static void checkFlavourExtraConfig( FlavourContext context, String actualFlavour, FlavourExtraConfig flavourExtraConfig ) {
123+
SafeFunction.applyIfNotNull( flavourExtraConfig.getParamConfig(), () -> {
124+
Field[] fields = FlavourContext.class.getDeclaredFields();
125+
for (Field field : fields) {
126+
String fieldName = field.getName();
127+
ParamConfig paramConfig = flavourExtraConfig.getParamConfig().get( fieldName );
128+
if ( paramConfig != null ) {
129+
Object value = readField( context, field, fieldName );
130+
checkFlavourExtraConfigParam( fieldName, paramConfig, actualFlavour, value );
131+
}
132+
}
133+
} );
134+
}
135+
136+
public static Object readField( FlavourContext context, Field field, String fieldName ) {
137+
return SafeFunction.getSilent( () -> {
138+
if (field.getType().getSimpleName().equalsIgnoreCase("boolean")) {
139+
String methodName = String.format("is%s", MethodHelper.getUpFirstForProperty(fieldName));
140+
return MethodHelper.invoke(context, methodName, MethodHelper.NO_PARAM_TYPES, MethodHelper.NO_PARAM_VALUES);
141+
} else {
142+
return MethodHelper.invokeGetter(context, fieldName);
143+
}
144+
}
145+
);
146+
}
147+
94148
private static void initFlavour( FlavourContext context, String actualFlavour ) throws IOException, TemplateException {
95149
// copy all resources
96150
String listFilePath = String.format( "config/flavour/%s-copy.txt", actualFlavour );
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.fugerit.java.doc.project.facade.flavour.extra;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
6+
import java.util.Map;
7+
8+
public class FlavourExtraConfig {
9+
10+
@Getter @Setter
11+
private Map<String, ParamConfig> paramConfig;
12+
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.fugerit.java.doc.project.facade.flavour.extra;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
5+
import org.fugerit.java.core.function.SafeFunction;
6+
7+
import java.io.InputStream;
8+
9+
public class FlavourExtraConfigFacade {
10+
11+
private static final ObjectMapper MAPPER = new ObjectMapper( new YAMLFactory() );
12+
13+
private FlavourExtraConfigFacade() {}
14+
15+
public static FlavourExtraConfig readConfigWithDefault(InputStream is, FlavourExtraConfig defaultConfig) {
16+
return SafeFunction.get( () -> {
17+
if ( is != null ) {
18+
return MAPPER.readValue( is, FlavourExtraConfig.class );
19+
} else {
20+
return defaultConfig;
21+
}
22+
} );
23+
}
24+
25+
public static FlavourExtraConfig readConfigBlankDefault(InputStream is) {
26+
return readConfigWithDefault( is, new FlavourExtraConfig() );
27+
}
28+
29+
public static FlavourExtraConfig readConfig(InputStream is) {
30+
return readConfigWithDefault( is, null );
31+
}
32+
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.fugerit.java.doc.project.facade.flavour.extra;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
6+
import java.util.List;
7+
8+
public class ParamConfig {
9+
10+
@Getter @Setter
11+
private List<String> acceptOnly;
12+
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
paramConfig:
3+
addLombok:
4+
acceptOnly:
5+
- true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
paramConfig:
3+
addLombok:
4+
acceptOnly:
5+
- true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
paramConfig:
3+
addLombok:
4+
acceptOnly:
5+
- true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
paramConfig:
3+
addLombok:
4+
acceptOnly:
5+
- true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
paramConfig:
3+
addLombok:
4+
acceptOnly:
5+
- true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
paramConfig:
3+
addLombok:
4+
acceptOnly:
5+
- true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
paramConfig:
3+
addLombok:
4+
acceptOnly:
5+
- true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
paramConfig:
3+
addLombok:
4+
acceptOnly:
5+
- true

0 commit comments

Comments
 (0)