Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Java, adds dependentSchemas #365

Merged
merged 2 commits into from
Jan 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .circleci/parallel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ elif [ "$JOB_ID" = "testJava17ClientSamples" ]; then

(cd samples/client/petstore/java && mvn test)
(cd samples/client/3_0_3_unit_test/java && mvn test)
(cd samples/client/3_1_0_unit_test/java && mvn test)

else
echo "Running job $JOB_ID"
Expand Down
2 changes: 1 addition & 1 deletion docs/generators/java.md
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|Contains|✓|OAS3
|Default|✓|OAS2,OAS3
|DependentRequired|✓|OAS3
|DependentSchemas||OAS3
|DependentSchemas||OAS3
|Discriminator|✗|OAS2,OAS3
|Else|✗|OAS3
|Enum|✓|OAS2,OAS3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValid
src/main/java/org/openapijsonschematools/client/schemas/validation/CustomIsoparser.java
src/main/java/org/openapijsonschematools/client/schemas/validation/DefaultValueMethod.java
src/main/java/org/openapijsonschematools/client/schemas/validation/DependentRequiredValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/DependentSchemasValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleEnumValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleValueMethod.java
src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.openapijsonschematools.client.schemas.validation;

import org.checkerframework.checker.nullness.qual.Nullable;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class DependentSchemasValidator implements KeywordValidator {
public final Map<String, Class<? extends JsonSchema>> dependentSchemas;

public DependentSchemasValidator(Map<String, Class<? extends JsonSchema>> dependentSchemas) {
this.dependentSchemas = dependentSchemas;
}

@Override
public @Nullable PathToSchemasMap validate(
JsonSchema schema,
@Nullable Object arg,
ValidationMetadata validationMetadata,
@Nullable List<PathToSchemasMap> containsPathToSchemas
) {
if (!(arg instanceof Map<?, ?> mapArg)) {
return null;
}
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
Set<String> presentProperties = new LinkedHashSet<>();
for (Object key: mapArg.keySet()) {
if (key instanceof String) {
presentProperties.add((String) key);
}
}
for(Map.Entry<String, Class<? extends JsonSchema>> entry: dependentSchemas.entrySet()) {
String propName = entry.getKey();
if (!presentProperties.contains(propName)) {
continue;
}
Class<? extends JsonSchema> dependentSchemaClass = entry.getValue();
JsonSchema dependentSchema = JsonSchemaFactory.getInstance(dependentSchemaClass);
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(dependentSchema, arg, validationMetadata);
pathToSchemas.update(otherPathToSchemas);
}
return pathToSchemas;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public abstract class JsonSchema {
public final @Nullable Integer minContains;
public final @Nullable Class<? extends JsonSchema> propertyNames;
public @Nullable Map<String, Set<String>> dependentRequired;
public final @Nullable Map<String, Class<? extends JsonSchema>> dependentSchemas;
private final LinkedHashMap<String, KeywordValidator> keywordToValidator;

protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
Expand Down Expand Up @@ -268,6 +269,13 @@ protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
new DependentRequiredValidator(this.dependentRequired)
);
}
this.dependentSchemas = jsonSchemaInfo.dependentSchemas;
if (this.dependentSchemas != null) {
keywordToValidator.put(
"dependentSchemas",
new DependentSchemasValidator(this.dependentSchemas)
);
}
this.keywordToValidator = keywordToValidator;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,4 +167,9 @@ public JsonSchemaInfo dependentRequired(Map<String, Set<String>> dependentRequir
this.dependentRequired = dependentRequired;
return this;
}
public @Nullable Map<String, Class<? extends JsonSchema>> dependentSchemas = null;
public JsonSchemaInfo dependentSchemas(Map<String, Class<? extends JsonSchema>> dependentSchemas) {
this.dependentSchemas = dependentSchemas;
return this;
}
}
11 changes: 11 additions & 0 deletions samples/client/3_1_0_unit_test/java/.openapi-generator/FILES
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ docs/components/schemas/ContainsKeywordValidation.md
docs/components/schemas/ContainsWithNullInstanceElements.md
docs/components/schemas/DateFormat.md
docs/components/schemas/DateTimeFormat.md
docs/components/schemas/DependentSchemasDependenciesWithEscapedCharacters.md
docs/components/schemas/DependentSchemasDependentSubschemaIncompatibleWithRoot.md
docs/components/schemas/DependentSchemasSingleDependency.md
docs/components/schemas/DurationFormat.md
docs/components/schemas/EmailFormat.md
docs/components/schemas/EmptyDependents.md
Expand Down Expand Up @@ -63,6 +66,7 @@ docs/components/schemas/MinimumValidationWithSignedInteger.md
docs/components/schemas/MinitemsValidation.md
docs/components/schemas/MinlengthValidation.md
docs/components/schemas/MinpropertiesValidation.md
docs/components/schemas/MultipleDependentsRequired.md
docs/components/schemas/MultipleTypesCanBeSpecifiedInAnArray.md
docs/components/schemas/NestedAllofToCheckValidationSemantics.md
docs/components/schemas/NestedAnyofToCheckValidationSemantics.md
Expand Down Expand Up @@ -97,6 +101,7 @@ docs/components/schemas/RequiredValidation.md
docs/components/schemas/RequiredWithEmptyArray.md
docs/components/schemas/RequiredWithEscapedCharacters.md
docs/components/schemas/SimpleEnumValidation.md
docs/components/schemas/SingleDependency.md
docs/components/schemas/SmallMultipleOfLargeInteger.md
docs/components/schemas/StringTypeMatchesStrings.md
docs/components/schemas/TimeFormat.md
Expand Down Expand Up @@ -141,6 +146,9 @@ src/main/java/org/openapijsonschematools/client/components/schemas/ContainsKeywo
src/main/java/org/openapijsonschematools/client/components/schemas/ContainsWithNullInstanceElements.java
src/main/java/org/openapijsonschematools/client/components/schemas/DateFormat.java
src/main/java/org/openapijsonschematools/client/components/schemas/DateTimeFormat.java
src/main/java/org/openapijsonschematools/client/components/schemas/DependentSchemasDependenciesWithEscapedCharacters.java
src/main/java/org/openapijsonschematools/client/components/schemas/DependentSchemasDependentSubschemaIncompatibleWithRoot.java
src/main/java/org/openapijsonschematools/client/components/schemas/DependentSchemasSingleDependency.java
src/main/java/org/openapijsonschematools/client/components/schemas/DurationFormat.java
src/main/java/org/openapijsonschematools/client/components/schemas/EmailFormat.java
src/main/java/org/openapijsonschematools/client/components/schemas/EmptyDependents.java
Expand Down Expand Up @@ -178,6 +186,7 @@ src/main/java/org/openapijsonschematools/client/components/schemas/MinimumValida
src/main/java/org/openapijsonschematools/client/components/schemas/MinitemsValidation.java
src/main/java/org/openapijsonschematools/client/components/schemas/MinlengthValidation.java
src/main/java/org/openapijsonschematools/client/components/schemas/MinpropertiesValidation.java
src/main/java/org/openapijsonschematools/client/components/schemas/MultipleDependentsRequired.java
src/main/java/org/openapijsonschematools/client/components/schemas/MultipleTypesCanBeSpecifiedInAnArray.java
src/main/java/org/openapijsonschematools/client/components/schemas/NestedAllofToCheckValidationSemantics.java
src/main/java/org/openapijsonschematools/client/components/schemas/NestedAnyofToCheckValidationSemantics.java
Expand Down Expand Up @@ -212,6 +221,7 @@ src/main/java/org/openapijsonschematools/client/components/schemas/RequiredValid
src/main/java/org/openapijsonschematools/client/components/schemas/RequiredWithEmptyArray.java
src/main/java/org/openapijsonschematools/client/components/schemas/RequiredWithEscapedCharacters.java
src/main/java/org/openapijsonschematools/client/components/schemas/SimpleEnumValidation.java
src/main/java/org/openapijsonschematools/client/components/schemas/SingleDependency.java
src/main/java/org/openapijsonschematools/client/components/schemas/SmallMultipleOfLargeInteger.java
src/main/java/org/openapijsonschematools/client/components/schemas/StringTypeMatchesStrings.java
src/main/java/org/openapijsonschematools/client/components/schemas/TimeFormat.java
Expand Down Expand Up @@ -266,6 +276,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/ContainsValid
src/main/java/org/openapijsonschematools/client/schemas/validation/CustomIsoparser.java
src/main/java/org/openapijsonschematools/client/schemas/validation/DefaultValueMethod.java
src/main/java/org/openapijsonschematools/client/schemas/validation/DependentRequiredValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/DependentSchemasValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleEnumValidator.java
src/main/java/org/openapijsonschematools/client/schemas/validation/DoubleValueMethod.java
src/main/java/org/openapijsonschematools/client/schemas/validation/EnumValidator.java
Expand Down
5 changes: 5 additions & 0 deletions samples/client/3_1_0_unit_test/java/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,9 @@ allowed input and output types.
| [ContainsWithNullInstanceElements.ContainsWithNullInstanceElements1](docs/components/schemas/ContainsWithNullInstanceElements.md#containswithnullinstanceelements1) | |
| [DateFormat.DateFormat1](docs/components/schemas/DateFormat.md#dateformat1) | |
| [DateTimeFormat.DateTimeFormat1](docs/components/schemas/DateTimeFormat.md#datetimeformat1) | |
| [DependentSchemasDependenciesWithEscapedCharacters.DependentSchemasDependenciesWithEscapedCharacters1](docs/components/schemas/DependentSchemasDependenciesWithEscapedCharacters.md#dependentschemasdependencieswithescapedcharacters1) | |
| [DependentSchemasDependentSubschemaIncompatibleWithRoot.DependentSchemasDependentSubschemaIncompatibleWithRoot1](docs/components/schemas/DependentSchemasDependentSubschemaIncompatibleWithRoot.md#dependentschemasdependentsubschemaincompatiblewithroot1) | |
| [DependentSchemasSingleDependency.DependentSchemasSingleDependency1](docs/components/schemas/DependentSchemasSingleDependency.md#dependentschemassingledependency1) | |
| [DurationFormat.DurationFormat1](docs/components/schemas/DurationFormat.md#durationformat1) | |
| [EmailFormat.EmailFormat1](docs/components/schemas/EmailFormat.md#emailformat1) | |
| [EmptyDependents.EmptyDependents1](docs/components/schemas/EmptyDependents.md#emptydependents1) | |
Expand Down Expand Up @@ -221,6 +224,7 @@ allowed input and output types.
| [MinitemsValidation.MinitemsValidation1](docs/components/schemas/MinitemsValidation.md#minitemsvalidation1) | |
| [MinlengthValidation.MinlengthValidation1](docs/components/schemas/MinlengthValidation.md#minlengthvalidation1) | |
| [MinpropertiesValidation.MinpropertiesValidation1](docs/components/schemas/MinpropertiesValidation.md#minpropertiesvalidation1) | |
| [MultipleDependentsRequired.MultipleDependentsRequired1](docs/components/schemas/MultipleDependentsRequired.md#multipledependentsrequired1) | |
| [MultipleTypesCanBeSpecifiedInAnArray.MultipleTypesCanBeSpecifiedInAnArray1](docs/components/schemas/MultipleTypesCanBeSpecifiedInAnArray.md#multipletypescanbespecifiedinanarray1) | |
| [NestedAllofToCheckValidationSemantics.NestedAllofToCheckValidationSemantics1](docs/components/schemas/NestedAllofToCheckValidationSemantics.md#nestedalloftocheckvalidationsemantics1) | |
| [NestedAnyofToCheckValidationSemantics.NestedAnyofToCheckValidationSemantics1](docs/components/schemas/NestedAnyofToCheckValidationSemantics.md#nestedanyoftocheckvalidationsemantics1) | |
Expand Down Expand Up @@ -255,6 +259,7 @@ allowed input and output types.
| [RequiredWithEmptyArray.RequiredWithEmptyArray1](docs/components/schemas/RequiredWithEmptyArray.md#requiredwithemptyarray1) | |
| [RequiredWithEscapedCharacters.RequiredWithEscapedCharacters1](docs/components/schemas/RequiredWithEscapedCharacters.md#requiredwithescapedcharacters1) | |
| [SimpleEnumValidation.SimpleEnumValidation1](docs/components/schemas/SimpleEnumValidation.md#simpleenumvalidation1) | |
| [SingleDependency.SingleDependency1](docs/components/schemas/SingleDependency.md#singledependency1) | |
| [SmallMultipleOfLargeInteger.SmallMultipleOfLargeInteger1](docs/components/schemas/SmallMultipleOfLargeInteger.md#smallmultipleoflargeinteger1) | |
| [StringTypeMatchesStrings.StringTypeMatchesStrings1](docs/components/schemas/StringTypeMatchesStrings.md#stringtypematchesstrings1) | |
| [TimeFormat.TimeFormat1](docs/components/schemas/TimeFormat.md#timeformat1) | |
Expand Down
Loading