예제 #1
0
  @Override
  public Ra decode(BsonReader reader, DecoderContext dc) {
    reader.readStartDocument();
    reader.readName();
    String name = reader.readString();
    reader.readName();
    Double pointsTaken = reader.readDouble();
    reader.readName();
    Codec<LocalDate> dateCodec = codecRegistry.get(LocalDate.class);
    LocalDate previousDutyDay = dateCodec.decode(reader, dc);

    // Read Blackout Date Array
    reader.readName();
    ArrayList<LocalDate> blackoutDates = new ArrayList<>();
    reader.readStartArray();
    while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
      blackoutDates.add(dateCodec.decode(reader, dc));
    }
    reader.readEndArray();

    // Read Duty Date Array
    reader.readName();
    ArrayList<LocalDate> dutyDays = new ArrayList<>();
    reader.readStartArray();
    while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
      dutyDays.add(dateCodec.decode(reader, dc));
    }
    reader.readEndArray();
    reader.readEndDocument();

    return new Ra(name, pointsTaken, previousDutyDay, blackoutDates, dutyDays);
  }
예제 #2
0
 @Override
 public void accept(BsonReader reader) {
   reader.readStartArray();
   while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
     BsonSkipper.valueOf(reader.getCurrentBsonType().name()).accept(reader);
   }
   reader.readEndArray();
 }
예제 #3
0
 private List<Object> readList(final BsonReader reader, final DecoderContext decoderContext) {
   reader.readStartArray();
   List<Object> list = new ArrayList<Object>();
   while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
     list.add(readValue(reader, decoderContext));
   }
   reader.readEndArray();
   return list;
 }
예제 #4
0
 private void writeToListOrMap(
     BsonReader reader, final MapOrListWriterImpl writer, boolean isList, String fieldName) {
   writer.start();
   // If isList is true, then filedName can be null as it is not required while
   // writing
   while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
     if (!isList) {
       fieldName = reader.readName();
     }
     BsonType currentBsonType = reader.getCurrentBsonType();
     switch (currentBsonType) {
       case INT32:
         int readInt32 = reader.readInt32();
         if (readNumbersAsDouble) {
           writeDouble(readInt32, writer, fieldName, isList);
         } else {
           writeInt32(readInt32, writer, fieldName, isList);
         }
         atLeastOneWrite = true;
         break;
       case INT64:
         long readInt64 = reader.readInt64();
         if (readNumbersAsDouble) {
           writeDouble(readInt64, writer, fieldName, isList);
         } else {
           writeInt64(readInt64, writer, fieldName, isList);
         }
         atLeastOneWrite = true;
         break;
       case ARRAY:
         reader.readStartArray();
         writeToListOrMap(reader, (MapOrListWriterImpl) writer.list(fieldName), true, fieldName);
         atLeastOneWrite = true;
         break;
       case BINARY:
         // handle types
         writeBinary(reader, writer, fieldName, isList);
         atLeastOneWrite = true;
         break;
       case BOOLEAN:
         boolean readBoolean = reader.readBoolean();
         writeBoolean(readBoolean, writer, fieldName, isList);
         atLeastOneWrite = true;
         break;
       case DATE_TIME:
         long readDateTime = reader.readDateTime();
         writeDateTime(readDateTime, writer, fieldName, isList);
         atLeastOneWrite = true;
         break;
       case DOCUMENT:
         reader.readStartDocument();
         // To handle nested Documents.
         MapOrListWriterImpl _writer = writer;
         if (!isList) {
           _writer = (MapOrListWriterImpl) writer.map(fieldName);
         } else {
           _writer = (MapOrListWriterImpl) writer.listoftmap(fieldName);
         }
         writeToListOrMap(reader, _writer, false, fieldName);
         atLeastOneWrite = true;
         break;
       case DOUBLE:
         double readDouble = reader.readDouble();
         writeDouble(readDouble, writer, fieldName, isList);
         atLeastOneWrite = true;
         break;
       case JAVASCRIPT:
         final String readJavaScript = reader.readJavaScript();
         writeString(readJavaScript, writer, fieldName, isList);
         atLeastOneWrite = true;
         break;
       case JAVASCRIPT_WITH_SCOPE:
         final String readJavaScriptWithScopeString = reader.readJavaScriptWithScope();
         writeString(readJavaScriptWithScopeString, writer, fieldName, isList);
         atLeastOneWrite = true;
         break;
       case NULL:
         // just read and ignore.
         reader.readNull();
         break;
       case OBJECT_ID:
         writeObjectId(reader, writer, fieldName, isList);
         atLeastOneWrite = true;
         break;
       case STRING:
         final String readString = reader.readString();
         writeString(readString, writer, fieldName, isList);
         atLeastOneWrite = true;
         break;
       case SYMBOL:
         final String readSymbol = reader.readSymbol();
         writeString(readSymbol, writer, fieldName, isList);
         atLeastOneWrite = true;
         break;
       case TIMESTAMP:
         int time = reader.readTimestamp().getTime();
         writeTimeStamp(time, writer, fieldName, isList);
         atLeastOneWrite = true;
         break;
       default:
         // Didn't handled REGULAR_EXPRESSION and DB_POINTER types
         throw new DrillRuntimeException("UnSupported Bson type: " + currentBsonType);
     }
   }
   if (!isList) {
     reader.readEndDocument();
   } else {
     reader.readEndArray();
   }
 }