Skip to content
Snippets Groups Projects
Select Git revision
  • uiv2
  • master default protected
  • gitkeep
  • Issue/2463-newCoscinePIDTypes
  • dev protected
  • Issue/2309-docs
  • Issue/2259-updatePids
  • Issue/1321-pidEnquiryOverhaul
  • Issue/2158-emailServicedesk
  • Hotfix/2130-uiv2ContactChange
  • Hotfix/2087-efNet6
  • Issue/1910-MigrationtoNET6.0
  • Issue/1971-projectEditCreateMigration
  • Issue/1980-userManagement
  • Sprint/2022-01
  • Sprint/2021-2022
  • Issue/1741-semanticSearchActions
  • Sprint/2021-23
  • Issue/1746-ApplicationProfileStoringMethod
  • Hotfix/1466-projectCreationTimeout
  • v3.3.2
  • v3.3.1
  • v3.3.0
  • v3.2.0
  • v3.1.0
  • v3.0.0
  • v2.4.1
  • v2.4.0
  • v2.3.0
  • v2.2.0
  • v2.1.1
  • v2.1.0
  • v2.0.0
  • v1.18.0
  • v1.17.1
  • v1.17.0
  • v1.16.0
  • v1.15.1
  • v1.15.0
  • v1.14.0
40 results

Emitter.cs

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Emitter.cs 5.40 KiB
    using Coscine.Action.EventArgs;
    using Coscine.Configuration;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace Coscine.Action
    {
        public class Emitter
        {
            private readonly List<IProjectAction> projectActions = new List<IProjectAction>();
            private readonly List<IUserAction> userActions = new List<IUserAction>();
            private readonly List<IResourceAction> resourceActions = new List<IResourceAction>();
            private readonly List<IPIDAction> pidActions = new List<IPIDAction>();
            private readonly List<IAdminAction> adminActions = new List<IAdminAction>();
            private readonly List<IContactChangeAction> contactChangeActions = new List<IContactChangeAction>();
            private readonly List<IMetadataAction> metadataActions = new List<IMetadataAction>();
            private readonly List<IApplicationProfileAction> applicationProfileActions = new List<IApplicationProfileAction>();
    
            public IConfiguration Configuration { get; }
    
            public Emitter(IConfiguration configuration)
            {
                Configuration = configuration;
                RegisterLocalImplementations();
            }
    
            private void RegisterLocalImplementations()
            {
                var assembly = System.Reflection.Assembly.GetExecutingAssembly();
    
                var pa = InstantiateAllImplementations<IProjectAction>(assembly);
                projectActions.AddRange(pa);
    
                var ua = InstantiateAllImplementations<IUserAction>(assembly);
                userActions.AddRange(ua);
    
                var ca = InstantiateAllImplementations<IContactChangeAction>(assembly);
                contactChangeActions.AddRange(ca);
    
                var ra = InstantiateAllImplementations<IResourceAction>(assembly);
                resourceActions.AddRange(ra);
    
                var pida = InstantiateAllImplementations<IPIDAction>(assembly);
                pidActions.AddRange(pida);
    
                var adminA = InstantiateAllImplementations<IAdminAction>(assembly);
                adminActions.AddRange(adminA);
    
                var metadataA = InstantiateAllImplementations<IMetadataAction>(assembly);
                metadataActions.AddRange(metadataA);
    
                var apa = InstantiateAllImplementations<IApplicationProfileAction>(assembly);
                applicationProfileActions.AddRange(apa);
            }
    
            private static IEnumerable<T> InstantiateAllImplementations<T>(System.Reflection.Assembly assembly) where T : IAction
            {
                return from t in assembly.DefinedTypes
                       where t.ImplementedInterfaces.Contains(typeof(T))
                       let i = (T)t.GetConstructor(Array.Empty<Type>()).Invoke(Array.Empty<object>())
                       where i.Enabled
                       orderby i.Priority ascending
                       select i;
            }
    
            public void EmitProjectCreate(ProjectEventArgs args)
            {
                foreach (var action in projectActions)
                {
                    action.OnProjectCreate(args);
                }
            }
    
            public void EmitProjectDelete(ProjectEventArgs args)
            {
                foreach (var action in projectActions)
                {
                    action.OnProjectDelete(args);
                }
            }
    
            public void EmitUserAdd(UserEventArgs args)
            {
                foreach (var action in userActions)
                {
                    action.OnUserSet(args);
                }
            }
    
            public void EmitUserRemove(UserEventArgs args)
            {
                foreach (var action in userActions)
                {
                    action.OnUserDelete(args);
                }
            }
    
            public void EmitContactChange(ContactChangeEventArgs args)
            {
                foreach (var action in contactChangeActions)
                {
                    action.OnContactChange(args);
                }
            }
    
            public void EmitResourceCreate(ResourceEventArgs args)
            {
                foreach (var action in resourceActions)
                {
                    action.OnResourceCreate(args);
                }
            }
    
            public void EmitResourceDelete(ResourceEventArgs args)
            {
                foreach (var action in resourceActions)
                {
                    action.OnResourceDelete(args);
                }
            }
    
            public void EmitPIDOwnerContact(PIDEventArgs args)
            {
                foreach (var action in pidActions)
                {
                    action.OnPIDOwnerContact(args);
                }
            }
    
            public void EmitQuotaChanged(AdminEventArgs args)
            {
                foreach (var action in adminActions)
                {
                    action.OnQutaChanged(args);
                }
            }
    
            public void EmitMetadataCreate(MetadataEventArgs args)
            {
                foreach (var action in metadataActions)
                {
                    action.OnMetadataCreate(args);
                }
            }
    
            public void EmitMetadataUpdate(MetadataEventArgs args)
            {
                foreach (var action in metadataActions)
                {
                    action.OnMetadataUpdate(args);
                }
            }
    
            public void EmitMetadataDelete(MetadataEventArgs args)
            {
                foreach (var action in metadataActions)
                {
                    action.OnMetadataDelete(args);
                }
            }
    
            public void EmitApplicationProfileRequest(ApplicationProfileEventArgs args)
            {
                foreach (var a in applicationProfileActions)
                {
                    a.OnApplicationProfileRequest(args);
                }
            }
        }
    }