/// <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;
 }
Example #3
0
        /// <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 );
 }
Example #5
0
        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;
        }