protected Result doWrite()

in mr/src/main/java/org/elasticsearch/hadoop/serialization/builder/JdkValueWriter.java [55:155]


    protected Result doWrite(Object value, Generator generator, String parentField) {
        if (value == null) {
            generator.writeNull();
        }
        else if (value instanceof String) {
            generator.writeString((String) value);
        }
        else if (value instanceof Integer) {
            generator.writeNumber(((Integer) value).intValue());
        }
        else if (value instanceof Long) {
            generator.writeNumber(((Long) value).longValue());
        }
        else if (value instanceof Float) {
            generator.writeNumber(((Float) value).floatValue());
        }
        else if (value instanceof Double) {
            generator.writeNumber(((Double) value).doubleValue());
        }
        else if (value instanceof Short) {
            generator.writeNumber(((Short) value).shortValue());
        }
        else if (value instanceof Byte) {
            generator.writeNumber(((Byte) value).byteValue());
        }
        // Big Decimal/Integer
        else if (value instanceof Number) {
            // check double vs long
            Number n = ((Number) value);
            double d = n.doubleValue();
            if (Math.floor(d) == d) {
                generator.writeNumber(n.longValue());
            }
            else {
                generator.writeNumber(d);
            }
        }
        else if (value instanceof Boolean) {
            generator.writeBoolean(((Boolean) value).booleanValue());
        }
        else if (value instanceof byte[]) {
            generator.writeBinary((byte[]) value);
        }
        else if (value.getClass().isArray()) {
            generator.writeBeginArray();
            for (Object o : ObjectUtils.toObjectArray(value)) {
                Result result = doWrite(o, generator, parentField);
                if (!result.isSuccesful()) {
                    return result;
                }
            }
            generator.writeEndArray();
        }
        else if (value instanceof Map) {
            generator.writeBeginObject();
            for (Entry<?, ?> entry : ((Map<?, ?>) value).entrySet()) {
                String fieldName = entry.getKey().toString();
                // filter out fields
                if (shouldKeep(parentField, fieldName)) {
                    generator.writeFieldName(fieldName);
                    Result result = doWrite(entry.getValue(), generator, fieldName);
                    if (!result.isSuccesful()) {
                        return result;
                    }
                }
            }
            generator.writeEndObject();
        }
        else if (value instanceof Iterable) {
            generator.writeBeginArray();
            for (Object o : (Iterable<?>) value) {
                Result result = doWrite(o, generator, parentField);
                if (!result.isSuccesful()) {
                    return result;
                }
            }
            generator.writeEndArray();
        }
        else if (value instanceof Timestamp) {
            Timestamp timestamp = (Timestamp) value;
            long epochSeconds = timestamp.getTime() / 1000; // Getting rid of millisconds because they're captured in timestamp.getNanos()
            Instant instant = Instant.ofEpochSecond(epochSeconds, timestamp.getNanos());
            OffsetDateTime offsetDateTime = OffsetDateTime.ofInstant(instant, ZoneId.systemDefault());
            generator.writeString(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(offsetDateTime));
        }
        else if (value instanceof Date) {
            Calendar cal = Calendar.getInstance();
            cal.setTime((Date) value);
            generator.writeString(DatatypeConverter.printDateTime(cal));
        }
        else if (value instanceof Calendar) {
            generator.writeString(DatatypeConverter.printDateTime((Calendar) value));
        }
        else {
            if (writeUnknownTypes) {
                return handleUnknown(value, generator);
            }
            return Result.FAILED(value);
        }
        return Result.SUCCESFUL();
    }