You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2009/05/13 19:51:45 UTC
svn commit: r774449 - in /hadoop/avro/trunk: CHANGES.txt
src/java/org/apache/avro/Protocol.java src/java/org/apache/avro/Schema.java
Author: cutting
Date: Wed May 13 17:51:40 2009
New Revision: 774449
URL: http://svn.apache.org/viewvc?rev=774449&view=rev
Log:
AVRO-21. Default Java namespace from containing definition.
Modified:
hadoop/avro/trunk/CHANGES.txt
hadoop/avro/trunk/src/java/org/apache/avro/Protocol.java
hadoop/avro/trunk/src/java/org/apache/avro/Schema.java
Modified: hadoop/avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/CHANGES.txt?rev=774449&r1=774448&r2=774449&view=diff
==============================================================================
--- hadoop/avro/trunk/CHANGES.txt (original)
+++ hadoop/avro/trunk/CHANGES.txt Wed May 13 17:51:40 2009
@@ -47,3 +47,5 @@
AVRO-31. Fix Java package imports in generated specific classes.
(sharad via cutting)
+
+ AVRO-21. Default Java namespace from containing definition. (cutting)
Modified: hadoop/avro/trunk/src/java/org/apache/avro/Protocol.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/java/org/apache/avro/Protocol.java?rev=774449&r1=774448&r2=774449&view=diff
==============================================================================
--- hadoop/avro/trunk/src/java/org/apache/avro/Protocol.java (original)
+++ hadoop/avro/trunk/src/java/org/apache/avro/Protocol.java Wed May 13 17:51:40 2009
@@ -234,6 +234,7 @@
JsonNode nameNode = json.getFieldValue("namespace");
if (nameNode == null) return; // no namespace defined
this.namespace = nameNode.getTextValue();
+ types.space(this.namespace);
}
private void parseName(JsonNode json) {
Modified: hadoop/avro/trunk/src/java/org/apache/avro/Schema.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/java/org/apache/avro/Schema.java?rev=774449&r1=774448&r2=774449&view=diff
==============================================================================
--- hadoop/avro/trunk/src/java/org/apache/avro/Schema.java (original)
+++ hadoop/avro/trunk/src/java/org/apache/avro/Schema.java Wed May 13 17:51:40 2009
@@ -163,7 +163,7 @@
public String toString() { return toString(new Names()); }
/** Render this, resolving names.*/
- public String toString(Map<String,Schema> names) { return toString(); }
+ String toString(Names names) { return toString(); }
public boolean equals(Object o) {
if (o == this) return true;
@@ -186,6 +186,7 @@
public Schema schema() { return schema; }
public JsonNode defaultValue() { return defaultValue; }
public boolean equals(Object other) {
+ if (other == this) return true;
if (!(other instanceof Field)) return false;
Field that = (Field) other;
return (position == that.position) &&
@@ -196,20 +197,40 @@
}
}
- static class RecordSchema extends Schema {
- private final String name;
- private final String namespace;
+ private static abstract class NamedSchema extends Schema {
+ protected final String name;
+ protected final String space;
+ public NamedSchema(Type type, String name, String space) {
+ super(type);
+ this.name = name;
+ this.space = space;
+ }
+ public String getName() { return name; }
+ public String getNamespace() { return space; }
+ public String nameString(Names names) {
+ return (name==null?"":"\"name\": \""+name+"\", ")
+ +((space==null||space.equals(names.space()))
+ ?"":"\"namespace\": \""+space+"\", ");
+ }
+ public boolean equalNames(NamedSchema that) {
+ return (name==null ? that.name==null : name.equals(that.name))
+ && (space==null ? that.space==null : space.equals(that.space));
+ }
+ public int hashCode() {
+ return getType().hashCode()
+ + (name==null ? 0 : name.hashCode())
+ + (space==null ? 0 : space.hashCode());
+ }
+ }
+
+ private static class RecordSchema extends NamedSchema {
private Map<String,Field> fields;
private Iterable<Map.Entry<String,Schema>> fieldSchemas;
private final boolean isError;
- public RecordSchema(String name, String namespace, boolean isError) {
- super(Type.RECORD);
- this.name = name;
- this.namespace = namespace;
+ public RecordSchema(String name, String space, boolean isError) {
+ super(Type.RECORD, name, space);
this.isError = isError;
}
- public String getName() { return name; }
- public String getNamespace() { return namespace; }
public boolean isError() { return isError; }
public Map<String, Field> getFields() { return fields; }
public Iterable<Map.Entry<String, Schema>> getFieldSchemas() {
@@ -232,17 +253,17 @@
}
public boolean equals(Object o) {
if (o == this) return true;
- return o instanceof RecordSchema
- && fields.equals(((RecordSchema)o).fields);
+ if (!(o instanceof RecordSchema)) return false;
+ RecordSchema that = (RecordSchema)o;
+ return equalNames(that) && fields.equals(that.fields);
}
- public int hashCode() { return getType().hashCode() + fields.hashCode(); }
- public String toString(Map<String,Schema> names) {
+ public int hashCode() { return super.hashCode() + fields.hashCode(); }
+ public String toString(Names names) {
if (this.equals(names.get(name))) return "\""+name+"\"";
else if (name != null) names.put(name, this);
StringBuilder buffer = new StringBuilder();
buffer.append("{\"type\": \""+(isError?"error":"record")+"\", "
- +(name==null?"":"\"name\": \""+name+"\", ")
- +"\"fields\": [");
+ +nameString(names) +"\"fields\": [");
int count = 0;
for (Map.Entry<String, Field> entry : fields.entrySet()) {
buffer.append("{\"name\": \"");
@@ -262,7 +283,7 @@
}
}
- static class ArraySchema extends Schema {
+ private static class ArraySchema extends Schema {
private final Schema elementType;
public ArraySchema(Schema elementType) {
super(Type.ARRAY);
@@ -275,7 +296,7 @@
&& elementType.equals(((ArraySchema)o).elementType);
}
public int hashCode() {return getType().hashCode()+elementType.hashCode();}
- public String toString(Map<String,Schema> names) {
+ public String toString(Names names) {
StringBuilder buffer = new StringBuilder();
buffer.append("{\"type\": \"array\", \"items\": ");
buffer.append(elementType.toString(names));
@@ -284,7 +305,7 @@
}
}
- static class MapSchema extends Schema {
+ private static class MapSchema extends Schema {
private final Schema valueType;
public MapSchema(Schema valueType) {
super(Type.MAP);
@@ -299,7 +320,7 @@
public int hashCode() {
return getType().hashCode()+valueType.hashCode();
}
- public String toString(Map<String,Schema> names) {
+ public String toString(Names names) {
StringBuilder buffer = new StringBuilder();
buffer.append("{\"type\": \"map\", \"values\": ");
buffer.append(valueType.toString(names));
@@ -308,7 +329,7 @@
}
}
- static class UnionSchema extends Schema {
+ private static class UnionSchema extends Schema {
private final List<Schema> types;
public UnionSchema(List<Schema> types) {
super(Type.UNION);
@@ -331,7 +352,7 @@
return o instanceof UnionSchema && types.equals(((UnionSchema)o).types);
}
public int hashCode() {return getType().hashCode()+types.hashCode();}
- public String toString(Map<String,Schema> names) {
+ public String toString(Names names) {
StringBuilder buffer = new StringBuilder();
buffer.append("[");
int count = 0;
@@ -345,42 +366,42 @@
}
}
- static class StringSchema extends Schema {
+ private static class StringSchema extends Schema {
public StringSchema() { super(Type.STRING); }
public String toString() { return "\"string\""; }
}
- static class BytesSchema extends Schema {
+ private static class BytesSchema extends Schema {
public BytesSchema() { super(Type.BYTES); }
public String toString() { return "\"bytes\""; }
}
- static class IntSchema extends Schema {
+ private static class IntSchema extends Schema {
public IntSchema() { super(Type.INT); }
public String toString() { return "\"int\""; }
}
- static class LongSchema extends Schema {
+ private static class LongSchema extends Schema {
public LongSchema() { super(Type.LONG); }
public String toString() { return "\"long\""; }
}
- static class FloatSchema extends Schema {
+ private static class FloatSchema extends Schema {
public FloatSchema() { super(Type.FLOAT); }
public String toString() { return "\"float\""; }
}
- static class DoubleSchema extends Schema {
+ private static class DoubleSchema extends Schema {
public DoubleSchema() { super(Type.DOUBLE); }
public String toString() { return "\"double\""; }
}
- static class BooleanSchema extends Schema {
+ private static class BooleanSchema extends Schema {
public BooleanSchema() { super(Type.BOOLEAN); }
public String toString() { return "\"boolean\""; }
}
- static class NullSchema extends Schema {
+ private static class NullSchema extends Schema {
public NullSchema() { super(Type.NULL); }
public String toString() { return "\"null\""; }
}
@@ -422,6 +443,7 @@
static class Names extends LinkedHashMap<String, Schema> {
private Names defaults = PRIMITIVES;
+ private String space; // default namespace
public Names(Names defaults) { this.defaults = defaults; }
public Names() { this(PRIMITIVES); }
@@ -445,6 +467,8 @@
result.clear(name);
return result;
}
+ public String space() { return space; }
+ public void space(String space) { this.space = space; }
private void clear(String name) { super.put(name, null); }
}
@@ -465,7 +489,7 @@
JsonNode nameNode = schema.getFieldValue("name");
String name = nameNode != null ? nameNode.getTextValue() : null;
JsonNode spaceNode = schema.getFieldValue("namespace");
- String space = spaceNode != null ? spaceNode.getTextValue() : null;
+ String space = spaceNode!=null?spaceNode.getTextValue():names.space();
RecordSchema result =
new RecordSchema(name, space, type.equals("error"));
if (name != null) names.put(name, result);