private void processRecordField(
     CommonRecord record, GenericRecord deltaRecord, String fieldName) {
   CommonRecord nextRecord = null;
   CommonValue nextValue = record.getField(fieldName);
   if (nextValue != null
       && nextValue.isRecord()
       && nextValue
           .getRecord()
           .getSchema()
           .getFullName()
           .equals(deltaRecord.getSchema().getFullName())) {
     nextRecord = nextValue.getRecord();
     GenericFixed uuidFixed = (GenericFixed) deltaRecord.get(UUID);
     if (uuidFixed != null) {
       UUID uuid = AvroGenericUtils.createUuidFromFixed(uuidFixed);
       // Checking if the uuid was changed
       if (!uuid.equals(nextRecord.getUuid())) {
         records.remove(nextRecord.getUuid());
         records.put(uuid, nextRecord);
         nextRecord.setUuid(uuid);
       }
     }
   } else {
     nextRecord = createCommonRecord(deltaRecord);
     record.setField(fieldName, commonFactory.createCommonValue(nextRecord));
   }
   updateRecord(nextRecord, deltaRecord);
 }
 private void processArrayField(CommonRecord record, GenericArray array, String fieldName) {
   List<CommonValue> currentArray;
   CommonValue arrayValue = record.getField(fieldName);
   if (arrayValue != null && arrayValue.isArray()) {
     currentArray = arrayValue.getArray().getList();
   } else {
     currentArray = new LinkedList<CommonValue>();
     record.setField(
         fieldName,
         commonFactory.createCommonValue(
             commonFactory.createCommonArray(array.getSchema(), currentArray)));
   }
   if (!array.isEmpty()) {
     Object rawItem = array.get(0);
     if (AvroGenericUtils.isRecord(rawItem)) {
       GenericArray<GenericRecord> recordItems = (GenericArray<GenericRecord>) array;
       // Adding new records
       for (GenericRecord item : recordItems) {
         CommonRecord newRecord = createCommonRecord(item);
         updateRecord(newRecord, item);
         currentArray.add(commonFactory.createCommonValue(newRecord));
       }
     } else if (AvroGenericUtils.isFixed(rawItem)) {
       GenericArray<GenericFixed> fixedItems = (GenericArray<GenericFixed>) array;
       if (AvroGenericUtils.isUuid(rawItem)) {
         // Removing items with given uuids
         for (GenericFixed item : fixedItems) {
           UUID currentUuid = AvroGenericUtils.createUuidFromFixed(item);
           Iterator<CommonValue> valueIt = currentArray.iterator();
           while (valueIt.hasNext()) {
             CommonRecord currentRecord = valueIt.next().getRecord();
             if (currentRecord.getUuid().equals(currentUuid)) {
               valueIt.remove();
               records.remove(currentUuid);
               break;
             }
           }
         }
       } else {
         for (GenericFixed item : fixedItems) {
           currentArray.add(
               commonFactory.createCommonValue(
                   commonFactory.createCommonFixed(item.getSchema(), item.bytes())));
         }
       }
     } else {
       // Adding new primitive items
       for (Object item : array) {
         currentArray.add(commonFactory.createCommonValue(item));
       }
     }
   }
 }