/// <summary> /// Modify the contents of this resource manager to match the contents of toMatch. /// This will fire the add/remove events for groups and individual resources to all /// subscribed delegates. /// </summary> /// <param name="toMatch">The resource manager to match.</param> public void changeResourcesToMatch(ResourceManager toMatch) { //Unload any non matching subsystems LinkedList <String> unloadedResources = new LinkedList <String>(); foreach (SubsystemResources resource in subsystemResources.Values) { if (!toMatch.subsystemResources.ContainsKey(resource.Name)) { resource.sendUnloadSignals(); unloadedResources.AddLast(resource.Name); } } //Remove unloaded resources foreach (String name in unloadedResources) { subsystemResources.Remove(name); } //Add any new resources foreach (SubsystemResources resource in toMatch.subsystemResources.Values) { if (!subsystemResources.ContainsKey(resource.Name)) { SubsystemResources sub = new SubsystemResources(resource.Name); subsystemResources.Add(resource.Name, sub); } subsystemResources[resource.Name].changeResourcesToMatch(resource); } }
/// <summary> /// Change the resources of this SubsystemResources to match the ones in toMatch. /// This will fire the events as appropriate. See ResourceManager for more details. /// </summary> /// <param name="toMatch">The SubsystemResources to match.</param> public void changeResourcesToMatch(SubsystemResources toMatch) { //Unload non matching groups LinkedList <String> unloadedResources = new LinkedList <String>(); foreach (ResourceGroup group in resourceGroups.Values) { if (!toMatch.resourceGroups.ContainsKey(group.Name)) { unloadedResources.AddLast(group.Name); } } //Remove unloaded groups foreach (String name in unloadedResources) { removeResourceGroup(name); } //Add any new groups foreach (ResourceGroup group in toMatch.resourceGroups.Values) { if (!resourceGroups.ContainsKey(group.Name)) { ResourceGroup resourceGroup = new ResourceGroup(group.Name); this.addResourceGroup(resourceGroup); } resourceGroups[group.Name].changeResourcesToMatch(group); } }
private ResourceManager(LoadInfo info) { Namespace = info.GetString("Namespace", null); for (int i = 0; info.hasValue(SUBSYSTEM_BASE + i); ++i) { SubsystemResources subsystem = info.GetValue <SubsystemResources>(SUBSYSTEM_BASE + i); this.addSubsystemResource(subsystem); } }
/// <summary> /// This constructor will duplicate the contents of toDuplicate. /// </summary> /// <param name="toDuplicate">Duplicate the contents of this ResourceGroup.</param> internal ResourceGroup(ResourceGroup toDuplicate, SubsystemResources parent) { this.name = toDuplicate.name; this.parent = parent; foreach (Resource resource in toDuplicate.resources.Values) { this.addResource(new Resource(resource.LocName, resource.ArchiveType, resource.Recursive)); } }
/// <summary> /// Remove a subsystem resource from this manager. /// </summary> /// <param name="resources">The subsystem resources to remove.</param> internal void removeSubsystemResource(SubsystemResources resources) { if (subsystemResources.ContainsKey(resources.Name)) { resources.ParentResourceManager = null; subsystemResources.Remove(resources.Name); } else { Log.Default.sendMessage("The subsystem {0} does not have any resources defined so it cannot be removed. No changes made.", LogLevel.Warning, "ResourceManagement", resources.Name); } }
/// <summary> /// Add a subsystem resource to this resource manager. /// </summary> /// <param name="resources">The subsystem resources to add.</param> internal void addSubsystemResource(SubsystemResources resources) { if (!subsystemResources.ContainsKey(resources.Name)) { subsystemResources.Add(resources.Name, resources); resources.ParentResourceManager = this; } else { Log.Default.sendMessage("The subsystem {0} has resources defined already. Ignoring new resources.", LogLevel.Error, "ResourceManagement", resources.Name); } }
/// <summary> /// Add resources without removing old ones. Use to combine multiple ResourceManagers together. /// </summary> /// <param name="toAdd">The ResourceManager to add resources from.</param> public void addResources(ResourceManager toAdd) { //Add new resources foreach (SubsystemResources resource in toAdd.subsystemResources.Values) { if (!subsystemResources.ContainsKey(resource.Name)) { SubsystemResources sub = new SubsystemResources(resource.Name); subsystemResources.Add(resource.Name, sub); } subsystemResources[resource.Name].addResources(resource); } }
/// <summary> /// Constructor. Takes the SubsystemResource to duplicate. This does not copy the listener. /// </summary> /// <param name="toDuplicate">Enter the contents of this SubystemResource into the new one.</param> /// <param name="live">True to also hook up the source subsystem resources listener. If you are setting this to true /// it is reccomended that there not actually be any resources in the ResourceManager.</param> internal SubsystemResources(SubsystemResources toDuplicate, bool live) { this.name = toDuplicate.name; foreach (ResourceGroup group in toDuplicate.resourceGroups.Values) { this.addResourceGroup(new ResourceGroup(group, this)); } //We do the live hookup last since this is a clone and if there are resources, the subsystems already know about them. if (live) { this.listener = toDuplicate.listener; } }
/// <summary> /// Add resources without removing old ones. /// </summary> /// <param name="toAdd">The resources to add.</param> public void addResources(SubsystemResources toAdd) { //Add any new groups foreach (ResourceGroup group in toAdd.resourceGroups.Values) { if (!resourceGroups.ContainsKey(group.Name)) { ResourceGroup resourceGroup = new ResourceGroup(group.Name); this.addResourceGroup(resourceGroup); } resourceGroups[group.Name].addResources(group); } }
internal void setParent(SubsystemResources parent) { this.parent = parent; }