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

com.azure.cosmos.models.CosmosContainerProperties 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.60.0
Show newest version
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.cosmos.models;

import com.azure.cosmos.implementation.DocumentCollection;
import com.azure.cosmos.implementation.ImplementationBridgeHelpers;
import com.azure.cosmos.implementation.Resource;
import com.azure.cosmos.implementation.apachecommons.lang.StringUtils;
import com.azure.cosmos.util.Beta;

import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Represents a container in the Azure Cosmos DB database service. A cosmos container is a named logical container
 * for cosmos items.
 * 

* A database may contain zero or more named containers and each container consists of zero or more JSON items. * Being schema-free, the items in a container do not need to share the same structure or fields. Since containers * are application resources, they can be authorized using either the master key or resource keys. */ public final class CosmosContainerProperties { private final DocumentCollection documentCollection; private static final String PARTITION_KEY_TOKEN_DELIMETER = "/"; /** * Constructor * * @param id id of the Container * @param partitionKeyPath partition key path */ public CosmosContainerProperties(String id, String partitionKeyPath) { this.documentCollection = new DocumentCollection(); documentCollection.setId(id); PartitionKeyDefinition partitionKeyDef = new PartitionKeyDefinition(); ArrayList paths = new ArrayList<>(); paths.add(partitionKeyPath); partitionKeyDef.setPaths(paths); this.documentCollection.setPartitionKey(partitionKeyDef); } /** * Constructor * * @param id id of the container * @param partitionKeyDefinition the {@link PartitionKeyDefinition} */ public CosmosContainerProperties(String id, PartitionKeyDefinition partitionKeyDefinition) { this.documentCollection = new DocumentCollection(); documentCollection.setId(id); documentCollection.setPartitionKey(partitionKeyDefinition); } CosmosContainerProperties(String json) { this.documentCollection = new DocumentCollection(json); } // Converting container to CosmosContainerProperties CosmosContainerProperties(DocumentCollection collection) { this.documentCollection = new DocumentCollection(collection.toJson()); } static List getFromV2Results(List results) { return results.stream().map(CosmosContainerProperties::new).collect(Collectors.toList()); } /** * Gets the container's indexing policy. * * @return the indexing policy. */ public IndexingPolicy getIndexingPolicy() { return this.documentCollection.getIndexingPolicy(); } /** * Sets the container's indexing policy * * @param indexingPolicy {@link IndexingPolicy} the indexing policy * @return the CosmosContainerProperties. */ public CosmosContainerProperties setIndexingPolicy(IndexingPolicy indexingPolicy) { this.documentCollection.setIndexingPolicy(indexingPolicy); return this; } /** * Gets the containers unique key policy * * @return the unique key policy */ public UniqueKeyPolicy getUniqueKeyPolicy() { return this.documentCollection.getUniqueKeyPolicy(); } /** * Sets the Containers unique key policy * * @param uniqueKeyPolicy the unique key policy * @return the CosmosContainerProperties. */ public CosmosContainerProperties setUniqueKeyPolicy(UniqueKeyPolicy uniqueKeyPolicy) { this.documentCollection.setUniqueKeyPolicy(uniqueKeyPolicy); return this; } /** * Gets the containers's partition key definition. * * @return the partition key definition. */ public PartitionKeyDefinition getPartitionKeyDefinition() { return this.documentCollection.getPartitionKey(); } /** * Sets the containers's partition key definition. * * @param partitionKeyDefinition the partition key definition. * @return the CosmosContainerProperties. */ public CosmosContainerProperties setPartitionKeyDefinition(PartitionKeyDefinition partitionKeyDefinition) { this.documentCollection.setPartitionKey(partitionKeyDefinition); if (this.getClientEncryptionPolicy() != null) { this.getClientEncryptionPolicy().validatePartitionKeyPathsAreNotEncrypted(this.getPartitionKeyPathTokensList()); } return this; } /** * Gets the conflictResolutionPolicy that is used for resolving conflicting writes * on items in different regions, in a container in the Azure Cosmos DB service. * * @return ConflictResolutionPolicy */ public ConflictResolutionPolicy getConflictResolutionPolicy() { return this.documentCollection.getConflictResolutionPolicy(); } /** * Sets the conflictResolutionPolicy that is used for resolving conflicting writes * on items in different regions, in a container in the Azure Cosmos DB service. * * @param value ConflictResolutionPolicy to be used. * @return the CosmosContainerProperties. */ public CosmosContainerProperties setConflictResolutionPolicy(ConflictResolutionPolicy value) { this.documentCollection.setConflictResolutionPolicy(value); return this; } /** * Gets the changeFeedPolicy for this container in the Azure Cosmos DB service. * * @return ChangeFeedPolicy */ @Beta(value = Beta.SinceVersion.V4_12_0, warningText = Beta.PREVIEW_SUBJECT_TO_CHANGE_WARNING) public ChangeFeedPolicy getChangeFeedPolicy() { return this.documentCollection.getChangeFeedPolicy(); } /** * Sets the changeFeedPolicy for this container in the Azure Cosmos DB service. * * @param value ChangeFeedPolicy to be used. * @return the CosmosContainerProperties. */ @Beta(value = Beta.SinceVersion.V4_12_0, warningText = Beta.PREVIEW_SUBJECT_TO_CHANGE_WARNING) public CosmosContainerProperties setChangeFeedPolicy(ChangeFeedPolicy value) { this.documentCollection.setChangeFeedPolicy(value); return this; } /** * Gets the container's default time-to-live value. * * @return the default time-to-live value in seconds. */ public Integer getDefaultTimeToLiveInSeconds() { return this.documentCollection.getDefaultTimeToLive(); } /** * Sets the container's default time-to-live value. *

* The default time-to-live value on a container is an optional property. If set, the items within the * container * expires after the specified number of seconds since their last write time. The value of this property should * be one of the following: *

* null - indicates evaluation of time-to-live is disabled and items within the container will never expire, * regardless whether * individual items have their time-to-live set. *

* nonzero positive integer - indicates the default time-to-live value for all items within the container. * This value can be overridden * by individual items time-to-live value. *

* -1 - indicates by default all items within the container never expire. This value can be overridden by * individual items * time-to-live value. * * @param timeToLive the default time-to-live value in seconds. * @return the CosmosContainerProperties. */ public CosmosContainerProperties setDefaultTimeToLiveInSeconds(Integer timeToLive) { // a "null" value is represented as a missing element on the wire. // setting timeToLive to null should remove the property from the property bag. this.documentCollection.setDefaultTimeToLive(timeToLive); return this; } /** * Sets the analytical store time to live in seconds for items in a container from the Azure Cosmos DB service. * * It is an optional property. A valid value must be either a nonzero positive integer, '-1', or 0. * By default, AnalyticalStoreTimeToLive is set to 0 meaning the analytical store is turned off for the container; * -1 means items in analytical store never expire. * The unit of measurement is seconds. The maximum allowed value is 2147483647. * * @param timeToLive the analytical store time to live in seconds. * @return the CosmosContainerProperties. */ public CosmosContainerProperties setAnalyticalStoreTimeToLiveInSeconds(Integer timeToLive) { this.documentCollection.setAnalyticalStoreTimeToLiveInSeconds(timeToLive); return this; } /** * Gets the analytical store time to live in seconds for items in a container from the Azure Cosmos DB service. * * It is an optional property. A valid value must be either a nonzero positive integer, '-1', or 0. * By default, AnalyticalStoreTimeToLive is set to 0 meaning the analytical store is turned off for the container; * -1 means items in analytical store never expire. * The unit of measurement is seconds. The maximum allowed value is 2147483647. * * @return analytical ttl */ public Integer getAnalyticalStoreTimeToLiveInSeconds() { return this.documentCollection.getAnalyticalStoreTimeToLiveInSeconds(); } /** * Gets the name of the resource. * * @return the name of the resource. */ public String getId() { return this.documentCollection.getId(); } /** * Sets the name of the resource. * * @param id the name of the resource. * @return the current instance of {@link CosmosContainerProperties}. */ public CosmosContainerProperties setId(String id) { this.documentCollection.setId(id); return this; } /** * Gets the ID associated with the resource. * * @return the ID associated with the resource. */ public String getResourceId() { return this.documentCollection.getResourceId(); } /** * Get the last modified timestamp associated with the resource. * This is only relevant when getting response from the server. * * @return the timestamp. */ public Instant getTimestamp() { return this.documentCollection.getTimestamp(); } /** * Get the entity tag associated with the resource. * This is only relevant when getting response from the server. * * @return the e tag. */ public String getETag() { return this.documentCollection.getETag(); } /** * Gets the ClientEncryptionPolicy that is used for encrypting item fields * * @return ClientEncryptionPolicy */ @Beta(value = Beta.SinceVersion.V4_14_0, warningText = Beta.PREVIEW_SUBJECT_TO_CHANGE_WARNING) public ClientEncryptionPolicy getClientEncryptionPolicy() { return this.documentCollection.getClientEncryptionPolicy(); } /** * Sets the ClientEncryptionPolicy that is used for encrypting item fields * * @param value ClientEncryptionPolicy to be used. * @return the CosmosContainerProperties. */ @Beta(value = Beta.SinceVersion.V4_14_0, warningText = Beta.PREVIEW_SUBJECT_TO_CHANGE_WARNING) public CosmosContainerProperties setClientEncryptionPolicy(ClientEncryptionPolicy value) { if (value != null) { value.validatePartitionKeyPathsAreNotEncrypted(this.getPartitionKeyPathTokensList()); } this.documentCollection.setClientEncryptionPolicy(value); return this; } Resource getResource() { return this.documentCollection; } String getSelfLink(){ return this.documentCollection.getSelfLink(); } DocumentCollection getV2Collection() { DocumentCollection collection = new DocumentCollection(this.documentCollection.toJson()); collection.setPartitionKey(this.getPartitionKeyDefinition()); collection.setIndexingPolicy(this.getIndexingPolicy()); return collection; } List> getPartitionKeyPathTokensList() { if (this.getPartitionKeyDefinition() == null) { throw new IllegalStateException("Container partition key is empty"); } List> partitionKeyPathTokensList = new ArrayList<>(); for (String path : this.getPartitionKeyDefinition().getPaths()) { String[] splitPaths = path.split(PARTITION_KEY_TOKEN_DELIMETER); List splitPathsList = new ArrayList<>(); for (int i = 0; i < splitPaths.length; i++) { if (StringUtils.isNotEmpty(splitPaths[i])) { splitPathsList.add(splitPaths[i]); } } partitionKeyPathTokensList.add(splitPathsList); } return partitionKeyPathTokensList; } /////////////////////////////////////////////////////////////////////////////////////////// // the following helper/accessor only helps to access this class outside of this package.// /////////////////////////////////////////////////////////////////////////////////////////// static { ImplementationBridgeHelpers.CosmosContainerPropertiesHelper.setCosmosContainerPropertiesAccessor( new ImplementationBridgeHelpers.CosmosContainerPropertiesHelper.CosmosContainerPropertiesAccessor() { @Override public String getSelfLink(CosmosContainerProperties cosmosContainerProperties) { return cosmosContainerProperties.getSelfLink(); } }); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy