All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.azure.cosmos.implementation.feedranges.FeedRangeInternalDeserializer Maven / Gradle / Ivy

Go to download

This Package contains Microsoft Azure Cosmos SDK (with Reactive Extension Reactor support) for Azure Cosmos DB SQL API

There is a newer version: 4.61.1
Show newest version
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.cosmos.implementation.feedranges;

import com.azure.cosmos.implementation.Constants;
import com.azure.cosmos.implementation.routing.PartitionKeyInternal;
import com.azure.cosmos.implementation.routing.Range;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.io.IOException;

import static com.azure.cosmos.implementation.guava25.base.Preconditions.checkNotNull;

public class FeedRangeInternalDeserializer extends StdDeserializer {
    private static final long serialVersionUID = 1L;

    public FeedRangeInternalDeserializer() {
        this(null);
    }

    public FeedRangeInternalDeserializer(final Class vc) {
        super(vc);
    }

    @Override
    public FeedRangeInternal deserialize(final JsonParser parser,
                                         final DeserializationContext context)
        throws IOException {

        final JsonNode rootNode = parser.getCodec().readTree(parser);
        final ObjectMapper mapper = (ObjectMapper)parser.getCodec();

        return deserializeFeedRange(rootNode, mapper, parser);
    }

    public static FeedRangeInternal deserializeFeedRange(
        JsonNode rootNode,
        ObjectMapper mapper,
        JsonParser parser) throws JsonMappingException {

        checkNotNull(rootNode, "Argument 'rootNode' must not be null.");
        checkNotNull(mapper, "Argument 'mapper' must not be null.");
        checkNotNull(parser, "Argument 'parser' must not be null.");

        JsonNode rangeNode = rootNode.get(Constants.Properties.RANGE);
        if (rangeNode != null && rangeNode.isObject()) {
            Range range = new Range<>((ObjectNode)rangeNode);
            return new FeedRangeEpkImpl(range);
        }

        JsonNode pkNode = rootNode.get(Constants.Properties.FEED_RANGE_PARTITION_KEY);
        if (pkNode != null && pkNode.isArray()) {
            PartitionKeyInternal pk = mapper.convertValue(pkNode, PartitionKeyInternal.class);
            return new FeedRangePartitionKeyImpl(pk);
        }

        JsonNode pkRangeIdNode =
            rootNode.get(Constants.Properties.FEED_RANGE_PARTITION_KEY_RANGE_ID);
        if (pkRangeIdNode != null && pkRangeIdNode.isTextual()) {
            return new FeedRangePartitionKeyRangeImpl(pkRangeIdNode.asText());
        }

        throw JsonMappingException.from(parser, "Unknown feed range type");
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy