Skip to content

Commit bf0f521

Browse files
authored
Merge pull request #668 from bci-oss/538-llow-customizing-the-class-name-generating-POJO
Add Prefix and Postfix to Java Generation
2 parents 797c7d1 + 86449e5 commit bf0f521

File tree

19 files changed

+269
-71
lines changed

19 files changed

+269
-71
lines changed

core/esmf-aspect-model-java-generator/src/main/java/org/eclipse/esmf/aspectmodel/java/AspectModelJavaUtil.java

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public static String determinePropertyType( final Optional<Characteristic> optio
173173
return String.format( "Either<%s,%s>", left, right );
174174
}
175175

176-
return getDataType( dataType, codeGenerationConfig.importTracker() );
176+
return getDataType( dataType, codeGenerationConfig.importTracker(), codeGenerationConfig );
177177
}
178178

179179
public static String determineCollectionAspectClassDefinition( final StructureElement element,
@@ -186,7 +186,7 @@ public static String determineCollectionAspectClassDefinition( final StructureEl
186186
final Characteristic characteristic = property.getEffectiveCharacteristic().orElseThrow( error );
187187
if ( characteristic instanceof Collection ) {
188188
final String collectionType = determineCollectionType( (Collection) characteristic, false, codeGenerationConfig );
189-
final String dataType = getDataType( characteristic.getDataType(), codeGenerationConfig.importTracker() );
189+
final String dataType = getDataType( characteristic.getDataType(), codeGenerationConfig.importTracker(), codeGenerationConfig );
190190
return String.format( "public class %s implements CollectionAspect<%s,%s>", element.getName(), collectionType, dataType );
191191
}
192192
}
@@ -199,7 +199,7 @@ public static String determineComplexTypeClassDefinition( final ComplexType elem
199199
if ( element.isAbstractEntity() ) {
200200
classDefinitionBuilder.append( "abstract " );
201201
}
202-
classDefinitionBuilder.append( "class " ).append( element.getName() );
202+
classDefinitionBuilder.append( "class " ).append( generateClassName( element, codeGenerationConfig ) );
203203
classDefinitionBuilder.append( genericClassSignature( element ) );
204204
if ( element.getExtends().isPresent() ) {
205205
final ComplexType extendedComplexType = element.getExtends().get();
@@ -265,20 +265,24 @@ private static String determineCollectionType( final Collection collection, fina
265265

266266
if ( collection.isAllowDuplicates() && collection.isOrdered() ) {
267267
codeGenerationConfig.importTracker().importExplicit( List.class );
268-
return containerType( List.class, getDataType( dataType, codeGenerationConfig.importTracker() ), elementConstraint );
268+
return containerType( List.class, getDataType( dataType, codeGenerationConfig.importTracker(), codeGenerationConfig ),
269+
elementConstraint );
269270
}
270271
if ( !collection.isAllowDuplicates() && collection.isOrdered() ) {
271272
codeGenerationConfig.importTracker().importExplicit( LinkedHashSet.class );
272-
return containerType( LinkedHashSet.class, getDataType( dataType, codeGenerationConfig.importTracker() ), elementConstraint );
273+
return containerType( LinkedHashSet.class, getDataType( dataType, codeGenerationConfig.importTracker(), codeGenerationConfig ),
274+
elementConstraint );
273275
}
274276
if ( collection.isAllowDuplicates() && !collection.isOrdered() ) {
275277
codeGenerationConfig.importTracker().importExplicit( java.util.Collection.class );
276-
return containerType( java.util.Collection.class, getDataType( dataType, codeGenerationConfig.importTracker() ),
278+
return containerType( java.util.Collection.class,
279+
getDataType( dataType, codeGenerationConfig.importTracker(), codeGenerationConfig ),
277280
elementConstraint );
278281
}
279282
if ( !collection.isAllowDuplicates() && !collection.isOrdered() ) {
280283
codeGenerationConfig.importTracker().importExplicit( Set.class );
281-
return containerType( Set.class, getDataType( dataType, codeGenerationConfig.importTracker() ), elementConstraint );
284+
return containerType( Set.class, getDataType( dataType, codeGenerationConfig.importTracker(), codeGenerationConfig ),
285+
elementConstraint );
282286
}
283287
throw new CodeGenerationException( "Could not determine Java collection type for " + collection.getName() );
284288
}
@@ -304,11 +308,16 @@ public static String containerType( final Class<?> containerClass, final String
304308
* @param importTracker the import tracker
305309
* @return a {@link String} containing the definition of the Java Data Type
306310
*/
307-
public static String getDataType( final Optional<Type> dataType, final ImportTracker importTracker ) {
311+
public static String getDataType( final Optional<Type> dataType, final ImportTracker importTracker,
312+
final JavaCodeGenerationConfig codeGenerationConfig ) {
308313
return dataType.map( type -> {
309314
final Type actualDataType = dataType.get();
310315
if ( actualDataType instanceof ComplexType ) {
311-
return ((ComplexType) actualDataType).getName();
316+
final String complexDataType = ((ComplexType) actualDataType).getName();
317+
if ( (!codeGenerationConfig.namePrefix().isBlank() || !codeGenerationConfig.namePostfix().isBlank()) ) {
318+
return codeGenerationConfig.namePrefix() + complexDataType + codeGenerationConfig.namePostfix();
319+
}
320+
return complexDataType;
312321
}
313322

314323
if ( actualDataType instanceof Scalar ) {
@@ -353,7 +362,7 @@ public static String toConstant( final String upperOrLowerCamel ) {
353362
}
354363
return TO_CONSTANT.convert( StringUtils.capitalize( upperOrLowerCamel ) );
355364
}
356-
365+
357366
public static boolean isAllUppercaseWithUnderscore( final String upperOrLowerCamel ) {
358367
return upperOrLowerCamel != null && upperOrLowerCamel.matches( "[A-Z0-9_]+" );
359368
}
@@ -487,7 +496,8 @@ public static String generateFilterCompare( final Optional<Type> optionalDataTyp
487496
public static String getCharacteristicJavaType( final Property property, final JavaCodeGenerationConfig codeGenerationConfig ) {
488497
final Supplier<RuntimeException> error = () -> new CodeGenerationException( "No data type found for Property " + property.getName() );
489498
if ( hasContainerType( property ) ) {
490-
return getDataType( property.getCharacteristic().orElseThrow( error ).getDataType(), codeGenerationConfig.importTracker() );
499+
return getDataType( property.getCharacteristic().orElseThrow( error ).getDataType(), codeGenerationConfig.importTracker(),
500+
codeGenerationConfig );
491501
}
492502

493503
return property.getEffectiveCharacteristic().flatMap( Characteristic::getDataType ).map( type -> {
@@ -559,6 +569,13 @@ public static String genericClassSignature( final StructureElement element ) {
559569
return generics.isEmpty() ? "" : "<" + generics + ">";
560570
}
561571

572+
public static String generateClassName( final StructureElement element, final JavaCodeGenerationConfig config ) {
573+
if ( (!config.namePrefix().isBlank() || !config.namePostfix().isBlank()) && element.is( StructureElement.class ) ) {
574+
return config.namePrefix() + element.getName() + config.namePostfix();
575+
}
576+
return element.getName();
577+
}
578+
562579
/**
563580
* Generates the comma-separated list of arguments in a constructor call
564581
*

core/esmf-aspect-model-java-generator/src/main/java/org/eclipse/esmf/aspectmodel/java/JavaCodeGenerationConfig.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ public record JavaCodeGenerationConfig(
2929
String packageName,
3030
ImportTracker importTracker,
3131
boolean executeLibraryMacros,
32-
File templateLibFile
32+
File templateLibFile,
33+
String namePrefix,
34+
String namePostfix
35+
3336
) implements GenerationConfig {
3437
public JavaCodeGenerationConfig {
3538
if ( packageName == null ) {
@@ -44,5 +47,11 @@ public record JavaCodeGenerationConfig(
4447
if ( executeLibraryMacros && !templateLibFile.exists() ) {
4548
throw new CodeGenerationException( "Incorrect configuration. Please provide a valid path to the velocity template library file." );
4649
}
50+
if ( namePrefix == null ) {
51+
namePrefix = "";
52+
}
53+
if ( namePostfix == null ) {
54+
namePostfix = "";
55+
}
4756
}
4857
}

core/esmf-aspect-model-java-generator/src/main/java/org/eclipse/esmf/aspectmodel/java/pojo/EnumerationJavaArtifactGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public JavaArtifact apply( final E element, final JavaCodeGenerationConfig confi
5656
.put( "className", element.getName() )
5757
.put( "codeGenerationConfig", config )
5858
.put( "currentYear", Year.now() )
59-
.put( "dataType", AspectModelJavaUtil.getDataType( element.getDataType(), config.importTracker() ) )
59+
.put( "dataType", AspectModelJavaUtil.getDataType( element.getDataType(), config.importTracker(), config ) )
6060
.put( "Entity", Entity.class )
6161
.put( "enumeration", element )
6262
.put( "importTracker", importTracker )

core/esmf-aspect-model-java-generator/src/main/java/org/eclipse/esmf/aspectmodel/java/pojo/StructureElementJavaArtifactGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public JavaArtifact apply( final E element, final JavaCodeGenerationConfig confi
131131

132132
final String generatedSource = new TemplateEngine( context, engineConfiguration ).apply( "java-pojo" );
133133
try {
134-
return new JavaArtifact( Roaster.format( generatedSource ), element.getName(),
134+
return new JavaArtifact( Roaster.format( generatedSource ), AspectModelJavaUtil.generateClassName( element, config ),
135135
config.packageName() );
136136
} catch ( final Exception exception ) {
137137
throw new CodeGenerationException( generatedSource, exception );

core/esmf-aspect-model-java-generator/src/main/resources/java-pojo-class-body-lib.vm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ ${util.determineCollectionAspectClassDefinition( $element, $codeGenerationConfig
2828
${util.generateAbstractEntityClassAnnotations( $complexElement, $codeGenerationConfig, $extendingEntities )}
2929
${util.determineComplexTypeClassDefinition( $complexElement, $codeGenerationConfig )}
3030
#else
31-
public class $element.getName()${util.genericClassSignature( $element )} {
31+
public class ${util.generateClassName( $element, $codeGenerationConfig )}${util.genericClassSignature( $element )} {
3232
#end
3333
#foreach( $property in $element.properties )
3434
#javaPojoProperty( $property )

core/esmf-aspect-model-java-generator/src/main/resources/java-pojo-constructor-lib.vm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
$codeGenerationConfig.importTracker().importExplicit( $JsonCreator )
1919
@JsonCreator
2020
#end
21-
public ${element.name}(
21+
public ${util.generateClassName( $element, $codeGenerationConfig )}(
2222
$util.constructorArguments( $allProperties, $codeGenerationConfig, $enableJacksonAnnotations )
2323
) #if( $needInitializer ) throws DatatypeConfigurationException #end {
2424
super(

core/esmf-aspect-model-java-generator/src/main/resources/java-pojo-equals-method-lib.vm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@ if (o == null || getClass() != o.getClass()) {
3131
#if( $element.getProperties().isEmpty() ) return true
3232
#else
3333
#set( $objectEqualsExpression = $util.objectEqualsExpression( $element ) )
34+
#set( $className = ${util.generateClassName( $element, $codeGenerationConfig )} )
3435
#if( $objectEqualsExpression && !$objectEqualsExpression.empty )
35-
final $element.getName() that = ($element.getName())o;
36+
final $className that = ($className)o;
3637
return $objectEqualsExpression
3738
#else
3839
return true

core/esmf-aspect-model-java-generator/src/main/resources/java-static-class-body-lib.vm

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@
1313
#parse( "java-static-class-property-lib.vm" )
1414

1515
#macro( javaStaticClassBody )
16-
$codeGenerationConfig.importTracker().importExplicit( "${codeGenerationConfig.packageName()}.${element.getName()}" )
16+
#set( $className = ${util.generateClassName( $element, $codeGenerationConfig )} )
17+
$codeGenerationConfig.importTracker().importExplicit( "${codeGenerationConfig.packageName()}.${className}" )
1718
/**
18-
* Generated class {@link Meta${element.getName()}}.
19+
* Generated class {@link Meta${className}}.
1920
*/
20-
public class Meta${element.getName()} implements StaticMetaClass<${element.getName()}>, PropertyContainer {
21+
public class Meta${className} implements StaticMetaClass<${className}>, PropertyContainer {
2122
public static final String NAMESPACE = "${modelUrnPrefix}";
2223
public static final String MODEL_ELEMENT_URN = NAMESPACE + "${element.getName()}";
2324

@@ -49,8 +50,8 @@ static {
4950
#end
5051
#end
5152

52-
public Class<${element.getName()}> getModelClass() {
53-
return ${element.getName()}.class;
53+
public Class<${className}> getModelClass() {
54+
return ${className}.class;
5455
}
5556

5657
@Override
@@ -65,13 +66,13 @@ static {
6566

6667
@Override
6768
public String getName() {
68-
return "${element.getName()}";
69+
return "${className}";
6970
}
7071

7172
#if( $element.getExtends().isPresent() )
72-
#set( $propertyTypeParameter = "? super ${element.getName()}" )
73+
#set( $propertyTypeParameter = "? super ${className}" )
7374
#else
74-
#set( $propertyTypeParameter = ${element.getName()} )
75+
#set( $propertyTypeParameter = ${className} )
7576
#end
7677
@Override
7778
public List<StaticProperty<$propertyTypeParameter, ?>> getProperties() {

0 commit comments

Comments
 (0)