/// <summary> /// Returns a <see cref="ILogServiceConfig"/> snapshot of the <see cref="ILogServiceConfig"/> set as parameter /// </summary> /// <param name="source"><see cref="ILogServiceConfig"/> to copy</param> /// <returns></returns> private static ILogServiceConfig Clone( ILogServiceConfig source ) { LogEventConfig e; LogMethodConfig m; LogServiceConfig s; s = new LogServiceConfig( source.Name ); s.DoLog = source.DoLog; foreach( ILogEventConfig eToCopy in source.Events ) { e = new LogEventConfig( eToCopy.Name, new List<ILogParameterInfo>(), eToCopy.LogOptions, eToCopy.DoLog ); foreach( ILogParameterInfo logParameterInfoToCopy in eToCopy.Parameters ) e.Parameters.Add( new LogParameterInfo( logParameterInfoToCopy.ParameterName, logParameterInfoToCopy.ParameterType ) ); s.Events.Add( e ); } foreach( ILogMethodConfig mToCopy in source.Methods ) { m = new LogMethodConfig( mToCopy.Name, mToCopy.ReturnType, new List<ILogParameterInfo>(), mToCopy.LogOptions, mToCopy.DoLog ); foreach( ILogParameterInfo parameterToCopy in mToCopy.Parameters ) m.Parameters.Add( new LogParameterInfo( parameterToCopy.ParameterName, parameterToCopy.ParameterType ) ); s.Methods.Add( m ); } foreach( ILogPropertyConfig pToCopy in source.Properties ) s.Properties.Add( new LogPropertyConfig( pToCopy.PropertyType, pToCopy.Name, pToCopy.DoLogErrors, pToCopy.LogFilter, pToCopy.DoLog ) ); return s; }
/// <summary> /// Creates a new <see cref="ILogConfig"/> that is a clone of this configuration with a clone of the <see cref="ILogServiceConfig"/> parameter. /// </summary> /// <param name="config">This <see cref="ILogConfig"/>.</param> /// <param name="s">A <see cref="ILogServiceConfig"/> which log configuration needs to be applied.</param> /// <returns>A clone of this configuration with a clone of the <paramref name="s"/> service config.</returns> public static ILogConfig CombineWith( this ILogConfig config, ILogServiceConfig s ) { LogConfig c = (LogConfig)config.Clone(); for( int i = 0; i < c.Services.Count; i++ ) { if( c.Services[i].Name == s.Name ) { c.Services.RemoveAt( i ); break; } } c.Services.Add( Clone( s ) ); return c; }
/// <summary> /// Updates all VMLogMethodConfig, VMLogEventConfig and VMLogPropertyConfig to reflect the Log service configuration set as parameter /// </summary> /// <param name="s"></param> public bool UpdateFrom( ILogServiceConfig s, bool trackChanges ) { bool childHasChanged = false; bool hasChanged = false; VMLogMethodConfig vmMethod; foreach( ILogMethodConfig m in s.Methods ) { vmMethod = FindMethod( m.GetSimpleSignature() ); if( vmMethod != null ) //The VM exists { childHasChanged = vmMethod.UpdateFrom( m ); if( childHasChanged ) hasChanged = true; } else //The VM doesn't exist, create an unbound one { _methods.Add( VMLogMethodConfig.CreateFrom( this, m ) ); hasChanged = true; } } childHasChanged = false; VMLogEventConfig vmEvent; foreach( ILogEventConfig e in s.Events ) { vmEvent = FindEvent( e.Name ); if( vmEvent != null ) //The VM exists { childHasChanged = vmEvent.UpdateFrom( e ); if( childHasChanged ) hasChanged = true; } else //The VM doesn't exist, create an unbound one { _events.Add( VMLogEventConfig.CreateFrom( this, e ) ); hasChanged = true; } } childHasChanged = false; VMLogPropertyConfig vmProperty; foreach( ILogPropertyConfig p in s.Properties ) { vmProperty = FindProperty( p.Name ); if( vmProperty != null ) //The VM exists { childHasChanged = vmProperty.UpdateFrom( p ); if( childHasChanged ) hasChanged = true; } else //The VM doesn't exist, create an unbound one { _properties.Add( VMLogPropertyConfig.CreateFrom( p ) ); hasChanged = true; } } if( DoLog != s.DoLog ) { hasChanged = true; DoLog = s.DoLog; } if( !trackChanges ) // If we dont track changes, that's because we update from the kernel, we set IsDirty to false IsDirty = false; else if( hasChanged ) IsDirty = true; return hasChanged; }
public void ApplyConfiguration( ILogServiceConfig s ) { if( _logConfig != null ) _logConfig = _logConfig.CombineWith( s ); }
public static VMLogServiceConfig CreateFrom( VMLogConfig holder, ILogServiceConfig s ) { VMLogServiceConfig result = new VMLogServiceConfig( s.Name, false ); result._holder = holder; result.Config = holder.Config; result._doLog = s.DoLog; foreach( ILogEventConfig e in s.Events ) { VMLogEventConfig evVM = VMLogEventConfig.CreateFrom( result, e ); evVM.LogConfigChanged += new EventHandler<PropertyChangedEventArgs>( ( sndr, args ) => { result.IsDirty = true; } ); result.Events.Add( evVM ); } foreach( ILogPropertyConfig p in s.Properties ) { VMLogPropertyConfig propVM = VMLogPropertyConfig.CreateFrom( p ); propVM.LogConfigChanged += new EventHandler<PropertyChangedEventArgs>( ( sndr, args ) => { result.IsDirty = true; } ); result.Properties.Add( propVM ); } foreach( ILogMethodConfig m in s.Methods ) { VMLogMethodConfig mthdVM = VMLogMethodConfig.CreateFrom( result, m ); mthdVM.LogConfigChanged += new EventHandler<PropertyChangedEventArgs>( ( sndr, args ) => { result.IsDirty = true; } ); result.Methods.Add( mthdVM ); } return result; }