You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by th...@apache.org on 2017/05/19 17:12:22 UTC
[08/36] avro git commit: [fix] remove @author from javadoc,
add some useful comment instead, reformat file to 2 space indentation
[fix] remove @author from javadoc, add some useful comment instead, reformat file to 2 space indentation
Project: http://git-wip-us.apache.org/repos/asf/avro/repo
Commit: http://git-wip-us.apache.org/repos/asf/avro/commit/1158152d
Tree: http://git-wip-us.apache.org/repos/asf/avro/tree/1158152d
Diff: http://git-wip-us.apache.org/repos/asf/avro/diff/1158152d
Branch: refs/heads/master
Commit: 1158152de6debcf8e5a532585a68a39ab64d78ed
Parents: ce16a3f
Author: Zoltan Farkas <zo...@yahoo.com>
Authored: Mon Apr 4 11:33:13 2016 -0400
Committer: Zoltan Farkas <zo...@yahoo.com>
Committed: Mon Apr 4 11:33:13 2016 -0400
----------------------------------------------------------------------
.../avro/compiler/idl/SchemaResolver.java | 357 +++++++++----------
1 file changed, 176 insertions(+), 181 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/avro/blob/1158152d/lang/java/compiler/src/main/java/org/apache/avro/compiler/idl/SchemaResolver.java
----------------------------------------------------------------------
diff --git a/lang/java/compiler/src/main/java/org/apache/avro/compiler/idl/SchemaResolver.java b/lang/java/compiler/src/main/java/org/apache/avro/compiler/idl/SchemaResolver.java
index df0c7ac..9dabdd4 100644
--- a/lang/java/compiler/src/main/java/org/apache/avro/compiler/idl/SchemaResolver.java
+++ b/lang/java/compiler/src/main/java/org/apache/avro/compiler/idl/SchemaResolver.java
@@ -28,202 +28,197 @@ import org.apache.avro.Schema;
import org.codehaus.jackson.JsonNode;
/**
- *
- * @author zoly
+ * Utility class to resolve schemas that are unavailable at the time they are referenced in the IDL.
*/
+
final class SchemaResolver {
- private SchemaResolver() { }
+ private SchemaResolver() {
+ }
- private static final String UR_SCHEMA_ATTR = "org.apache.avro.compiler.idl.unresolved.name";
+ private static final String UR_SCHEMA_ATTR = "org.apache.avro.compiler.idl.unresolved.name";
- static Schema unresolvedSchema(final String name) {
- Schema schema = Schema.createRecord("UnresolvedSchema", "unresolved schema",
- "org.apache.avro.compiler", false, Collections.EMPTY_LIST);
- schema.addProp(UR_SCHEMA_ATTR, name);
- return schema;
- }
+ static Schema unresolvedSchema(final String name) {
+ Schema schema = Schema.createRecord("UnresolvedSchema", "unresolved schema",
+ "org.apache.avro.compiler", false, Collections.EMPTY_LIST);
+ schema.addProp(UR_SCHEMA_ATTR, name);
+ return schema;
+ }
- static boolean isUnresolvedSchema(final Schema schema) {
- return (schema.getType() == Schema.Type.RECORD && schema.getProp(UR_SCHEMA_ATTR) != null);
- }
+ static boolean isUnresolvedSchema(final Schema schema) {
+ return (schema.getType() == Schema.Type.RECORD && schema.getProp(UR_SCHEMA_ATTR) != null);
+ }
- static String getUnresolvedSchemaName(final Schema schema) {
- String name = schema.getProp(UR_SCHEMA_ATTR);
- if (name == null) {
- throw new IllegalArgumentException("Schema " + schema + " is not a unresolved schema");
- } else {
- return name;
- }
+ static String getUnresolvedSchemaName(final Schema schema) {
+ String name = schema.getProp(UR_SCHEMA_ATTR);
+ if (name == null) {
+ throw new IllegalArgumentException("Schema " + schema + " is not a unresolved schema");
+ } else {
+ return name;
}
-
-
-
- static Protocol resolve(final Protocol protocol) {
- Protocol result = new Protocol(protocol.getName(), protocol.getDoc(), protocol.getNamespace());
- final Collection<Schema> types = protocol.getTypes();
- List<Schema> newSchemas = new ArrayList(types.size());
- Map<String, Schema> processed = new HashMap<String, Schema>();
- for (Schema schema : types) {
- newSchemas.add(resolve(schema, protocol, processed));
- }
- result.setTypes(newSchemas);
-
- for (Map.Entry<String, Protocol.Message> entry : protocol.getMessages().entrySet()) {
- Protocol.Message value = entry.getValue();
- Protocol.Message nvalue;
- if (value.isOneWay()) {
- Schema request = value.getRequest();
- nvalue = result.createMessage(value.getName(), value.getDoc(),
- value.getObjectProps(), intern(request, processed));
- } else {
- Schema request = value.getRequest();
- Schema response = value.getResponse();
- Schema errors = value.getErrors();
- nvalue = result.createMessage(value.getName(), value.getDoc(),
- value.getObjectProps(), intern(request, processed),
- intern(response, processed), intern(errors, processed));
- }
- result.getMessages().put(entry.getKey(), nvalue);
- }
- copyProps(protocol, result);
- return result;
+ }
+
+ static Protocol resolve(final Protocol protocol) {
+ Protocol result = new Protocol(protocol.getName(), protocol.getDoc(), protocol.getNamespace());
+ final Collection<Schema> types = protocol.getTypes();
+ List<Schema> newSchemas = new ArrayList(types.size());
+ Map<String, Schema> processed = new HashMap<String, Schema>();
+ for (Schema schema : types) {
+ newSchemas.add(resolve(schema, protocol, processed));
}
-
- private static void copyProps(final JsonProperties from, final JsonProperties to) {
- for (Map.Entry<String, JsonNode> entry : from.getJsonProps().entrySet()) {
- to.addProp(entry.getKey(), entry.getValue());
- }
+ result.setTypes(newSchemas);
+
+ for (Map.Entry<String, Protocol.Message> entry : protocol.getMessages().entrySet()) {
+ Protocol.Message value = entry.getValue();
+ Protocol.Message nvalue;
+ if (value.isOneWay()) {
+ Schema request = value.getRequest();
+ nvalue = result.createMessage(value.getName(), value.getDoc(),
+ value.getObjectProps(), intern(request, processed));
+ } else {
+ Schema request = value.getRequest();
+ Schema response = value.getResponse();
+ Schema errors = value.getErrors();
+ nvalue = result.createMessage(value.getName(), value.getDoc(),
+ value.getObjectProps(), intern(request, processed),
+ intern(response, processed), intern(errors, processed));
+ }
+ result.getMessages().put(entry.getKey(), nvalue);
}
+ copyProps(protocol, result);
+ return result;
+ }
-
- static Schema resolve(final Schema schema, final Protocol protocol, final Map<String, Schema> processed) {
- final String fullName = schema.getFullName();
- if (fullName != null && processed.containsKey(fullName)) {
- return processed.get(schema.getFullName());
- } else if (isUnresolvedSchema(schema)) {
- final String unresolvedSchemaName = getUnresolvedSchemaName(schema);
- Schema type = protocol.getType(unresolvedSchemaName);
- if (type == null) {
- throw new IllegalArgumentException("Cannot resolve " + unresolvedSchemaName);
- }
- return resolve(type, protocol, processed);
- } else {
- switch (schema.getType()) {
- case RECORD:
- Schema createRecord = Schema.createRecord(schema.getName(), schema.getDoc(), schema.getNamespace(),
- schema.isError());
- processed.put(schema.getFullName(), createRecord);
- final List<Schema.Field> currFields = schema.getFields();
- List<Schema.Field> newFields = new ArrayList<Schema.Field>(currFields.size());
- for (Schema.Field field : currFields) {
- Schema.Field nf = new Schema.Field(field.name(), resolve(field.schema(), protocol, processed),
- field.doc(), field.defaultVal(), field.order());
- for (String alias : field.aliases()) {
- nf.addAlias(alias);
- }
- newFields.add(nf);
- }
- createRecord.setFields(newFields);
- final LogicalType lt = schema.getLogicalType();
- if (lt != null) {
- lt.addToSchema(createRecord);
- }
- copyProps(schema, createRecord);
- return createRecord;
- case MAP:
- Schema result = Schema.createMap(resolve(schema.getValueType(), protocol, processed));
- copyProps(schema, result);
- return result;
- case ARRAY:
- Schema aresult = Schema.createArray(resolve(schema.getElementType(), protocol, processed));
- copyProps(schema, aresult);
- return aresult;
- case UNION:
- final List<Schema> uTypes = schema.getTypes();
- List<Schema> newTypes = new ArrayList<Schema>(uTypes.size());
- for (Schema s : uTypes) {
- newTypes.add(resolve(s, protocol, processed));
- }
- Schema bresult = Schema.createUnion(newTypes);
- copyProps(schema, bresult);
- return bresult;
- case ENUM:
- case FIXED:
- case STRING:
- case BYTES:
- case INT:
- case LONG:
- case FLOAT:
- case DOUBLE:
- case BOOLEAN:
- case NULL:
- return schema;
- default:
- throw new RuntimeException("Unknown type: " + schema);
+ private static void copyProps(final JsonProperties from, final JsonProperties to) {
+ for (Map.Entry<String, JsonNode> entry : from.getJsonProps().entrySet()) {
+ to.addProp(entry.getKey(), entry.getValue());
+ }
+ }
+
+ static Schema resolve(final Schema schema, final Protocol protocol, final Map<String, Schema> processed) {
+ final String fullName = schema.getFullName();
+ if (fullName != null && processed.containsKey(fullName)) {
+ return processed.get(schema.getFullName());
+ } else if (isUnresolvedSchema(schema)) {
+ final String unresolvedSchemaName = getUnresolvedSchemaName(schema);
+ Schema type = protocol.getType(unresolvedSchemaName);
+ if (type == null) {
+ throw new IllegalArgumentException("Cannot resolve " + unresolvedSchemaName);
+ }
+ return resolve(type, protocol, processed);
+ } else {
+ switch (schema.getType()) {
+ case RECORD:
+ Schema createRecord = Schema.createRecord(schema.getName(), schema.getDoc(), schema.getNamespace(),
+ schema.isError());
+ processed.put(schema.getFullName(), createRecord);
+ final List<Schema.Field> currFields = schema.getFields();
+ List<Schema.Field> newFields = new ArrayList<Schema.Field>(currFields.size());
+ for (Schema.Field field : currFields) {
+ Schema.Field nf = new Schema.Field(field.name(), resolve(field.schema(), protocol, processed),
+ field.doc(), field.defaultVal(), field.order());
+ for (String alias : field.aliases()) {
+ nf.addAlias(alias);
}
- }
+ newFields.add(nf);
+ }
+ createRecord.setFields(newFields);
+ final LogicalType lt = schema.getLogicalType();
+ if (lt != null) {
+ lt.addToSchema(createRecord);
+ }
+ copyProps(schema, createRecord);
+ return createRecord;
+ case MAP:
+ Schema result = Schema.createMap(resolve(schema.getValueType(), protocol, processed));
+ copyProps(schema, result);
+ return result;
+ case ARRAY:
+ Schema aresult = Schema.createArray(resolve(schema.getElementType(), protocol, processed));
+ copyProps(schema, aresult);
+ return aresult;
+ case UNION:
+ final List<Schema> uTypes = schema.getTypes();
+ List<Schema> newTypes = new ArrayList<Schema>(uTypes.size());
+ for (Schema s : uTypes) {
+ newTypes.add(resolve(s, protocol, processed));
+ }
+ Schema bresult = Schema.createUnion(newTypes);
+ copyProps(schema, bresult);
+ return bresult;
+ case ENUM:
+ case FIXED:
+ case STRING:
+ case BYTES:
+ case INT:
+ case LONG:
+ case FLOAT:
+ case DOUBLE:
+ case BOOLEAN:
+ case NULL:
+ return schema;
+ default:
+ throw new RuntimeException("Unknown type: " + schema);
+ }
}
+ }
- public static Schema intern(final Schema schema, final Map<String, Schema> processed) {
- if (schema == null) {
- return null;
- }
- final String fullName = schema.getFullName();
- if (fullName != null && processed.containsKey(fullName)) {
- return processed.get(schema.getFullName());
- } else {
- switch (schema.getType()) {
- case RECORD:
- Schema createRecord = Schema.createRecord(schema.getName(), schema.getDoc(), schema.getNamespace(),
- schema.isError());
- processed.put(schema.getFullName(), createRecord);
- final List<Schema.Field> currFields = schema.getFields();
- List<Schema.Field> newFields = new ArrayList<Schema.Field>(currFields.size());
- for (Schema.Field field : currFields) {
- Schema.Field nf = new Schema.Field(field.name(), intern(field.schema(), processed),
- field.doc(), field.defaultVal(), field.order());
- for (String alias : field.aliases()) {
- nf.addAlias(alias);
- }
- newFields.add(nf);
- }
- createRecord.setFields(newFields);
- final LogicalType lt = schema.getLogicalType();
- if (lt != null) {
- lt.addToSchema(createRecord);
- }
- copyProps(schema, createRecord);
- return createRecord;
- case MAP:
- return Schema.createMap(intern(schema.getValueType(), processed));
- case ARRAY:
- return Schema.createArray(intern(schema.getElementType(), processed));
- case UNION:
- final List<Schema> uTypes = schema.getTypes();
- List<Schema> newTypes = new ArrayList<Schema>(uTypes.size());
- for (Schema s : uTypes) {
- newTypes.add(intern(s, processed));
- }
- return Schema.createUnion(newTypes);
- case ENUM:
- case FIXED:
- case STRING:
- case BYTES:
- case INT:
- case LONG:
- case FLOAT:
- case DOUBLE:
- case BOOLEAN:
- case NULL:
- return schema;
- default:
- throw new RuntimeException("Unknown type: " + schema);
+ public static Schema intern(final Schema schema, final Map<String, Schema> processed) {
+ if (schema == null) {
+ return null;
+ }
+ final String fullName = schema.getFullName();
+ if (fullName != null && processed.containsKey(fullName)) {
+ return processed.get(schema.getFullName());
+ } else {
+ switch (schema.getType()) {
+ case RECORD:
+ Schema createRecord = Schema.createRecord(schema.getName(), schema.getDoc(), schema.getNamespace(),
+ schema.isError());
+ processed.put(schema.getFullName(), createRecord);
+ final List<Schema.Field> currFields = schema.getFields();
+ List<Schema.Field> newFields = new ArrayList<Schema.Field>(currFields.size());
+ for (Schema.Field field : currFields) {
+ Schema.Field nf = new Schema.Field(field.name(), intern(field.schema(), processed),
+ field.doc(), field.defaultVal(), field.order());
+ for (String alias : field.aliases()) {
+ nf.addAlias(alias);
}
- }
+ newFields.add(nf);
+ }
+ createRecord.setFields(newFields);
+ final LogicalType lt = schema.getLogicalType();
+ if (lt != null) {
+ lt.addToSchema(createRecord);
+ }
+ copyProps(schema, createRecord);
+ return createRecord;
+ case MAP:
+ return Schema.createMap(intern(schema.getValueType(), processed));
+ case ARRAY:
+ return Schema.createArray(intern(schema.getElementType(), processed));
+ case UNION:
+ final List<Schema> uTypes = schema.getTypes();
+ List<Schema> newTypes = new ArrayList<Schema>(uTypes.size());
+ for (Schema s : uTypes) {
+ newTypes.add(intern(s, processed));
+ }
+ return Schema.createUnion(newTypes);
+ case ENUM:
+ case FIXED:
+ case STRING:
+ case BYTES:
+ case INT:
+ case LONG:
+ case FLOAT:
+ case DOUBLE:
+ case BOOLEAN:
+ case NULL:
+ return schema;
+ default:
+ throw new RuntimeException("Unknown type: " + schema);
+ }
}
-
-
-
+ }
}