site router optimization

This commit is contained in:
sbwalker 2024-03-10 13:37:05 -04:00
parent ace7b4e2af
commit a4f885a2c5

View File

@ -418,8 +418,10 @@
{ {
var paneindex = new Dictionary<string, int>(); var paneindex = new Dictionary<string, int>();
foreach (Module module in modules) foreach (Module module in modules.Where(item => item.PageId == page.PageId || item.ModuleId == moduleid))
{ {
var typename = Constants.ErrorModule;
// initialize module control properties // initialize module control properties
module.SecurityAccessLevel = SecurityAccessLevel.Host; module.SecurityAccessLevel = SecurityAccessLevel.Host;
module.ControlTitle = ""; module.ControlTitle = "";
@ -428,113 +430,108 @@
module.PaneModuleIndex = -1; module.PaneModuleIndex = -1;
module.PaneModuleCount = 0; module.PaneModuleCount = 0;
if (module.PageId == page.PageId || module.ModuleId == moduleid) if (module.ModuleDefinition != null && (module.ModuleDefinition.Runtimes == "" || module.ModuleDefinition.Runtimes.Contains(Runtime)))
{ {
var typename = Constants.ErrorModule; page.Resources = ManagePageResources(page.Resources, module.ModuleDefinition.Resources, ResourceLevel.Module, alias, "Modules", Utilities.GetTypeName(module.ModuleDefinition.ModuleDefinitionName));
if (module.ModuleDefinition != null && (module.ModuleDefinition.Runtimes == "" || module.ModuleDefinition.Runtimes.Contains(Runtime))) // handle default action
if (action == Constants.DefaultAction && !string.IsNullOrEmpty(module.ModuleDefinition.DefaultAction))
{ {
page.Resources = ManagePageResources(page.Resources, module.ModuleDefinition.Resources, ResourceLevel.Module, alias, "Modules", Utilities.GetTypeName(module.ModuleDefinition.ModuleDefinitionName)); action = module.ModuleDefinition.DefaultAction;
}
// handle default action // get typename template
if (action == Constants.DefaultAction && !string.IsNullOrEmpty(module.ModuleDefinition.DefaultAction)) typename = module.ModuleDefinition.ControlTypeTemplate;
if (module.ModuleDefinition.ControlTypeRoutes != "")
{
// process custom action routes
foreach (string route in module.ModuleDefinition.ControlTypeRoutes.Split(';', StringSplitOptions.RemoveEmptyEntries))
{ {
action = module.ModuleDefinition.DefaultAction; if (route.StartsWith(action + "="))
}
// get typename template
typename = module.ModuleDefinition.ControlTypeTemplate;
if (module.ModuleDefinition.ControlTypeRoutes != "")
{
// process custom action routes
foreach (string route in module.ModuleDefinition.ControlTypeRoutes.Split(';', StringSplitOptions.RemoveEmptyEntries))
{ {
if (route.StartsWith(action + "=")) typename = route.Replace(action + "=", "");
{ break;
typename = route.Replace(action + "=", "");
break;
}
} }
} }
} }
}
// create typename // create typename
if (Constants.DefaultModuleActions.Contains(action, StringComparer.OrdinalIgnoreCase)) if (Constants.DefaultModuleActions.Contains(action, StringComparer.OrdinalIgnoreCase))
{ {
typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, action); typename = Constants.DefaultModuleActionsTemplate.Replace(Constants.ActionToken, action);
} }
else else
{ {
typename = typename.Replace(Constants.ActionToken, action); typename = typename.Replace(Constants.ActionToken, action);
} }
// ensure component exists and implements IModuleControl // ensure component exists and implements IModuleControl
module.ModuleType = ""; module.ModuleType = "";
Type moduletype = Type.GetType(typename, false, true); // case insensitive Type moduletype = Type.GetType(typename, false, true); // case insensitive
if (moduletype != null && moduletype.GetInterfaces().Contains(typeof(IModuleControl))) if (moduletype != null && moduletype.GetInterfaces().Contains(typeof(IModuleControl)))
{ {
module.ModuleType = Utilities.GetFullTypeName(moduletype.AssemblyQualifiedName); // get actual type name module.ModuleType = Utilities.GetFullTypeName(moduletype.AssemblyQualifiedName); // get actual type name
} }
if (moduletype != null && module.ModuleType != "") if (moduletype != null && module.ModuleType != "")
{ {
// retrieve module component resources // retrieve module component resources
var moduleobject = Activator.CreateInstance(moduletype) as IModuleControl; var moduleobject = Activator.CreateInstance(moduletype) as IModuleControl;
module.RenderMode = moduleobject.RenderMode; module.RenderMode = moduleobject.RenderMode;
page.Resources = ManagePageResources(page.Resources, moduleobject.Resources, ResourceLevel.Module, alias, "Modules", moduletype.Namespace); page.Resources = ManagePageResources(page.Resources, moduleobject.Resources, ResourceLevel.Module, alias, "Modules", moduletype.Namespace);
if (action.ToLower() == "settings" && module.ModuleDefinition != null) if (action.ToLower() == "settings" && module.ModuleDefinition != null)
{
// settings components are embedded within a framework settings module
moduletype = Type.GetType(module.ModuleDefinition.ControlTypeTemplate.Replace(Constants.ActionToken, action), false, true);
if (moduletype != null)
{ {
// settings components are embedded within a framework settings module moduleobject = Activator.CreateInstance(moduletype) as IModuleControl;
moduletype = Type.GetType(module.ModuleDefinition.ControlTypeTemplate.Replace(Constants.ActionToken, action), false, true); page.Resources = ManagePageResources(page.Resources, moduleobject.Resources, ResourceLevel.Module, alias, "Modules", moduletype.Namespace);
if (moduletype != null)
{
moduleobject = Activator.CreateInstance(moduletype) as IModuleControl;
page.Resources = ManagePageResources(page.Resources, moduleobject.Resources, ResourceLevel.Module, alias, "Modules", moduletype.Namespace);
}
}
// additional metadata needed for admin components
if (module.ModuleId == moduleid && action != "")
{
module.ControlTitle = moduleobject.Title;
module.SecurityAccessLevel = moduleobject.SecurityAccessLevel;
module.Actions = moduleobject.Actions;
module.UseAdminContainer = moduleobject.UseAdminContainer;
} }
} }
// validate that module's pane exists in current page // additional metadata needed for admin components
if (page.Panes.FindIndex(item => item.Equals(module.Pane, StringComparison.OrdinalIgnoreCase)) == -1) if (module.ModuleId == moduleid && action != "")
{ {
// fallback to default pane if it exists module.ControlTitle = moduleobject.Title;
if (page.Panes.FindIndex(item => item.Equals(PaneNames.Default, StringComparison.OrdinalIgnoreCase)) != -1) module.SecurityAccessLevel = moduleobject.SecurityAccessLevel;
{ module.Actions = moduleobject.Actions;
module.Pane = PaneNames.Default; module.UseAdminContainer = moduleobject.UseAdminContainer;
}
else // otherwise admin pane (legacy)
{
module.Pane = PaneNames.Admin;
}
} }
}
// calculate module position within pane // validate that module's pane exists in current page
if (paneindex.ContainsKey(module.Pane.ToLower())) if (page.Panes.FindIndex(item => item.Equals(module.Pane, StringComparison.OrdinalIgnoreCase)) == -1)
{
// fallback to default pane if it exists
if (page.Panes.FindIndex(item => item.Equals(PaneNames.Default, StringComparison.OrdinalIgnoreCase)) != -1)
{ {
paneindex[module.Pane.ToLower()] += 1; module.Pane = PaneNames.Default;
} }
else else // otherwise admin pane (legacy)
{ {
paneindex.Add(module.Pane.ToLower(), 0); module.Pane = PaneNames.Admin;
} }
}
module.PaneModuleIndex = paneindex[module.Pane.ToLower()]; // calculate module position within pane
if (paneindex.ContainsKey(module.Pane.ToLower()))
{
paneindex[module.Pane.ToLower()] += 1;
}
else
{
paneindex.Add(module.Pane.ToLower(), 0);
}
// container fallback module.PaneModuleIndex = paneindex[module.Pane.ToLower()];
if (string.IsNullOrEmpty(module.ContainerType))
{ // container fallback
module.ContainerType = defaultcontainertype; if (string.IsNullOrEmpty(module.ContainerType))
} {
module.ContainerType = defaultcontainertype;
} }
} }