public static DataLakeStoreItemAce Parse(string aceString)
{
var aceList = aceString.Split(',');
if(aceList.Length != 1)
{
throw new InvalidOperationException(string.Format(Resources.InvalidAce, aceString));
}
var scope = DataLakeStoreEnums.ScopeType.Access;
var typeIndex = 0;
var singleSpec = aceString.Split(':');
if (singleSpec.Length == 4 && singleSpec[0].ToLowerInvariant().Equals("default"))
{
scope = DataLakeStoreEnums.ScopeType.Default;
typeIndex = 1;
}
else if (singleSpec.Length != 3)
{
throw new InvalidOperationException(string.Format(Resources.InvalidAce, aceString));
}
switch (singleSpec[typeIndex].ToLowerInvariant())
{
case "group":
if (!string.IsNullOrEmpty(singleSpec[typeIndex + 1]))
{
// default group and regular group case
return new DataLakeStoreItemAce(scope, DataLakeStoreEnums.AceType.Group, singleSpec[typeIndex + 1], singleSpec[typeIndex + 2]);
}
else if (string.IsNullOrEmpty(singleSpec[typeIndex + 1]))
{
// default owning group and regular owning group case
return new DataLakeStoreItemAce(scope, DataLakeStoreEnums.AceType.Group, string.Empty, singleSpec[typeIndex + 2]);
}
throw new InvalidOperationException(string.Format(Resources.InvalidAce, aceString));
case "user":
if (!string.IsNullOrEmpty(singleSpec[typeIndex + 1]))
{
// default user and regular user case
return new DataLakeStoreItemAce(scope, DataLakeStoreEnums.AceType.User, singleSpec[typeIndex + 1], singleSpec[typeIndex + 2]);
}
else if (string.IsNullOrEmpty(singleSpec[typeIndex + 1]))
{
// default owner and owner case
return new DataLakeStoreItemAce(scope, DataLakeStoreEnums.AceType.User, string.Empty, singleSpec[typeIndex + 2]);
}
throw new InvalidOperationException(string.Format(Resources.InvalidAce, aceString));
case "mask":
return new DataLakeStoreItemAce(scope, DataLakeStoreEnums.AceType.Mask, string.Empty, singleSpec[typeIndex + 2]);
case "other":
return new DataLakeStoreItemAce(scope, DataLakeStoreEnums.AceType.Other, string.Empty, singleSpec[typeIndex + 2]);
default:
throw new CloudException(string.Format(Resources.InvalidParseAce, aceString));
}
}