/// <summary> /// Updates the state of the current instance to the corresponding procedural resource /// </summary> protected void Update() { var procedural = ResourceProviderInternal.SelectProceduralResources()?.FirstOrDefault(item => item.Name == Name) ?? throw new InvalidOperationException($"Cannot update resource '{Name}'. Resource has not been inserted."); var resource = (IResourceInternal)Meta.Resource.SafeGet(procedural.Type) ?? throw new InvalidOperationException($"Cannot update resource '{Name}'. Resource has not been inserted."); resource.SetAlias(Alias); ResourceProviderInternal.SetProceduralResourceDescription(procedural, Description); resource.Description = Description; var methods = EnabledMethods.ResolveMethodRestrictions().ToArray(); ResourceProviderInternal.SetProceduralResourceMethods(procedural, methods); resource.AvailableMethods = methods; }
/// <summary> /// Deletes the corresponding procedural resource /// </summary> protected void Delete() { var procedural = ResourceProviderInternal.SelectProceduralResources()?.FirstOrDefault(item => item.Name == Name); if (procedural == null) { return; } var type = procedural.Type; Db.TransactAsync(() => ResourceAlias.GetByResource(procedural.Name)?.Delete()); if (ResourceProviderInternal.DeleteProceduralResource(procedural)) { ResourceProviderInternal.RemoveProceduralResource(type); } }
/// <summary> /// Inserts the current instance as a new procedural resource /// </summary> protected void Insert() { var name = Name; var methods = EnabledMethods; var description = Description; if (string.IsNullOrWhiteSpace(name)) { throw new Exception("Missing or invalid name for new resource"); } ResolveDynamicResourceName(ref name); var methodsArray = methods.ResolveMethodRestrictions().ToArray(); var inserted = ResourceProviderInternal.InsertProceduralResource(name, description, methodsArray, (object)Data); if (inserted != null) { ResourceProviderInternal.InsertProcedural(inserted); } var resource = (IResourceInternal)Meta.Resource.SafeGet(name); resource.SetAlias(Alias); }
/// <summary> /// Selects the instances that have been inserted by this controller /// </summary> protected static IEnumerable <TController> Select() => ResourceProviderInternal .SelectProceduralResources() .OrderBy(r => r.Name) .Select(r => Make <TController>(Meta.Resource.SafeGet(r.Name)));