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

com.microsoft.azure.storage.table.TableRequestOptions Maven / Gradle / Ivy

/**
 * Copyright Microsoft Corporation
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.microsoft.azure.storage.table;

import com.microsoft.azure.storage.RequestOptions;
import com.microsoft.azure.storage.core.Utility;

/**
 * Represents a set of timeout, payload format, and retry policy options that may be specified for a table operation
 * request.
 */
public class TableRequestOptions extends RequestOptions {

    /**
     * The interface whose function is used to get the  for an entity property
     * given the partition key, row, key, and the property name, if the interface is implemented
     */
    public interface PropertyResolver {

        /**
         * Given the partition key, row, key, and the property name, produces the EdmType
         * 
         * @param pk
         *            A String which represents the partition key.
         * @param rk
         *            A String which represents the row key.
         * @param key
         *            A String which represents the property name.
         * @param value
         *            A String which represents the property value.
         * @return
         *         The {@link EdmType} of the property.
         */
        public EdmType propertyResolver(String pk, String rk, String key, String value);

    }

    /**
     * The interface whose function is used to get the  for an entity property
     * given the partition key, row, key, and the property name, if the interface is implemented
     */
    private PropertyResolver propertyResolver;

    /**
     * The {@link TablePayloadFormat} that is used for any table accessed with this {@link TableRequest} object.
     * 
     * Default is Json Minimal Metadata.
     */
    private TablePayloadFormat payloadFormat;
    
    /**
     * Flag that specifies whether the client should look to correct Date values stored on a {@link TableEntity}
     * that may have been written using versions of this library prior to 0.4.0.
     * See here for more details.
     */
    private Boolean dateBackwardCompatibility;

    /**
     * Creates an instance of the TableRequestOptions
     */
    public TableRequestOptions() {
        super();
    }

    /**
     * Creates an instance of the RequestOptions class by copying values from another
     * TableRequestOptions instance.
     * 
     * @param other
     *            A TableRequestOptions object that represents the request options to copy.
     */
    public TableRequestOptions(final TableRequestOptions other) {
        super(other);
        if (other != null) {
            this.setTablePayloadFormat(other.getTablePayloadFormat());
            this.setPropertyResolver(other.getPropertyResolver());
            this.setDateBackwardCompatibility(other.getDateBackwardCompatibility());
        }
    }

    /**
     * Initializes the values for this TableRequestOptions instance, if they are currently
     * null, using the values specified in the {@link CloudTableClient} parameter.
     * 
     * @param options
     *            A {@link TableRequestOptions} object which represents the input options to copy from when applying
     *            defaults.
     * @param client
     *            A {@link CloudTableClient} object from which to copy the timeout and retry policy.
     *
     * @return A {@link TableRequestOptions} object.
     * 
     */
    protected static final TableRequestOptions populateAndApplyDefaults(final TableRequestOptions options,
            final CloudTableClient client) {
        TableRequestOptions modifiedOptions = new TableRequestOptions(options);
        TableRequestOptions.populate(modifiedOptions, client.getDefaultRequestOptions());
        TableRequestOptions.applyDefaults(modifiedOptions);
        return modifiedOptions;
    }

    /**
     * Applies defaults to the options passed in.
     * 
     * @param modifiedOptions
     *          The options to apply defaults to.
     */
    protected static void applyDefaults(final TableRequestOptions modifiedOptions) {
        Utility.assertNotNull("modifiedOptions", modifiedOptions);
        RequestOptions.applyBaseDefaultsInternal(modifiedOptions);
        if (modifiedOptions.getTablePayloadFormat() == null) {
            modifiedOptions.setTablePayloadFormat(TablePayloadFormat.Json);
        }
        
        if (modifiedOptions.getDateBackwardCompatibility() == null) {
            modifiedOptions.setDateBackwardCompatibility(false);
        }
    }

