ApplicationApiDescriptionModel.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Abp.Collections.Extensions;
  5. namespace Abp.Web.Api.Modeling
  6. {
  7. [Serializable]
  8. public class ApplicationApiDescriptionModel
  9. {
  10. public IDictionary<string, ModuleApiDescriptionModel> Modules { get; }
  11. public ApplicationApiDescriptionModel()
  12. {
  13. Modules = new Dictionary<string, ModuleApiDescriptionModel>();
  14. }
  15. public ModuleApiDescriptionModel AddModule(ModuleApiDescriptionModel module)
  16. {
  17. if (Modules.ContainsKey(module.Name))
  18. {
  19. throw new AbpException("There is already a module with same name: " + module.Name);
  20. }
  21. return Modules[module.Name] = module;
  22. }
  23. public ModuleApiDescriptionModel GetOrAddModule(string name)
  24. {
  25. return Modules.GetOrAdd(name, () => new ModuleApiDescriptionModel(name));
  26. }
  27. public ApplicationApiDescriptionModel CreateSubModel(string[] modules = null, string[] controllers = null, string[] actions = null)
  28. {
  29. var subModel = new ApplicationApiDescriptionModel();
  30. foreach (var module in Modules.Values)
  31. {
  32. if (modules == null || modules.Contains(module.Name))
  33. {
  34. subModel.AddModule(module.CreateSubModel(controllers, actions));
  35. }
  36. }
  37. return subModel;
  38. }
  39. }
  40. }