This is an automated email from the ASF dual-hosted git repository.
karp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/rocketmq-schema-registry.git
The following commit(s) were added to refs/heads/main by this push:
new 565b0d3 [ISSUE #39] Parse idl fields to return getSchemaResponse (#42)
565b0d3 is described below
commit 565b0d321dcdf3c5825e70a7b2557f4442ba0068
Author: wangfan <[email protected]>
AuthorDate: Wed Aug 17 15:09:27 2022 +0800
[ISSUE #39] Parse idl fields to return getSchemaResponse (#42)
---
.../common/dto/{FieldDto.java => Field.java} | 8 +------
.../registry/common/dto/GetSchemaResponse.java | 28 ++++++++++++++++++++++
.../schema/registry/common/utils/StorageUtil.java | 4 ++--
.../schema/registry/core/api/RequestProcessor.java | 1 -
4 files changed, 31 insertions(+), 10 deletions(-)
diff --git
a/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/FieldDto.java
b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/Field.java
similarity index 90%
rename from
common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/FieldDto.java
rename to
common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/Field.java
index e2f6daf..e201a9c 100644
---
a/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/FieldDto.java
+++
b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/Field.java
@@ -32,7 +32,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@Builder
@AllArgsConstructor
-public class FieldDto extends BaseDto {
+public class Field extends BaseDto {
private static final long serialVersionUID = -8336499483006254487L;
@ApiModelProperty(value = "Position of the field")
@@ -50,15 +50,9 @@ public class FieldDto extends BaseDto {
@ApiModelProperty(value = "Can the field be null, default is true")
private Boolean isNullable = true;
- @ApiModelProperty(value = "Size of the field")
- private Integer size;
-
@ApiModelProperty(value = "Default value of the field")
private String defaultValue;
- @ApiModelProperty(value = "Is a sorted field, default is false")
- private Boolean isSortable = false;
-
@ApiModelProperty(value = "This filed sorted type, like: ascending,
descending, ignore")
private String sortType;
diff --git
a/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/GetSchemaResponse.java
b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/GetSchemaResponse.java
index 446463d..a8ab363 100644
---
a/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/GetSchemaResponse.java
+++
b/common/src/main/java/org/apache/rocketmq/schema/registry/common/dto/GetSchemaResponse.java
@@ -17,6 +17,9 @@
package org.apache.rocketmq.schema.registry.common.dto;
+import java.util.List;
+import java.util.stream.Collectors;
+import org.apache.avro.Schema;
import org.apache.rocketmq.schema.registry.common.QualifiedName;
import org.apache.rocketmq.schema.registry.common.model.Dependency;
import org.apache.rocketmq.schema.registry.common.model.SchemaRecordInfo;
@@ -50,6 +53,9 @@ public class GetSchemaResponse extends BaseDto {
@ApiModelProperty(value = "Schema idl")
private String idl;
+ @ApiModelProperty(value = "Schema idl")
+ private List<Field> fields;
+
@ApiModelProperty(value = "Schema dependency")
private Dependency dependency;
@@ -64,6 +70,28 @@ public class GetSchemaResponse extends BaseDto {
this.idl = schemaRecordInfo.getIdl();
this.dependency = schemaRecordInfo.getDependency();
this.type = schemaRecordInfo.getType();
+ this.fields = parse(idl);
}
+ private List<Field> parse(String schemaIdl) {
+ Schema schema = new Schema.Parser().parse(schemaIdl);
+ return schema.getFields().stream().map(field -> {
+ String type = field.schema().getType().getName();
+ // ["null", "double"] represent this field is nullable
+ if (field.schema().isUnion() && field.schema().getTypes().size()
== 2) {
+ type = field.schema().getTypes().get(1).getName();
+ }
+ String defaultVal = field.hasDefaultValue() ?
field.defaultVal().toString() : "null";
+ return Field.builder()
+ .pos(field.pos())
+ .name(field.name())
+ .type(type)
+ .comment(field.doc())
+ .isNullable(field.schema().isNullable())
+ .defaultValue(defaultVal)
+ .sortType(field.order().name())
+ .extra("")
+ .build();
+ }).collect(Collectors.toList());
+ }
}
diff --git
a/common/src/main/java/org/apache/rocketmq/schema/registry/common/utils/StorageUtil.java
b/common/src/main/java/org/apache/rocketmq/schema/registry/common/utils/StorageUtil.java
index 706f977..0607f3c 100644
---
a/common/src/main/java/org/apache/rocketmq/schema/registry/common/utils/StorageUtil.java
+++
b/common/src/main/java/org/apache/rocketmq/schema/registry/common/utils/StorageUtil.java
@@ -20,7 +20,7 @@ package org.apache.rocketmq.schema.registry.common.utils;
import org.apache.rocketmq.schema.registry.common.context.RequestContext;
import
org.apache.rocketmq.schema.registry.common.context.StorageServiceContext;
import org.apache.rocketmq.schema.registry.common.dto.AuditDto;
-import org.apache.rocketmq.schema.registry.common.dto.FieldDto;
+import org.apache.rocketmq.schema.registry.common.dto.Field;
import org.apache.rocketmq.schema.registry.common.dto.SchemaDetailDto;
import org.apache.rocketmq.schema.registry.common.dto.SchemaDto;
import org.apache.rocketmq.schema.registry.common.dto.SchemaMetaDto;
@@ -54,7 +54,7 @@ public class StorageUtil {
mapping(SchemaRecordDto.class, SchemaRecordInfo.class);
mapping(SubjectDto.class, SubjectInfo.class);
mapping(AuditDto.class, AuditInfo.class);
- mapping(FieldDto.class, FieldInfo.class);
+ mapping(Field.class, FieldInfo.class);
}
};
dozerBeanMapper.addMapping(builder);
diff --git
a/core/src/main/java/org/apache/rocketmq/schema/registry/core/api/RequestProcessor.java
b/core/src/main/java/org/apache/rocketmq/schema/registry/core/api/RequestProcessor.java
index 8a9ada6..7579658 100644
---
a/core/src/main/java/org/apache/rocketmq/schema/registry/core/api/RequestProcessor.java
+++
b/core/src/main/java/org/apache/rocketmq/schema/registry/core/api/RequestProcessor.java
@@ -51,7 +51,6 @@ public class RequestProcessor {
* TODO: 2. add async process
*/
- long time = System.currentTimeMillis();
try {
log.info("Handling request: {} for {}", requestName,
qualifiedName);
return supplier.get();