sdk/Transform/GetBucketLifecycleDeserializer.cs (123 lines of code) (raw):

/* * Copyright (C) Alibaba Cloud Computing * All rights reserved. * */ using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using Aliyun.OSS.Common.Communication; using Aliyun.OSS.Model; namespace Aliyun.OSS.Transform { internal class GetBucketLifecycleDeserializer : ResponseDeserializer<IList<LifecycleRule>, LifecycleConfiguration> { public GetBucketLifecycleDeserializer(IDeserializer<Stream, LifecycleConfiguration> contentDeserializer) : base(contentDeserializer) { } public override IList<LifecycleRule> Deserialize(ServiceResponse xmlStream) { var lifecycleConfig = ContentDeserializer.Deserialize(xmlStream.Content); var rules = new List<LifecycleRule>(); foreach (var lcc in lifecycleConfig.LifecycleRules) { var rule = new LifecycleRule { ID = lcc.ID, Prefix = lcc.Prefix }; RuleStatus status; if (TryParseEnum(lcc.Status, out status)) rule.Status = status; else throw new InvalidEnumArgumentException(@"Unsupported rule status " + lcc.Status); if (lcc.Expiration != null) { if (lcc.Expiration.IsSetDays()) rule.ExpriationDays = lcc.Expiration.Days; else if (lcc.Expiration.IsSetDate()) rule.ExpirationTime = DateTime.Parse(lcc.Expiration.Date).ToUniversalTime(); else if (!String.IsNullOrEmpty(lcc.Expiration.CreatedBeforeDate)) rule.CreatedBeforeDate = DateTime.Parse(lcc.Expiration.CreatedBeforeDate).ToUniversalTime(); else if (lcc.Expiration.IsSetExpiredObjectDeleteMarker()) { rule.ExpiredObjectDeleteMarker = lcc.Expiration.ExpiredObjectDeleteMarker; } } if (lcc.AbortMultipartUpload != null) { rule.AbortMultipartUpload = new LifecycleRule.LifeCycleExpiration(); ConvertExpiration(lcc.AbortMultipartUpload, rule.AbortMultipartUpload); } if (lcc.Transition != null) { rule.Transitions = new LifecycleRule.LifeCycleTransition[lcc.Transition.Length]; for (int i = 0; i < rule.Transitions.Length; i++) { rule.Transitions[i] = new LifecycleRule.LifeCycleTransition(); ConvertTransition(lcc.Transition[i], rule.Transitions[i]); } } if (lcc.Tags != null) { rule.Tags = new Tag[lcc.Tags.Length]; for (int i = 0; i < rule.Tags.Length; i++) { rule.Tags[i] = new Tag() { Key = lcc.Tags[i].Key, Value = lcc.Tags[i].Value }; } } if (lcc.NoncurrentVersionExpiration != null) { rule.NoncurrentVersionExpiration = new LifecycleRule.LifeCycleNoncurrentVersionExpiration { NoncurrentDays= lcc.NoncurrentVersionExpiration.NoncurrentDays }; } if (lcc.NoncurrentVersionTransition != null) { rule.NoncurrentVersionTransitions = new LifecycleRule.LifeCycleNoncurrentVersionTransition[lcc.NoncurrentVersionTransition.Length]; for (int i = 0; i < rule.NoncurrentVersionTransitions.Length; i++) { rule.NoncurrentVersionTransitions[i] = new LifecycleRule.LifeCycleNoncurrentVersionTransition() { NoncurrentDays = lcc.NoncurrentVersionTransition[i].NoncurrentDays, StorageClass = lcc.NoncurrentVersionTransition[i].StorageClass, IsAccessTime = lcc.NoncurrentVersionTransition[i].IsAccessTime, ReturnToStdWhenVisit = lcc.NoncurrentVersionTransition[i].ReturnToStdWhenVisit, AllowSmallFile = lcc.NoncurrentVersionTransition[i].AllowSmallFile }; } } if (lcc.Filter != null) { rule.Filter = new LifecycleRule.LifeCycleFilter() { ObjectSizeGreaterThan = lcc.Filter.ObjectSizeGreaterThan, ObjectSizeLessThan = lcc.Filter.ObjectSizeLessThan }; if (lcc.Filter.Not != null) { rule.Filter.Not = new LifecycleRule.LifeCycleNot() { Prefix = lcc.Filter.Not.Prefix }; if (lcc.Filter.Not.Tag != null) { rule.Filter.Not.Tag = new Tag() { Key = lcc.Filter.Not.Tag.Key, Value = lcc.Filter.Not.Tag.Value }; } } } rules.Add(rule); } return rules; } /// <summary> /// TryParseEnum does not exist in .net 2.0. But we need to support .net 2.0 /// </summary> /// <param name="value">The string value to parse from.</param> /// <param name="status">The parsed value </param> /// <returns>True: the parse succeeds; False: the parse fails</returns> private bool TryParseEnum(string value, out RuleStatus status) { if (!Enum.IsDefined(typeof(RuleStatus), value)) { status = RuleStatus.Disabled; return false; } status = (RuleStatus)Enum.Parse(typeof(RuleStatus), value); return true; } internal static void ConvertExpiration(Expiration expiration, LifecycleRule.LifeCycleExpiration lifeCycleExpiration) { lifeCycleExpiration.Days = expiration.Days; if (!String.IsNullOrEmpty(expiration.CreatedBeforeDate)) { lifeCycleExpiration.CreatedBeforeDate = DateTime.Parse(expiration.CreatedBeforeDate).ToUniversalTime(); } } internal static void ConvertTransition(LifecycleRuleTransition transition, LifecycleRule.LifeCycleTransition lifeCycleTransition) { ConvertExpiration(transition, lifeCycleTransition.LifeCycleExpiration); lifeCycleTransition.StorageClass = transition.StorageClass; lifeCycleTransition.IsAccessTime = transition.IsAccessTime; lifeCycleTransition.ReturnToStdWhenVisit = transition.ReturnToStdWhenVisit; lifeCycleTransition.AllowSmallFile = transition.AllowSmallFile; } } }