sdk/Transform/SetBucketLifecycleRequestSerializer.cs (147 lines of code) (raw):
/*
* Copyright (C) Alibaba Cloud Computing
* All rights reserved.
*
*/
using System.IO;
using Aliyun.OSS.Util;
using Aliyun.OSS.Model;
namespace Aliyun.OSS.Transform
{
internal class SetBucketLifecycleRequestSerializer : RequestSerializer<SetBucketLifecycleRequest, LifecycleConfiguration>
{
public SetBucketLifecycleRequestSerializer(ISerializer<LifecycleConfiguration, Stream> contentSerializer)
: base(contentSerializer)
{ }
public override Stream Serialize(SetBucketLifecycleRequest request)
{
var rules = request.LifecycleRules;
var lcc = new LifecycleConfiguration
{
LifecycleRules = new Model.LifecycleRule[rules.Count]
};
for (var i = 0; i < rules.Count; i++)
{
lcc.LifecycleRules[i] = new Model.LifecycleRule
{
ID = rules[i].ID,
Prefix = rules[i].Prefix
};
switch (rules[i].Status)
{
case RuleStatus.Enabled:
lcc.LifecycleRules[i].Status = RuleStatus.Enabled.ToString();
break;
case RuleStatus.Disabled:
lcc.LifecycleRules[i].Status = RuleStatus.Disabled.ToString();
break;
}
if (rules[i].HasExpriation())
{
lcc.LifecycleRules[i].Expiration = new Expiration();
if (rules[i].CreatedBeforeDate.HasValue)
lcc.LifecycleRules[i].Expiration.CreatedBeforeDate = DateUtils.FormatIso8601Date(rules[i].CreatedBeforeDate.Value);
else if (rules[i].ExpriationDays.HasValue)
lcc.LifecycleRules[i].Expiration.Days = rules[i].ExpriationDays.Value;
else if (rules[i].ExpirationTime.HasValue)
lcc.LifecycleRules[i].Expiration.Date = DateUtils.FormatIso8601Date(rules[i].ExpirationTime.Value);
else if (rules[i].ExpiredObjectDeleteMarker.HasValue)
lcc.LifecycleRules[i].Expiration.ExpiredObjectDeleteMarker = rules[i].ExpiredObjectDeleteMarker;
}
if (rules[i].Transitions != null)
{
lcc.LifecycleRules[i].Transition = new LifecycleRuleTransition[rules[i].Transitions.Length];
for (int j = 0; j < lcc.LifecycleRules[i].Transition.Length; j++)
{
lcc.LifecycleRules[i].Transition[j] = ConvertTransition(rules[i].Transitions[j]);
}
}
if (rules[i].AbortMultipartUpload != null)
{
lcc.LifecycleRules[i].AbortMultipartUpload = ConvertExpiration(rules[i].AbortMultipartUpload);
}
if (rules[i].Tags != null)
{
lcc.LifecycleRules[i].Tags = new LifecycleRuleTag[rules[i].Tags.Length];
for (int j = 0; j < lcc.LifecycleRules[i].Tags.Length; j++)
{
lcc.LifecycleRules[i].Tags[j] = new LifecycleRuleTag
{
Key = rules[i].Tags[j].Key,
Value = rules[i].Tags[j].Value,
};
}
}
if (rules[i].NoncurrentVersionExpiration != null)
{
lcc.LifecycleRules[i].NoncurrentVersionExpiration = new LifecycleRuleNoncurrentVersionExpiration()
{
NoncurrentDays = rules[i].NoncurrentVersionExpiration.NoncurrentDays
};
}
if (rules[i].NoncurrentVersionTransitions != null)
{
lcc.LifecycleRules[i].NoncurrentVersionTransition =
new LifecycleRuleNoncurrentVersionTransition[rules[i].NoncurrentVersionTransitions.Length];
for (int j = 0; j < lcc.LifecycleRules[i].NoncurrentVersionTransition.Length; j++)
{
lcc.LifecycleRules[i].NoncurrentVersionTransition[j] =
new LifecycleRuleNoncurrentVersionTransition()
{
NoncurrentDays = rules[i].NoncurrentVersionTransitions[j].NoncurrentDays,
StorageClass = rules[i].NoncurrentVersionTransitions[j].StorageClass,
IsAccessTime = rules[i].NoncurrentVersionTransitions[j].IsAccessTime,
ReturnToStdWhenVisit = rules[i].NoncurrentVersionTransitions[j].ReturnToStdWhenVisit,
AllowSmallFile = rules[i].NoncurrentVersionTransitions[j].AllowSmallFile
};
}
}
if (rules[i].Filter != null)
{
lcc.LifecycleRules[i].Filter = new LifecycleRuleFilter()
{
ObjectSizeGreaterThan = rules[i].Filter.ObjectSizeGreaterThan,
ObjectSizeLessThan = rules[i].Filter.ObjectSizeLessThan
};
if (rules[i].Filter.Not != null)
{
lcc.LifecycleRules[i].Filter.Not = new LifecycleNot()
{
Prefix = rules[i].Filter.Not.Prefix
};
if (rules[i].Filter.Not.Tag != null)
{
lcc.LifecycleRules[i].Filter.Not.Tag = new LifecycleRuleTag()
{
Key = rules[i].Filter.Not.Tag.Key,
Value = rules[i].Filter.Not.Tag.Value,
};
}
}
}
}
return ContentSerializer.Serialize(lcc);
}
internal static LifecycleRuleTransition ConvertTransition(LifecycleRule.LifeCycleTransition transition)
{
LifecycleRuleTransition lifecycleRuleTransition = new LifecycleRuleTransition();
if (transition.LifeCycleExpiration != null)
{
lifecycleRuleTransition.Days = transition.LifeCycleExpiration.Days;
lifecycleRuleTransition.CreatedBeforeDate = transition.LifeCycleExpiration.CreatedBeforeDate != null ?
DateUtils.FormatIso8601Date(transition.LifeCycleExpiration.CreatedBeforeDate.Value) : null;
}
lifecycleRuleTransition.StorageClass = transition.StorageClass;
lifecycleRuleTransition.IsAccessTime = transition.IsAccessTime;
lifecycleRuleTransition.ReturnToStdWhenVisit = transition.ReturnToStdWhenVisit;
lifecycleRuleTransition.AllowSmallFile = transition.AllowSmallFile;
return lifecycleRuleTransition;
}
internal static Expiration ConvertExpiration(LifecycleRule.LifeCycleExpiration lifeCycleExpiration)
{
Expiration expiration = new Expiration()
{
Days = lifeCycleExpiration.Days
};
expiration.CreatedBeforeDate = lifeCycleExpiration.CreatedBeforeDate != null ?
DateUtils.FormatIso8601Date(lifeCycleExpiration.CreatedBeforeDate.Value) : null;
return expiration;
}
}
}