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

com.microsoft.azure.documentdb.PartitionKeyDefinition Maven / Gradle / Ivy

package com.microsoft.azure.documentdb;

import java.util.ArrayList;
import java.util.Collection;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;
import org.json.JSONObject;

import com.microsoft.azure.documentdb.internal.Constants;
import com.microsoft.azure.documentdb.internal.Strings;

/**
 * Represents a partition key definition in the Azure Cosmos DB database service. A partition key definition specifies which
 * document property is used as the partition key in a collection that has multiple partitions.
 */
public final class PartitionKeyDefinition extends JsonSerializable {

    /**
     * Constructor. Creates a new instance of the PartitionKeyDefinition object.
     */
    public PartitionKeyDefinition() {
        this.setKind(PartitionKind.Hash);
    }

    /**
     * Constructor. Creates a new instance of the PartitionKeyDefinition object from a
     * JSON string.
     *
     * @param jsonString the JSON string that represents the partition key definition.
     */
    public PartitionKeyDefinition(String jsonString) {
        super(jsonString);
    }

    /**
     * Constructor. Creates a new instance of the PartitionKeyDefinition object from a
     * JSON object.
     *
     * @param jsonObject the JSON object that represents the partition key definition.
     */
    public PartitionKeyDefinition(JSONObject jsonObject) {
        super(jsonObject);
    }

    /**
     * Sets the partition algorithm used to calculate the partition id given a partition key.
     *
     * @return the partition algorithm.
     */
    public PartitionKind getKind() {
        return PartitionKind.valueOf(WordUtils.capitalize(super.getString(Constants.Properties.PARTITION_KIND)));
    }

    /**
     * Sets the partition algorithm used to calculate the partition id given a partition key.
     *
     * @param kind the partition algorithm.
     */
    public void setKind(PartitionKind kind) {
        super.set(Constants.Properties.PARTITION_KIND, kind.name());
    }

    PartitionKeyDefinitionVersion getVersion() {
        Object version = super.getObject(
                Constants.Properties.PARTITION_KEY_DEFINITION_VERSION, Object.class);

        if (version == null) return null;

        String versionStr = String.valueOf(version);
        if (StringUtils.isNumeric(versionStr)) {
            return PartitionKeyDefinitionVersion.valueOf(String.format("V%d",Integer.parseInt(versionStr)));
        }

        return !Strings.isNullOrEmpty(versionStr) ?
                PartitionKeyDefinitionVersion.valueOf(WordUtils.capitalize(versionStr)): null;
    }

    void setVersion(PartitionKeyDefinitionVersion version) {
         super.set(Constants.Properties.PARTITION_KEY_DEFINITION_VERSION, version.name());
    }

    /**
     * Gets the document property paths for the partition key.
     *
     * @return the paths to the document properties that form the partition key.
     */
    public Collection getPaths() {
        Collection paths = super.getCollection(Constants.Properties.PARTITION_KEY_PATHS, String.class);
        if (paths == null) {
            paths = new ArrayList<>();
            super.set(Constants.Properties.PARTITION_KEY_PATHS, paths);
        }
        return paths;
    }

    /**
     * Sets the document property paths for the partition key.
     *
     * @param paths the paths to document properties that form the partition key.
     */
    public void setPaths(Collection paths) {
        if (paths == null || paths.size() == 0) {
            throw new IllegalArgumentException("paths must not be null or empty.");
        }

        super.set(Constants.Properties.PARTITION_KEY_PATHS, paths);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy