Changeset 4122
- Timestamp:
- 2010-07-07 14:35:45 (3 years ago)
- Location:
- projects/lily/trunk/repository/impl/src
- Files:
-
- 3 edited
-
main/avro/lily.avpr (modified) (2 diffs)
-
main/java/org/lilycms/repository/avro/AvroConverter.java (modified) (4 diffs)
-
test/java/org/lilycms/repository/impl/test/AvroConverterTest.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
projects/lily/trunk/repository/impl/src/main/avro/lily.avpr
r4121 r4122 10 10 {"name": "namespace", "type": ["string", "null"]}, 11 11 {"name": "name", "type": "string"} 12 ] 13 }, 14 15 { 16 "name": "AvroField", 17 "type": "record", 18 "fields": [ 19 {"name": "name", "type": "string"}, 20 {"name": "primitiveType", "type": "string"}, 21 {"name": "multiValue", "type": "boolean"}, 22 {"name": "hierarchical", "type": "boolean"}, 23 {"name": "value", "type": "bytes"} 12 24 ] 13 25 }, … … 23 35 {"name": "scopeRecordTypeIds", "type": {"type": "map", "values": "string"}}, 24 36 {"name": "scopeRecordTypeVersions", "type": {"type": "map", "values": "long"}}, 25 {"name": "fields", "type": {"type": " map", "values": "bytes"}},37 {"name": "fields", "type": {"type": "array", "items": "AvroField"}}, 26 38 {"name": "fieldsToDelete", "type": {"type": "array", "items": "string"}} 27 39 ] -
projects/lily/trunk/repository/impl/src/main/java/org/lilycms/repository/avro/AvroConverter.java
r4121 r4122 54 54 } 55 55 } 56 56 57 // Fields 57 Map<Utf8, ByteBuffer> fields = avroRecord.fields;58 if (fields != null) {59 for (Entry<Utf8, ByteBuffer> field : fields.entrySet()) {60 QName name = decodeQName(convert(field.getKey()));61 Object value = typeManager.getFieldTypeByName(name).getValueType().fromBytes(field.getValue().array());58 if (avroRecord.fields != null) { 59 for (AvroField field : avroRecord.fields) { 60 QName name = decodeQName(convert(field.name)); 61 ValueType valueType = typeManager.getValueType(convert(field.primitiveType), field.multiValue, field.hierarchical); 62 Object value = valueType.fromBytes(field.value.array()); 62 63 record.setField(name, value); 63 64 } 64 65 } 66 65 67 // FieldsToDelete 66 68 GenericArray<Utf8> avroFieldsToDelete = avroRecord.fieldsToDelete; … … 104 106 } 105 107 } 108 106 109 // Fields 107 avroRecord.fields = new HashMap<Utf8, ByteBuffer>();110 avroRecord.fields = new GenericData.Array<AvroField>(record.getFields().size(), Schema.createArray(AvroField.SCHEMA$)); 108 111 for (Entry<QName, Object> field : record.getFields().entrySet()) { 109 QName name = field.getKey(); 112 AvroField avroField = new AvroField(); 113 avroField.name = convert(encodeQName(field.getKey())); 114 110 115 FieldType fieldType; 111 116 try { 112 fieldType = typeManager.getFieldTypeByName( name);117 fieldType = typeManager.getFieldTypeByName(field.getKey()); 113 118 } catch (FieldTypeNotFoundException e) { 114 119 throw convert(e); … … 116 121 throw convert(e); 117 122 } 123 124 avroField.primitiveType = convert(fieldType.getValueType().getPrimitive().getName()); 125 avroField.multiValue = fieldType.getValueType().isMultiValue(); 126 avroField.hierarchical = fieldType.getValueType().isHierarchical(); 127 118 128 byte[] value = fieldType.getValueType().toBytes(field.getValue()); 119 129 ByteBuffer byteBuffer = ByteBuffer.allocate(value.length); … … 121 131 byteBuffer.put(value); 122 132 byteBuffer.reset(); 123 avroRecord.fields.put(new Utf8(encodeQName(name)), byteBuffer); 124 } 133 134 avroField.value = byteBuffer; 135 136 avroRecord.fields.add(avroField); 137 } 138 125 139 // FieldsToDelete 126 140 List<QName> fieldsToDelete = record.getFieldsToDelete(); -
projects/lily/trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/AvroConverterTest.java
r4100 r4122 346 346 fieldType.getValueType(); 347 347 expectLastCall().andReturn(valueType).anyTimes(); 348 control.replay(); 348 typeManager.getValueType("STRING", false, false); 349 expectLastCall().andReturn(valueType).anyTimes(); 350 control.replay(); 351 349 352 converter = new AvroConverter(); 350 353 converter.setRepository(repository);
Note: See TracChangeset
for help on using the changeset viewer.