using C4IT.F4SD.DisplayFormatting; using System.Collections.Generic; using System.Linq; namespace F4SD.DocuEngine.DocuEngineDataProvider { public class DocuEngineDataProperty : IDocuEngineDataProperty { public object Value { get; set; } public RawValueType? ValueType { get; set; } } public class DocuEngineDataContainer : Dictionary, IDocuEngineDataContainer { public IDocuEngineDataToken GetByName(string tokenName) { var tokenTree = tokenName.Split('.'); if (this.TryGetValue(tokenTree[0], out IDocuEngineDataToken token)) { if (tokenTree.Length > 1) { switch (token) { case IDocuEngineDataContainer container: return container.GetByName(string.Join(".", tokenTree.Skip(1))); case IDocuEngineDataProperty property: return property; case IDocuEngineDataEnumeration enumeration: return new DocuEngineDataProperty() { Value = tokenTree[0] }; default: //Syntax Error break; } } else { switch (token) { case IDocuEngineDataContainer container: return container; case IDocuEngineDataProperty property: return property; case IDocuEngineDataEnumeration enumeration: return enumeration; default: //Syntax Error break; } } return null; } else { //Syntax Error return null; } } public IDocuEngineDataContainer GetContainerByName(string containerName) { var token = GetByName(containerName); if (token is IDocuEngineDataContainer container) { return container; } return null; } public IDocuEngineDataProperty GetPropertyByName(string propertyName) { var token = GetByName(propertyName); if (token is IDocuEngineDataProperty property) { return property; } return null; } public IDocuEngineDataEnumeration GetEnumerationByName(string enumName) { var token = GetByName(enumName); if (token is IDocuEngineDataEnumeration enumeration) { return enumeration; } return null; } } public class DocuEngineDataEnumeration : List, IDocuEngineDataEnumeration { } }