109 lines
No EOL
2.9 KiB
C#
109 lines
No EOL
2.9 KiB
C#
using System;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
|
|
using FrostFS.SDK.ClientV2;
|
|
using FrostFS.SDK.ClientV2.Mappers.GRPC;
|
|
using FrostFS.SDK.Cryptography;
|
|
|
|
using Google.Protobuf;
|
|
|
|
namespace FrostFS.SDK;
|
|
|
|
public class FrostFsContainerInfo
|
|
{
|
|
private Container.Container.Types.Attribute[]? grpsAttributes;
|
|
private ReadOnlyCollection<FrostFsAttributePair>? attributes;
|
|
private FrostFsPlacementPolicy? placementPolicy;
|
|
private Guid? nonce;
|
|
|
|
private Container.Container? container;
|
|
|
|
public FrostFsContainerInfo(
|
|
FrostFsPlacementPolicy placementPolicy,
|
|
FrostFsAttributePair[]? attributes = null,
|
|
FrostFsVersion? version = null,
|
|
FrostFsOwner? owner = null,
|
|
Guid? nonce = null)
|
|
{
|
|
this.placementPolicy = placementPolicy;
|
|
Version = version;
|
|
Owner = owner;
|
|
this.nonce = nonce;
|
|
|
|
if (attributes != null)
|
|
this.attributes = new ReadOnlyCollection<FrostFsAttributePair>(attributes);
|
|
}
|
|
|
|
internal FrostFsContainerInfo(Container.Container container)
|
|
{
|
|
this.container = container;
|
|
}
|
|
|
|
public Guid Nonce
|
|
{
|
|
get
|
|
{
|
|
nonce ??= container?.Nonce != null ? container.Nonce.ToUuid() : Guid.NewGuid();
|
|
return nonce.Value;
|
|
}
|
|
}
|
|
|
|
public FrostFsPlacementPolicy? PlacementPolicy
|
|
{
|
|
get
|
|
{
|
|
placementPolicy ??= container?.PlacementPolicy?.ToModel();
|
|
return placementPolicy;
|
|
}
|
|
}
|
|
|
|
public ReadOnlyCollection<FrostFsAttributePair>? Attributes
|
|
{
|
|
get
|
|
{
|
|
if (attributes == null && grpsAttributes != null)
|
|
attributes = new ReadOnlyCollection<FrostFsAttributePair>(grpsAttributes.Select(a => new FrostFsAttributePair(a.Key, a.Value)).ToList());
|
|
|
|
return attributes;
|
|
}
|
|
}
|
|
|
|
public FrostFsVersion? Version { get; private set; }
|
|
|
|
public FrostFsOwner? Owner { get; private set; }
|
|
|
|
internal Container.Container.Types.Attribute[]? GetGrpsAttributes()
|
|
{
|
|
grpsAttributes ??= Attributes?
|
|
.Select(a => new Container.Container.Types.Attribute { Key = a.Key, Value = a.Value })
|
|
.ToArray();
|
|
|
|
return grpsAttributes;
|
|
}
|
|
|
|
internal Container.Container GetContainer()
|
|
{
|
|
if (this.container == null)
|
|
{
|
|
if (PlacementPolicy == null)
|
|
{
|
|
throw new ArgumentNullException("PlacementPolicy is null");
|
|
}
|
|
|
|
this.container = new Container.Container()
|
|
{
|
|
PlacementPolicy = PlacementPolicy.Value.GetPolicy(),
|
|
Nonce = ByteString.CopyFrom(Nonce.ToBytes()),
|
|
OwnerId = Owner?.OwnerID,
|
|
Version = Version?.Version
|
|
};
|
|
|
|
var attribs = GetGrpsAttributes();
|
|
if (attribs != null)
|
|
this.container.Attributes.AddRange(attribs);
|
|
}
|
|
|
|
return this.container;
|
|
}
|
|
} |