Exemple #1
0
        public static Document GetDocumentFromEntity(ITableEntity entity, OperationContext context, TableRequestOptions options)
        {
            if (entity == null)
            {
                throw new ArgumentException("Entity should not be null.");
            }

            IDictionary <string, EntityProperty> properties = entity.WriteEntity(context);

            if (options != null)
            {
                try
                {
                    options.AssertPolicyIfRequired();

                    if (options.EncryptionPolicy != null)
                    {
                        properties = options.EncryptionPolicy.EncryptEntity(properties, entity.PartitionKey, entity.RowKey, options.EncryptionResolver);
                    }
                }
                catch (Exception ex)
                {
                    throw new StorageException(SR.EncryptionLogicError, ex)
                          {
                              IsRetryable = false
                          };
                }
            }

            using (StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture))
            {
                using (ITableEntityWriter entityWriter = new TableEntityWriter(stringWriter))
                {
                    entityWriter.Start();

                    foreach (var property in properties)
                    {
                        entityWriter.WriteName(property.Key);
                        entityWriter.WriteValue(property.Value);
                    }

                    entityWriter.End();
                }

                //$TODO: Write id and partition key directly to string writer
                Document document = JsonConvert.DeserializeObject <Document>(stringWriter.ToString());
                document.Id = entity.RowKey;
                document.SetPropertyValue(StellarConstants.PartitionKeyPropertyName, entity.PartitionKey);

                return(document);
            }
        }
        internal static IEnumerable <KeyValuePair <string, object> > GetPropertiesFromDictionary(IDictionary <string, EntityProperty> properties, TableRequestOptions options, string partitionKey, string rowKey, bool ignoreEncryption)
        {
            // Check if encryption policy is set and invoke EncryptEnity if it is set.
            if (options != null)
            {
                options.AssertPolicyIfRequired();

                if (options.EncryptionPolicy != null && !ignoreEncryption)
                {
                    properties = options.EncryptionPolicy.EncryptEntity(properties, partitionKey, rowKey, options.EncryptionResolver);
                }
            }

            return(properties.Select(kvp => new KeyValuePair <string, object>(kvp.Key, kvp.Value.PropertyAsObject)));
        }
        internal static IEnumerable<ODataProperty> GetPropertiesFromDictionary(IDictionary<string, EntityProperty> properties, TableRequestOptions options, string partitionKey, string rowKey)
        {
            // Check if encryption policy is set and invoke EncryptEnity if it is set.
            if (options != null)
            {
                options.AssertPolicyIfRequired();

                if (options.EncryptionPolicy != null)
                {
                    properties = options.EncryptionPolicy.EncryptEntity(properties, partitionKey, rowKey, options.EncryptionResolver);
                }
            }

            return properties.Select(kvp => new ODataProperty() { Name = kvp.Key, Value = kvp.Value.PropertyAsObject });
        }