    /**
     * Populates any null fields in the first requestOptions object with values from the second requestOptions object.
     * 
     * @param modifiedOptions
     *            A {@link TableRequestOptions} object from which to copy options.
     * @param clientOptions
     *            A {@link TableRequestOptions} object where options will be copied.
     *            
     * @return A {@link RequestOptions} object.
     */
    private static void populate(TableRequestOptions modifiedOptions, final TableRequestOptions clientOptions) {
        RequestOptions.populateRequestOptions(modifiedOptions, clientOptions, true /* setStartTime */);
        if (modifiedOptions.getTablePayloadFormat() == null) {
            modifiedOptions.setTablePayloadFormat(clientOptions.getTablePayloadFormat());
        }

        if (modifiedOptions.getPropertyResolver() == null) {
            modifiedOptions.setPropertyResolver(clientOptions.getPropertyResolver());
        }
        
        if (modifiedOptions.getDateBackwardCompatibility() == null) {
            modifiedOptions.setDateBackwardCompatibility(clientOptions.getDateBackwardCompatibility());
        }
    }

    /**
     * Gets the {@link TablePayloadFormat} to be used. For more information about {@link TablePayloadFormat} defaults,
     * see {@link #setTablePayloadFormat(TablePayloadFormat)}.
     * 
     * @return
     *         The {@link TablePayloadFormat} used by this {@link TableRequest}.
     */
    public TablePayloadFormat getTablePayloadFormat() {
        return this.payloadFormat;
    }

    /**
     * Gets the interface that contains a function which is used to get the  for an entity property
     * given the partition key, row, key, and the property name. For more information about the {@link PropertyResolver}
     * defaults, see {@link #setPropertyResolver(PropertyResolver)}.
     * 
     * @return
     *         The current {@link PropertyResolver} object.
     */
    public PropertyResolver getPropertyResolver() {
        return this.propertyResolver;
    }

    /**
     * Gets whether the client should look to correct Date values stored on a {@link TableEntity}
     * that may have been written using versions of this library prior to 0.4.0,
     * see {@link #setDateBackwardCompatibility(Boolean)}.
     * 

* See here for more details. * * @return * true if dateBackwardCompatibility is enabled; otherwise, false */ public Boolean getDateBackwardCompatibility() { return this.dateBackwardCompatibility; } /** * Sets the {@link TablePayloadFormat} to be used. *

* The default {@link TablePayloadFormat} is set in the client and is by default {@link TablePayloadFormat#Json}. * You can change the {@link TablePayloadFormat} on this request by setting this property. You can also change the * value on the {@link CloudTableClient#getDefaultRequestOptions()} object so that all subsequent requests made * via the service client will use that {@link TablePayloadFormat}. * * @param payloadFormat * Specifies the {@link TablePayloadFormat} to set. */ public void setTablePayloadFormat(TablePayloadFormat payloadFormat) { this.payloadFormat = payloadFormat; } /** * Sets the interface that contains a function which is used to get the for an entity property * given the partition key, row, key, and the property name. *

* The default {@link PropertyResolver} is set in the client and is by default null, indicating not to use a * property resolver. You can change the {@link PropertyResolver} on this request by setting this property. You can * also change the value on the {@link CloudTableClient#getDefaultRequestOptions()} object so that all subsequent * requests made via the service client will use that {@link PropertyResolver}. * * @param propertyResolver * Specifies the {@link PropertyResolver} to set. */ public void setPropertyResolver(PropertyResolver propertyResolver) { this.propertyResolver = propertyResolver; } /** * Sets whether the client should look to correct Date values stored on a {@link TableEntity} * that may have been written using versions of this library prior to 0.4.0. *

* {@link #dateBackwardCompatibility} is by default false, indicating a post 0.4.0 version or mixed- * platform usage. You can change the {@link #dateBackwardCompatibility} on this request by setting this property. * You can also change the value on the {@link CloudTableClient#getDefaultRequestOptions()} object so that all * subsequent requests made via the service client will use that {@link #dateBackwardCompatibility}. *

* See here for more details. * * @param dateBackwardCompatibility * true to enable dateBackwardCompatibility; otherwise, false */ public void setDateBackwardCompatibility(Boolean dateBackwardCompatibility) { this.dateBackwardCompatibility = dateBackwardCompatibility; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy