The Latest Gartner® Magic Quadrant™Hyperconverged Infrastructure Software
Moderators: anton (staff), art (staff), Max (staff), Anatoly (staff)
Code: Select all
public class ImageFileCreator : ParameterAppender, IImageFileCreator {
public STARWIND_FILE_TYPE FileType => STARWIND_FILE_TYPE.STARWIND_IMAGE_FILE;
public string Path { get; set; }
public string Name { get; set; }
[Param]
public int Size { get; set; }
[Param]
[BoolToString("True", "False")]
public bool Flat { get; set; } = true;
[Param]
[BoolToString("True", "False")]
public bool ZeroOut { get; set; } = false;
[Param]
[BoolToString("True", "False")]
public bool Compressed { get; set; } = false;
[Param]
[BoolToString("True", "False")]
public bool DeferredInit { get; set; } = true;
[Param]
[BoolToString("True", "False")]
[EnableParam("Username", "Password")]
public bool Encrypted { get; set; } = false;
[Param(false)]
public string Username { get; set; } = "";
[Param(false)]
public string Password { get; set; } = "";
}
Code: Select all
public abstract class ParameterAppender : IAppender {
public void AppendParams(IParameters pars) {
Append(pars, this);
}
protected static string ToString(PropertyInfo info, object obj) {
if (obj is string str) {
return str;
} else if (obj is bool b) {
if (info.GetCustomAttribute(typeof(BoolToStringAttribute), true) is BoolToStringAttribute attr) {
return b ? attr.TrueString : attr.FalseString;
}
return null;
} else if (obj.GetType().BaseType == typeof(Enum)) {
return EnumFormat.EnumToString(obj);
} else {
return obj.ToString();
}
}
protected static void Append(IParameters pars, object obj, string prefix = "") {
bool IsEnabled(IConditional attr) {
if (attr.Enabled) { return true; }
return (bool)obj.GetType().GetProperties().Single(info => (info.GetCustomAttribute(typeof(EnableParamAttribute), true) as EnableParamAttribute)?.CheckName(attr.Name) ?? false).GetValue(obj);
}
foreach (var info in obj.GetType().GetProperties()) {
if (info.CanRead) {
if (info.GetCustomAttribute(typeof(ParamAttribute), true) is ParamAttribute attr) {
if (IsEnabled(attr) && ToString(info, info.GetValue(obj)) is string str) {
pars.AppendParam(prefix + attr.Name, str);
}
} else if (info.GetCustomAttribute(typeof(FlatParamAttribute), true) is FlatParamAttribute flat) {
if (IsEnabled(flat)) {
Append(pars, info.GetValue(obj), flat.Prefix);
}
}
}
}
}
}