HasMenuItemDefinitionsExtensions.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using Abp.Collections.Extensions;
  3. namespace Abp.Application.Navigation
  4. {
  5. /// <summary>
  6. /// Defines extension methods for <see cref="IHasMenuItemDefinitions"/>.
  7. /// </summary>
  8. public static class HasMenuItemDefinitionsExtensions
  9. {
  10. /// <summary>
  11. /// Searches and gets a <see cref="MenuItemDefinition"/> by it's unique name.
  12. /// Throws exception if can not find.
  13. /// </summary>
  14. /// <param name="source">Source object</param>
  15. /// <param name="name">Unique name of the source</param>
  16. public static MenuItemDefinition GetItemByName(this IHasMenuItemDefinitions source, string name)
  17. {
  18. var item = GetItemByNameOrNull(source, name);
  19. if (item == null)
  20. {
  21. throw new ArgumentException("There is no source item with given name: " + name, "name");
  22. }
  23. return item;
  24. }
  25. /// <summary>
  26. /// Searches all menu items (recursively) in the source and gets a <see cref="MenuItemDefinition"/> by it's unique name.
  27. /// Returns null if can not find.
  28. /// </summary>
  29. /// <param name="source">Source object</param>
  30. /// <param name="name">Unique name of the source</param>
  31. public static MenuItemDefinition GetItemByNameOrNull(this IHasMenuItemDefinitions source, string name)
  32. {
  33. if (source == null)
  34. {
  35. throw new ArgumentNullException("source");
  36. }
  37. if (source.Items.IsNullOrEmpty())
  38. {
  39. return null;
  40. }
  41. foreach (var subItem in source.Items)
  42. {
  43. if (subItem.Name == name)
  44. {
  45. return subItem;
  46. }
  47. var subItemSearchResult = GetItemByNameOrNull(subItem, name);
  48. if (subItemSearchResult != null)
  49. {
  50. return subItemSearchResult;
  51. }
  52. }
  53. return null;
  54. }
  55. }
  56. }