diff --git a/src/generators/java/renderers/ClassRenderer.ts b/src/generators/java/renderers/ClassRenderer.ts index e4093754db..00404abd4b 100644 --- a/src/generators/java/renderers/ClassRenderer.ts +++ b/src/generators/java/renderers/ClassRenderer.ts @@ -49,6 +49,14 @@ ${this.indent(this.renderBlock(content, 2))} content.push(additionalProperty); } + if (this.model.patternProperties !== undefined) { + for (const [pattern, patternModel] of Object.entries(this.model.patternProperties)) { + const propertyName = getUniquePropertyName(this.model, `${pattern}${DefaultPropertyNames.patternProperties}`); + const renderedPatternProperty = await this.runPropertyPreset(propertyName, patternModel, PropertyType.patternProperties); + content.push(renderedPatternProperty); + } + } + return this.renderBlock(content); } @@ -73,6 +81,15 @@ ${this.indent(this.renderBlock(content, 2))} content.push(this.renderBlock([getter, setter])); } + if (this.model.patternProperties !== undefined) { + for (const [pattern, patternModel] of Object.entries(this.model.patternProperties)) { + const propertyName = getUniquePropertyName(this.model, `${pattern}${DefaultPropertyNames.patternProperties}`); + const getter = await this.runGetterPreset(propertyName, patternModel, PropertyType.patternProperties); + const setter = await this.runSetterPreset(propertyName, patternModel, PropertyType.patternProperties); + content.push(this.renderBlock([getter, setter])); + } + } + return this.renderBlock(content, 2); } @@ -92,7 +109,7 @@ export const JAVA_DEFAULT_CLASS_PRESET: ClassPreset = { property({ renderer, propertyName, property, type }) { propertyName = renderer.nameProperty(propertyName, property); let propertyType = renderer.renderType(property); - if (type === PropertyType.additionalProperty) { + if (type === PropertyType.additionalProperty || type === PropertyType.patternProperties) { propertyType = `Map`; } return `private ${propertyType} ${propertyName};`; @@ -101,7 +118,7 @@ export const JAVA_DEFAULT_CLASS_PRESET: ClassPreset = { propertyName = renderer.nameProperty(propertyName, property); const getterName = `get${FormatHelpers.toPascalCase(propertyName)}`; let getterType = renderer.renderType(property); - if (type === PropertyType.additionalProperty) { + if (type === PropertyType.additionalProperty || type === PropertyType.patternProperties) { getterType = `Map`; } return `public ${getterType} ${getterName}() { return this.${propertyName}; }`; @@ -110,7 +127,7 @@ export const JAVA_DEFAULT_CLASS_PRESET: ClassPreset = { propertyName = renderer.nameProperty(propertyName, property); const setterName = FormatHelpers.toPascalCase(propertyName); let setterType = renderer.renderType(property); - if (type === PropertyType.additionalProperty) { + if (type === PropertyType.additionalProperty || type === PropertyType.patternProperties) { setterType = `Map`; } return `public void set${setterName}(${setterType} ${propertyName}) { this.${propertyName} = ${propertyName}; }`; diff --git a/test/generators/java/JavaGenerator.spec.ts b/test/generators/java/JavaGenerator.spec.ts index 1e39857730..5539aea172 100644 --- a/test/generators/java/JavaGenerator.spec.ts +++ b/test/generators/java/JavaGenerator.spec.ts @@ -19,6 +19,11 @@ describe('JavaGenerator', () => { members: { oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }], }, array_type: { type: 'array', items: [{ type: 'string' }, { type: 'number' }] }, }, + patternProperties: { + '^S(.?*)test&': { + type: 'string' + } + }, required: ['street_name', 'city', 'state', 'house_number', 'array_type'], }; const expected = `public class Address { @@ -30,6 +35,7 @@ describe('JavaGenerator', () => { private Object members; private Object[] arrayType; private Map additionalProperties; + private Map sTestPatternProperties; public String getStreetName() { return this.streetName; } public void setStreetName(String streetName) { this.streetName = streetName; } @@ -54,6 +60,9 @@ describe('JavaGenerator', () => { public Map getAdditionalProperties() { return this.additionalProperties; } public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; } + + public Map getSTestPatternProperties() { return this.sTestPatternProperties; } + public void setSTestPatternProperties(Map sTestPatternProperties) { this.sTestPatternProperties = sTestPatternProperties; } }`; const inputModel = await generator.process(doc);