/// <summary> /// Finds a number of resources based on a search string. To include more than one resource in /// the search, use the wildcard character (asterisk '*'). For example: To find all resources in a namespace /// 'MyApplication.Utilities', use the search string "myapplication.utilities.*" or any case /// variant of it. /// </summary> /// <param name="searchString">The case insensitive string to use for the search</param> /// <returns></returns> public IResource[] SafeFindResources(string searchString) { switch (searchString.Count(i => i == '*')) { case 0: if (TryFindResource(searchString, out var resource, out _)) { return new[] { resource } } ; return(new IResource[0]); case 1 when searchString.Last() != '*': throw new Exception("Invalid resource string syntax. The asterisk must be the last character"); case 1: var commonPart = searchString.TrimEnd('*'); var commonPartDots = commonPart.Count(c => c == '.'); return(ResourceByName .Where(pair => pair.Key.StartsWith(commonPart, StringComparison.OrdinalIgnoreCase) && pair.Key.Count(c => c == '.') == commonPartDots) .Select(pair => pair.Value) .ToArray()); default: throw new Exception("Invalid resource string syntax. Can only include one asterisk (*)"); } }
internal static void RemoveResource(IResource toRemove) { ResourceByName.Remove(toRemove.Name); ResourceByType.Remove(toRemove.Type); ReloadResourceFinder(); UpdateConfiguration(); }
internal bool RemoveResource(IResource toRemove) { var r = ResourceByName.Remove(toRemove.Name); ResourceByType.Remove(toRemove.Type); ReloadResourceFinder(); RootAccess.Load(); return(r); }
public Resource GetResourceByName(FullName resourceName) { ProfileResourceContentTypes types = ResourceByName.FirstOrDefault( resourceEntry => resourceEntry.Key == resourceName) .Value; return(types.Readable ?? types.Writable); }
public void Clear() { ResourceFinder.Clear(); ResourceByName.Clear(); ResourceByType.Clear(); }
/// <summary> /// Finds a resource by name (case insensitive) and returns null /// if no resource is found /// </summary> public IResource SafeGetResource(string name) => ResourceByName.SafeGet(name);
/// <summary> /// Finds a resource by name (case insensitive) and throws an UnknownResource exception /// if no resource is found. /// </summary> public IResource GetResource(string name) => ResourceByName.SafeGet(name) ?? throw new UnknownResource(name);
public bool ResourceIsWritable(FullName resourceName) => ResourceByName.Any( resourceEntry => resourceEntry.Key == resourceName && resourceEntry.Value.Writable != null);