Skip to content

Commit 7c44d45

Browse files
authored
feat: render pattern properties for Java class (#285)
1 parent 3e3d0dd commit 7c44d45

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

src/generators/java/renderers/ClassRenderer.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ ${this.indent(this.renderBlock(content, 2))}
4949
content.push(additionalProperty);
5050
}
5151

52+
if (this.model.patternProperties !== undefined) {
53+
for (const [pattern, patternModel] of Object.entries(this.model.patternProperties)) {
54+
const propertyName = getUniquePropertyName(this.model, `${pattern}${DefaultPropertyNames.patternProperties}`);
55+
const renderedPatternProperty = await this.runPropertyPreset(propertyName, patternModel, PropertyType.patternProperties);
56+
content.push(renderedPatternProperty);
57+
}
58+
}
59+
5260
return this.renderBlock(content);
5361
}
5462

@@ -73,6 +81,15 @@ ${this.indent(this.renderBlock(content, 2))}
7381
content.push(this.renderBlock([getter, setter]));
7482
}
7583

84+
if (this.model.patternProperties !== undefined) {
85+
for (const [pattern, patternModel] of Object.entries(this.model.patternProperties)) {
86+
const propertyName = getUniquePropertyName(this.model, `${pattern}${DefaultPropertyNames.patternProperties}`);
87+
const getter = await this.runGetterPreset(propertyName, patternModel, PropertyType.patternProperties);
88+
const setter = await this.runSetterPreset(propertyName, patternModel, PropertyType.patternProperties);
89+
content.push(this.renderBlock([getter, setter]));
90+
}
91+
}
92+
7693
return this.renderBlock(content, 2);
7794
}
7895

@@ -92,7 +109,7 @@ export const JAVA_DEFAULT_CLASS_PRESET: ClassPreset<ClassRenderer> = {
92109
property({ renderer, propertyName, property, type }) {
93110
propertyName = renderer.nameProperty(propertyName, property);
94111
let propertyType = renderer.renderType(property);
95-
if (type === PropertyType.additionalProperty) {
112+
if (type === PropertyType.additionalProperty || type === PropertyType.patternProperties) {
96113
propertyType = `Map<String, ${propertyType}>`;
97114
}
98115
return `private ${propertyType} ${propertyName};`;
@@ -101,7 +118,7 @@ export const JAVA_DEFAULT_CLASS_PRESET: ClassPreset<ClassRenderer> = {
101118
propertyName = renderer.nameProperty(propertyName, property);
102119
const getterName = `get${FormatHelpers.toPascalCase(propertyName)}`;
103120
let getterType = renderer.renderType(property);
104-
if (type === PropertyType.additionalProperty) {
121+
if (type === PropertyType.additionalProperty || type === PropertyType.patternProperties) {
105122
getterType = `Map<String, ${getterType}>`;
106123
}
107124
return `public ${getterType} ${getterName}() { return this.${propertyName}; }`;
@@ -110,7 +127,7 @@ export const JAVA_DEFAULT_CLASS_PRESET: ClassPreset<ClassRenderer> = {
110127
propertyName = renderer.nameProperty(propertyName, property);
111128
const setterName = FormatHelpers.toPascalCase(propertyName);
112129
let setterType = renderer.renderType(property);
113-
if (type === PropertyType.additionalProperty) {
130+
if (type === PropertyType.additionalProperty || type === PropertyType.patternProperties) {
114131
setterType = `Map<String, ${setterType}>`;
115132
}
116133
return `public void set${setterName}(${setterType} ${propertyName}) { this.${propertyName} = ${propertyName}; }`;

test/generators/java/JavaGenerator.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ describe('JavaGenerator', () => {
1919
members: { oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }], },
2020
array_type: { type: 'array', items: [{ type: 'string' }, { type: 'number' }] },
2121
},
22+
patternProperties: {
23+
'^S(.?*)test&': {
24+
type: 'string'
25+
}
26+
},
2227
required: ['street_name', 'city', 'state', 'house_number', 'array_type'],
2328
};
2429
const expected = `public class Address {
@@ -30,6 +35,7 @@ describe('JavaGenerator', () => {
3035
private Object members;
3136
private Object[] arrayType;
3237
private Map<String, Object> additionalProperties;
38+
private Map<String, String> sTestPatternProperties;
3339
3440
public String getStreetName() { return this.streetName; }
3541
public void setStreetName(String streetName) { this.streetName = streetName; }
@@ -54,6 +60,9 @@ describe('JavaGenerator', () => {
5460
5561
public Map<String, Object> getAdditionalProperties() { return this.additionalProperties; }
5662
public void setAdditionalProperties(Map<String, Object> additionalProperties) { this.additionalProperties = additionalProperties; }
63+
64+
public Map<String, String> getSTestPatternProperties() { return this.sTestPatternProperties; }
65+
public void setSTestPatternProperties(Map<String, String> sTestPatternProperties) { this.sTestPatternProperties = sTestPatternProperties; }
5766
}`;
5867

5968
const inputModel = await generator.process(doc);

0 commit comments

Comments
 (0)