Adds isDateTime to CodegenModel (#7657)

This reverts commit 2ec96f7f9057ea67f7362d7d23d39a00e430410a.
This commit is contained in:
Justin Black 2020-10-12 00:08:08 -07:00 committed by GitHub
parent 2ec96f7f90
commit 8fd9991ec2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 142 additions and 2 deletions

View File

@ -64,7 +64,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
public String defaultValue;
public String arrayModelType;
public boolean isAlias; // Is this effectively an alias of another simple type
public boolean isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble, isDate;
public boolean isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble, isDate, isDateTime;
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
public List<CodegenProperty> allVars = new ArrayList<CodegenProperty>(); // all properties (with parent's properties)
public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>(); // a list of required properties
@ -578,6 +578,14 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
this.isDate = isDate;
}
@Override
public boolean getIsDateTime() { return isDateTime; }
@Override
public void setIsDateTime(boolean isDateTime) {
this.isDateTime = isDateTime;
}
// indicates if the model component has validation on the root level schema
// this will be true when minItems or minProperties is set
public boolean hasValidation() {
@ -679,6 +687,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
isFloat == that.isFloat &&
isDouble == that.isDouble &&
isDate == that.isDate &&
isDateTime == that.isDateTime &&
hasVars == that.hasVars &&
emptyVars == that.emptyVars &&
hasMoreModels == that.hasMoreModels &&
@ -755,7 +764,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
getDescription(), getClassVarName(), getModelJson(), getDataType(), getXmlPrefix(), getXmlNamespace(),
getXmlName(), getClassFilename(), getUnescapedDescription(), getDiscriminator(), getDefaultValue(),
getArrayModelType(), isAlias, isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble,
isDate,
isDate, isDateTime,
getVars(), getAllVars(), getRequiredVars(), getOptionalVars(), getReadOnlyVars(), getReadWriteVars(),
getParentVars(), getAllowableValues(), getMandatory(), getAllMandatory(), getImports(), hasVars,
isEmptyVars(), hasMoreModels, hasEnums, isEnum, isNullable, hasRequired, hasOptional, isArrayModel,
@ -802,6 +811,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
sb.append(", isFloat=").append(isFloat);
sb.append(", isDouble=").append(isDouble);
sb.append(", isDate=").append(isDate);
sb.append(", isDateTime=").append(isDateTime);
sb.append(", vars=").append(vars);
sb.append(", allVars=").append(allVars);
sb.append(", requiredVars=").append(requiredVars);

View File

@ -503,5 +503,13 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
public void setIsDate(boolean isDate) {
this.isDate = isDate;
}
@Override
public boolean getIsDateTime() { return isDateTime; }
@Override
public void setIsDateTime(boolean isDateTime) {
this.isDateTime = isDateTime;
}
}

View File

@ -477,6 +477,14 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
this.isDate = isDate;
}
@Override
public boolean getIsDateTime() { return isDateTime; }
@Override
public void setIsDateTime(boolean isDateTime) {
this.isDateTime = isDateTime;
}
public Map<String, Object> getVendorExtensions() {
return vendorExtensions;
}

View File

@ -298,6 +298,14 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
this.isDate = isDate;
}
@Override
public boolean getIsDateTime() { return isDateTime; }
@Override
public void setIsDateTime(boolean isDateTime) {
this.isDateTime = isDateTime;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("CodegenResponse{");

View File

@ -2520,6 +2520,11 @@ public class DefaultCodegen implements CodegenConfig {
} else { // int32 format
m.isInteger = Boolean.TRUE;
}
} else if (ModelUtils.isDateTimeSchema(schema)) {
// NOTE: DateTime schemas as CodegenModel is a rare use case and may be removed at a later date.
// Sync of properties is done for consistency with other data types like CodegenParameter/CodegenProperty.
ModelUtils.syncValidationProperties(schema, m);
m.isDateTime = Boolean.TRUE;
} else if (ModelUtils.isDateSchema(schema)) {
// NOTE: Date schemas as CodegenModel is a rare use case and may be removed at a later date.
// Sync of properties is done for consistency with other data types like CodegenParameter/CodegenProperty.

View File

@ -64,4 +64,8 @@ public interface IJsonSchemaValidationProperties {
boolean getIsDate();
void setIsDate(boolean isDate);
boolean getIsDateTime();
void setIsDateTime(boolean isDateTime);
}

View File

@ -2386,5 +2386,37 @@ public class DefaultCodegenTest {
assertEquals(co.bodyParams.get(0).isDate, true);
assertEquals(co.responses.get(0).isString, false);
assertEquals(co.responses.get(0).isDate, true);
modelName = "DateTimeWithValidation";
sc = openAPI.getComponents().getSchemas().get(modelName);
cm = codegen.fromModel(modelName, sc);
assertEquals(cm.isString, false);
assertEquals(cm.isDateTime, true);
modelName = "ObjectWithDateTimeWithValidation";
sc = openAPI.getComponents().getSchemas().get(modelName);
cm = codegen.fromModel(modelName, sc);
assertEquals(cm.getVars().get(0).isString, false);
assertEquals(cm.getVars().get(0).isDateTime, true);
path = "/ref_date_time_with_validation/{dateTime}";
operation = openAPI.getPaths().get(path).getPost();
co = codegen.fromOperation(path, "POST", operation, null);
assertEquals(co.pathParams.get(0).isString, false);
assertEquals(co.pathParams.get(0).isDateTime, true);
assertEquals(co.bodyParams.get(0).isString, false);
assertEquals(co.bodyParams.get(0).isDateTime, true);
assertEquals(co.responses.get(0).isString, false);
assertEquals(co.responses.get(0).isDateTime, true);
path = "/date_time_with_validation/{dateTime}";
operation = openAPI.getPaths().get(path).getPost();
co = codegen.fromOperation(path, "POST", operation, null);
assertEquals(co.pathParams.get(0).isString, false);
assertEquals(co.pathParams.get(0).isDateTime, true);
assertEquals(co.bodyParams.get(0).isString, false);
assertEquals(co.bodyParams.get(0).isDateTime, true);
assertEquals(co.responses.get(0).isString, false);
assertEquals(co.responses.get(0).isDateTime, true);
}
}

View File

@ -66,6 +66,60 @@ paths:
type: string
format: date
pattern: '^2020.*'
/ref_date_time_with_validation/{dateTime}:
post:
tags:
- isX
operationId: refDateTimeWithValidation
parameters:
- name: dateTime
in: path
required: true
schema:
$ref: '#/components/schemas/DateTimeWithValidation'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DateTimeWithValidation'
required: true
responses:
200:
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/DateTimeWithValidation'
/date_time_with_validation/{dateTime}:
post:
tags:
- isX
operationId: dateTimeWithValidation
parameters:
- name: dateTime
in: path
required: true
schema:
type: string
format: date-time
pattern: '^2020.*'
requestBody:
content:
application/json:
schema:
type: string
format: date-time
pattern: '^2020.*'
required: true
responses:
200:
description: success
content:
application/json:
schema:
type: string
format: date-time
pattern: '^2020.*'
components:
schemas:
DateWithValidation:
@ -79,4 +133,15 @@ components:
type: string
format: date
pattern: '^2020.*'
DateTimeWithValidation:
type: string
format: date-time
pattern: '^2020.*'
ObjectWithDateTimeWithValidation:
type: object
properties:
dateWithValidation:
type: string
format: date-time
pattern: '^2020.*'
securitySchemes: {}