Hi,

For olive I need some missing stuff in System.dll, so I created
some stubby classes. If no problem, I'll commit the patch later.

(CCing jonp as he might be maintaining things in that area.)

Atsushi Eno
Index: Test/System.Diagnostics/TraceSourceTest.cs
===================================================================
--- Test/System.Diagnostics/TraceSourceTest.cs  (revision 0)
+++ Test/System.Diagnostics/TraceSourceTest.cs  (revision 0)
@@ -0,0 +1,76 @@
+//
+// TraceSourceTest.cs
+//
+// Author:
+//     Atsushi Enomoto  <[EMAIL PROTECTED]>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+
+#if NET_2_0
+
+using NUnit.Framework;
+using System;
+using System.Text;
+using System.Collections;
+using System.Configuration;
+using System.Diagnostics;
+
+namespace MonoTests.System.Diagnostics
+{
+       [TestFixture]
+       public class TraceSourceTest
+       {
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void ConstructorNullName ()
+               {
+                       new TraceSource (null);
+               }
+
+               [Test]
+               public void DefaultValues ()
+               {
+                       TraceSource ts = new TraceSource ("foo");
+                       Assert.AreEqual ("foo", ts.Name, "#1");
+                       Assert.IsNotNull (ts.Switch, "#2");
+                       Assert.AreEqual (SourceLevels.Off, ts.Switch.Level, 
"#3");
+                       Assert.IsNotNull (ts.Listeners, "#4");
+                       Assert.AreEqual (1, ts.Listeners.Count, "#5");
+                       Assert.IsNotNull (ts.Attributes, "#6");
+                       Assert.AreEqual (0, ts.Attributes.Count, "#7");
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void SetSourceSwitchNull ()
+               {
+                       TraceSource ts = new TraceSource ("foo");
+                       ts.Switch = null;
+               }
+       }
+}
+
+#endif
Index: Test/System.Diagnostics/SourceSwitchTest.cs
===================================================================
--- Test/System.Diagnostics/SourceSwitchTest.cs (revision 0)
+++ Test/System.Diagnostics/SourceSwitchTest.cs (revision 0)
@@ -0,0 +1,104 @@
+//
+// SourceSwitchTest.cs
+//
+// Author:
+//     Atsushi Enomoto  <[EMAIL PROTECTED]>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+
+#if NET_2_0
+
+using NUnit.Framework;
+using System;
+using System.Text;
+using System.Collections;
+using System.Configuration;
+using System.Diagnostics;
+
+namespace MonoTests.System.Diagnostics
+{
+       [TestFixture]
+       public class SourceSwitchTest
+       {
+               [Test]
+               public void ConstructorNullName ()
+               {
+                       SourceSwitch s = new SourceSwitch (null);
+                       Assert.IsNull (s.DisplayName);
+               }
+
+               [Test]
+               public void ConstructorNullDefaultValue ()
+               {
+                       SourceSwitch s = new SourceSwitch ("foo", null);
+               }
+
+               [Test]
+               public void ConstructorDefault ()
+               {
+                       SourceSwitch s = new SourceSwitch ("foo");
+                       Assert.AreEqual ("foo", s.DisplayName, "#1");
+                       Assert.AreEqual (SourceLevels.Off, s.Level, "#2");
+                       Assert.AreEqual (0, s.Attributes.Count, "#3");
+               }
+
+               [Test]
+               public void ShouldTrace ()
+               {
+                       SourceSwitch s = new SourceSwitch ("foo");
+                       s.Level = SourceLevels.Verbose;
+                       Assert.IsTrue (s.ShouldTrace (TraceEventType.Critical), 
"#1");
+                       Assert.IsTrue (s.ShouldTrace (TraceEventType.Error), 
"#2");
+                       Assert.IsTrue (s.ShouldTrace (TraceEventType.Warning), 
"#3");
+                       Assert.IsTrue (s.ShouldTrace 
(TraceEventType.Information), "#4");
+                       Assert.IsTrue (s.ShouldTrace (TraceEventType.Verbose), 
"#5");
+                       Assert.IsFalse (s.ShouldTrace (TraceEventType.Start), 
"#6");
+                       Assert.IsFalse (s.ShouldTrace (TraceEventType.Stop), 
"#7");
+                       Assert.IsFalse (s.ShouldTrace (TraceEventType.Suspend), 
"#8");
+                       Assert.IsFalse (s.ShouldTrace (TraceEventType.Resume), 
"#9");
+                       Assert.IsFalse (s.ShouldTrace 
(TraceEventType.Transfer), "#10");
+               }
+
+               [Test]
+               public void ShouldTrace2 ()
+               {
+                       SourceSwitch s = new SourceSwitch ("foo");
+                       s.Level = SourceLevels.ActivityTracing;
+                       Assert.IsFalse (s.ShouldTrace 
(TraceEventType.Critical), "#1");
+                       Assert.IsFalse (s.ShouldTrace (TraceEventType.Error), 
"#2");
+                       Assert.IsFalse (s.ShouldTrace (TraceEventType.Warning), 
"#3");
+                       Assert.IsFalse (s.ShouldTrace 
(TraceEventType.Information), "#4");
+                       Assert.IsFalse (s.ShouldTrace (TraceEventType.Verbose), 
"#5");
+                       Assert.IsTrue (s.ShouldTrace (TraceEventType.Start), 
"#6");
+                       Assert.IsTrue (s.ShouldTrace (TraceEventType.Stop), 
"#7");
+                       Assert.IsTrue (s.ShouldTrace (TraceEventType.Suspend), 
"#8");
+                       Assert.IsTrue (s.ShouldTrace (TraceEventType.Resume), 
"#9");
+                       Assert.IsTrue (s.ShouldTrace (TraceEventType.Transfer), 
"#10");
+               }
+       }
+}
+
+#endif
Index: Test/System.Diagnostics/ChangeLog
===================================================================
--- Test/System.Diagnostics/ChangeLog   (revision 71034)
+++ Test/System.Diagnostics/ChangeLog   (working copy)
@@ -1,3 +1,7 @@
+2007-01-17  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * TRaceSourceTest.cs, SourceSwitchTest.cs : new tests.
+
 2007-01-02  Gert Driesen  <[EMAIL PROTECTED]>
 
        * ProcessTest.cs: Added null check tests.
Index: Test/System.Diagnostics/SwitchesTest.cs
===================================================================
--- Test/System.Diagnostics/SwitchesTest.cs     (revision 71034)
+++ Test/System.Diagnostics/SwitchesTest.cs     (working copy)
@@ -25,7 +25,7 @@
                private StringBuilder ops = new StringBuilder ();
                private const string expected = 
                        ".ctor\n" +
-                       "get_Value\n" +
+                       "get_ValueFoo\n" +
                        "OnSwitchSettingChanged\n" +
                        "GetSetting\n";
 
@@ -35,9 +35,9 @@
                        ops.Append (".ctor\n");
                }
 
-               public string Value {
+               public string ValueFoo {
                        get {
-                               ops.Append ("get_Value\n");
+                               ops.Append ("get_ValueFoo\n");
                                // ensure that the .config file is read in
                                int n = base.SwitchSetting;
                                // remove warning about unused variable
@@ -136,7 +136,7 @@
 #endif
                public void NewSwitch ()
                {
-                       AssertEquals ("#NS:Value", "42", tns.Value);
+                       AssertEquals ("#NS:ValueFoo", "42", tns.ValueFoo);
                        Assert ("#NS:Validate", tns.Validate());
                }
        }
Index: System.dll.sources
===================================================================
--- System.dll.sources  (revision 71034)
+++ System.dll.sources  (working copy)
@@ -436,6 +436,7 @@
 System.Diagnostics/AlphabeticalEnumConverter.cs
 System.Diagnostics/BooleanSwitch.cs
 System.Diagnostics/ConsoleTraceListener.cs
+System.Diagnostics/CorrelationManager.cs
 System.Diagnostics/CounterCreationDataCollection.cs
 System.Diagnostics/CounterCreationData.cs
 System.Diagnostics/CounterSampleCalculator.cs
@@ -488,6 +489,8 @@
 System.Diagnostics/ProcessThreadCollection.cs
 System.Diagnostics/ProcessThread.cs
 System.Diagnostics/ProcessWindowStyle.cs
+System.Diagnostics/SourceLevels.cs
+System.Diagnostics/SourceSwitch.cs
 System.Diagnostics/Switch.cs
 System.Diagnostics/Stopwatch.cs
 System.Diagnostics/TextWriterTraceListener.cs
@@ -495,10 +498,13 @@
 System.Diagnostics/ThreadState.cs
 System.Diagnostics/ThreadWaitReason.cs
 System.Diagnostics/Trace.cs
+System.Diagnostics/TraceEventCache.cs
+System.Diagnostics/TraceEventType.cs
 System.Diagnostics/TraceImpl.cs
 System.Diagnostics/TraceLevel.cs
 System.Diagnostics/TraceListenerCollection.cs
 System.Diagnostics/TraceListener.cs
+System.Diagnostics/TraceSource.cs
 System.Diagnostics/TraceSwitch.cs
 System.Diagnostics/Win32EventLog.cs
 System/FileStyleUriParser.cs
Index: System.Diagnostics/TraceSource.cs
===================================================================
--- System.Diagnostics/TraceSource.cs   (revision 0)
+++ System.Diagnostics/TraceSource.cs   (revision 0)
@@ -0,0 +1,186 @@
+//
+// TraceSource.cs
+//
+// Author:
+//     Atsushi Enomoto  <[EMAIL PROTECTED]>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+
+namespace System.Diagnostics
+{
+       public class TraceSource
+       {
+               SourceSwitch source_switch;
+               TraceListenerCollection listeners =
+                       new TraceListenerCollection ();
+               TraceEventCache cache = new TraceEventCache ();
+
+               public TraceSource (string name)
+                       : this (name, SourceLevels.Off)
+               {
+               }
+
+               public TraceSource (string name, SourceLevels sourceLevels)
+               {
+                       if (name == null)
+                               throw new ArgumentNullException ("name");
+                       source_switch = new SourceSwitch (name);
+                       source_switch.Level = sourceLevels;
+               }
+
+               public StringDictionary Attributes {
+                       get { return source_switch.Attributes; }
+               }
+
+               public TraceListenerCollection Listeners {
+                       get { return listeners; }
+               }
+
+               public string Name {
+                       get { return source_switch.DisplayName; }
+               }
+
+               public SourceSwitch Switch {
+                       get { return source_switch; }
+                       set {
+                               if (value == null)
+                                       throw new ArgumentNullException 
("value");
+                               source_switch = value;
+                       }
+               }
+
+               public void Close ()
+               {
+                       lock (((ICollection) listeners).SyncRoot) {
+                               foreach (TraceListener tl in listeners)
+                                       tl.Close ();
+                       }
+               }
+
+               public void Flush ()
+               {
+                       lock (((ICollection) listeners).SyncRoot) {
+                               foreach (TraceListener tl in listeners)
+                                       tl.Flush ();
+                       }
+               }
+
+               [Conditional ("TRACE")]
+               public void TraceData (
+                       TraceEventType eventType, int id, object data)
+               {
+                       if (!source_switch.ShouldTrace (eventType))
+                               return;
+                       lock (((ICollection) listeners).SyncRoot) {
+                               foreach (TraceListener tl in listeners)
+                                       tl.TraceData (cache, Name, eventType, 
id, data);
+                       }
+               }
+
+               [Conditional ("TRACE")]
+               public void TraceData (
+                       TraceEventType eventType, int id, params object [] data)
+               {
+                       if (!source_switch.ShouldTrace (eventType))
+                               return;
+                       lock (((ICollection) listeners).SyncRoot) {
+                               foreach (TraceListener tl in listeners)
+                                       tl.TraceData (cache, Name, eventType, 
id, data);
+                       }
+               }
+
+               [Conditional ("TRACE")]
+               public void TraceEvent (TraceEventType eventType, int id)
+               {
+                       if (!source_switch.ShouldTrace (eventType))
+                               return;
+                       lock (((ICollection) listeners).SyncRoot) {
+                               foreach (TraceListener tl in listeners)
+                                       tl.TraceEvent (cache, Name, eventType, 
id);
+                       }
+               }
+
+               [Conditional ("TRACE")]
+               public void TraceEvent (TraceEventType eventType,
+                       int id, string message)
+               {
+                       if (!source_switch.ShouldTrace (eventType))
+                               return;
+                       lock (((ICollection) listeners).SyncRoot) {
+                               foreach (TraceListener tl in listeners)
+                                       tl.TraceEvent (cache, Name, eventType, 
id, message);
+                       }
+               }
+
+               [Conditional ("TRACE")]
+               public void TraceEvent (TraceEventType eventType,
+                       int id, string format, params object [] args)
+               {
+                       if (!source_switch.ShouldTrace (eventType))
+                               return;
+                       lock (((ICollection) listeners).SyncRoot) {
+                               foreach (TraceListener tl in listeners)
+                                       tl.TraceEvent (cache, Name, eventType, 
id, format, args);
+                       }
+               }
+
+               [Conditional ("TRACE")]
+               public void TraceInformation (string format)
+               {
+                       TraceEvent (TraceEventType.Information, 0, format);
+               }
+
+               [Conditional ("TRACE")]
+               public void TraceInformation (
+                       string format, params object [] args)
+               {
+                       TraceEvent (TraceEventType.Information, 0, format, 
args);
+               }
+
+               [Conditional ("TRACE")]
+               public void TraceTransfer (int id, string message, Guid 
relatedActivityId)
+               {
+                       if (!source_switch.ShouldTrace (TraceEventType.Transfer 
))
+                               return;
+                       lock (((ICollection) listeners).SyncRoot) {
+                               foreach (TraceListener tl in listeners)
+                                       tl.TraceTransfer (cache, Name, id, 
message, relatedActivityId);
+                       }
+               }
+
+               protected virtual string [] GetSupportedAttributes ()
+               {
+                       return null;
+               }
+       }
+}
+
+#endif
Index: System.Diagnostics/SourceLevels.cs
===================================================================
--- System.Diagnostics/SourceLevels.cs  (revision 0)
+++ System.Diagnostics/SourceLevels.cs  (revision 0)
@@ -0,0 +1,53 @@
+//
+// SourceLevels.cs
+//
+// Author:
+//     Atsushi Enomoto  <[EMAIL PROTECTED]>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using System;
+using System.ComponentModel;
+
+namespace System.Diagnostics
+{
+       [Flags]
+       public enum SourceLevels
+       {
+               Off = 0,
+               Critical = 1,
+               Error = 3,
+               Warning = 7,
+               Information = 15,
+               Verbose = 31,
+               [EditorBrowsable (EditorBrowsableState.Advanced)]
+               ActivityTracing = 0xFF00,
+               All = -1,
+       }
+}
+
+#endif
Index: System.Diagnostics/CorrelationManager.cs
===================================================================
--- System.Diagnostics/CorrelationManager.cs    (revision 0)
+++ System.Diagnostics/CorrelationManager.cs    (revision 0)
@@ -0,0 +1,73 @@
+//
+// CorrelationManager.cs
+//
+// Author:
+//     Atsushi Enomoto  <[EMAIL PROTECTED]>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using System;
+using System.Collections;
+
+namespace System.Diagnostics
+{
+       public class CorrelationManager
+       {
+               Guid activity;
+               Stack op_stack = new Stack ();
+
+               internal CorrelationManager ()
+               {
+               }
+
+               [MonoTODO]
+               public Guid ActivityId {
+                       get { return activity; }
+                       set { activity = value; }
+               }
+
+               public Stack LogicalOperationStack {
+                       get { return op_stack; }
+               }
+
+               public void StartLogicalOperation ()
+               {
+                       StartLogicalOperation (Guid.NewGuid ());
+               }
+
+               public void StartLogicalOperation (object operationId)
+               {
+                       op_stack.Push (operationId);
+               }
+
+               public void StopLogicalOperation ()
+               {
+                       op_stack.Pop ();
+               }
+       }
+}
+#endif
Index: System.Diagnostics/ChangeLog
===================================================================
--- System.Diagnostics/ChangeLog        (revision 71034)
+++ System.Diagnostics/ChangeLog        (working copy)
@@ -1,3 +1,14 @@
+2007-01-17  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * Switch.cs : added missing .ctor(), Attributes, Value, 
+         GetSupportedAttributes() and OnValueChanged().
+       * DiagnosticsConfigurationHandler.cs : added some hacky handler for
+         new "sources" element. Don't wrap another ConfigurationException.
+       * TraceListener.cs : added missing trace methods.
+       * TraceSource.cs, SourceLevels.cs, CorrelationManager.cs,
+         TraceEventCache.cs, TraceEventType.cs, SourceSwitch.cs:
+         added missing 2.0 stuff, mostly just stubs.
+
 2007-01-12  Miguel de Icaza  <[EMAIL PROTECTED]>
 
        * Trace.cs: Add a number of 2.0 overloads.
Index: System.Diagnostics/Switch.cs
===================================================================
--- System.Diagnostics/Switch.cs        (revision 71034)
+++ System.Diagnostics/Switch.cs        (working copy)
@@ -33,6 +33,7 @@
 //
 
 using System.Collections;
+using System.Collections.Specialized;
 
 namespace System.Diagnostics
 {
@@ -63,6 +64,16 @@
                        this.description = description;
                }
 
+               private string value;
+
+#if NET_2_0
+               protected Switch(string displayName, string description, string 
defaultSwitchValue)
+                       : this (displayName, description)
+               {
+                       this.value = defaultSwitchValue;
+               }
+#endif
+
                public string Description {
                        get {return description;}
                }
@@ -89,6 +100,31 @@
                        }
                }
 
+#if NET_2_0
+               StringDictionary attributes = new StringDictionary ();
+
+               public StringDictionary Attributes {
+                       get { return attributes; }
+               }
+
+               protected string Value {
+                       get { return value; }
+                       set {
+                               this.value = value;
+                               OnValueChanged ();
+                       }
+               }
+
+               protected internal virtual string [] GetSupportedAttributes ()
+               {
+                       return null;
+               }
+
+               protected virtual void OnValueChanged ()
+               {
+               }
+#endif
+
                private void GetConfigFileSetting ()
                {
                        try {
Index: System.Diagnostics/TraceEventCache.cs
===================================================================
--- System.Diagnostics/TraceEventCache.cs       (revision 0)
+++ System.Diagnostics/TraceEventCache.cs       (revision 0)
@@ -0,0 +1,81 @@
+//
+// TraceEventCache.cs
+//
+// Author:
+//     Atsushi Enomoto  <[EMAIL PROTECTED]>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using System;
+using System.Collections;
+using System.Text;
+using System.Threading;
+
+namespace System.Diagnostics
+{
+       public class TraceEventCache
+       {
+               DateTime started;
+               CorrelationManager manager;
+
+               public TraceEventCache ()
+               {
+                       started = DateTime.MinValue;
+                       manager = new CorrelationManager ();
+               }
+
+               [MonoTODO]
+               public string Callstack {
+                       get { throw new NotImplementedException (); }
+               }
+
+               public DateTime DateTime {
+                       get {
+                               if (started == DateTime.MinValue)
+                                       started = DateTime.Now;
+                               return started;
+                       }
+               }
+
+               public Stack LogicalOperationStack {
+                       get { return manager.LogicalOperationStack; }
+               }
+
+               public int ProcessId {
+                       get { return Process.GetCurrentProcess ().Id; }
+               }
+
+               public string ThreadId {
+                       get { return Thread.CurrentThread.Name; }
+               }
+
+               public long Timestamp {
+                       get { return Stopwatch.GetTimestamp (); }
+               }
+       }
+}
+#endif
Index: System.Diagnostics/DiagnosticsConfigurationHandler.cs
===================================================================
--- System.Diagnostics/DiagnosticsConfigurationHandler.cs       (revision 71034)
+++ System.Diagnostics/DiagnosticsConfigurationHandler.cs       (working copy)
@@ -33,6 +33,7 @@
 //
 using System;
 using System.Collections;
+using System.Collections.Specialized;
 using System.Configuration;
 using System.Threading;
 #if (XML_DEP)
@@ -82,6 +83,9 @@
                        elementHandlers ["assert"] = new ElementHandler 
(AddAssertNode);
                        elementHandlers ["switches"] = new ElementHandler 
(AddSwitchesNode);
                        elementHandlers ["trace"] = new ElementHandler 
(AddTraceNode);
+#if NET_2_0
+                       elementHandlers ["sources"] = new ElementHandler 
(AddSourcesNode);
+#endif
                }
 
                public virtual object Create (object parent, object 
configContext, XmlNode section)
@@ -248,6 +252,9 @@
                                        d ["indentsize"] = n;
                                        TraceImpl.IndentSize = n;
                                }
+                               catch (ConfigurationException e) {
+                                       throw;
+                               }
                                catch (Exception e) {
                                        throw new ConfigurationException ("The 
`indentsize' attribute must be an integral value.",
                                                        e, node);
@@ -255,6 +262,82 @@
                        }
                }
 
+#if NET_2_0
+               static readonly Hashtable static_sources = new Hashtable ();
+
+               private void AddSourcesNode (IDictionary d, XmlNode node)
+               {
+                       // FIXME: are there valid attributes?
+                       ValidateInvalidAttributes (node.Attributes, node);
+                       Hashtable sources = d ["sources"] as Hashtable;
+                       if (sources == null) {
+                               sources = new Hashtable ();
+                               d ["sources"] = sources;
+                       }
+                       // FIXME: here I replace the table with fake static 
variable.
+                       sources = static_sources;
+
+                       foreach (XmlNode child in node.ChildNodes) {
+                               XmlNodeType t = child.NodeType;
+                               if (t == XmlNodeType.Whitespace || t == 
XmlNodeType.Comment)
+                                       continue;
+                               if (t == XmlNodeType.Element) {
+                                       if (child.Name == "source")
+                                               AddTraceSource (sources, child);
+                                       else
+                                               ThrowUnrecognizedElement 
(child);
+//                                     ValidateInvalidAttributes 
(child.Attributes, child);
+                               }
+                               else
+                                       ThrowUnrecognizedNode (child);
+                       }
+               }
+
+               private void AddTraceSource (Hashtable sources, XmlNode node)
+               {
+                       string name = null;
+                       SourceLevels levels = SourceLevels.Error;
+                       StringDictionary atts = new StringDictionary ();
+                       foreach (XmlAttribute a in node.Attributes) {
+                               switch (a.Name) {
+                               case "name":
+                                       name = a.Value;
+                                       break;
+                               case "switchValue":
+                                       levels = (SourceLevels) Enum.Parse 
(typeof (SourceLevels), a.Value);
+                                       break;
+                               default:
+                                       atts [a.Name] = a.Value;
+                                       break;
+                               }
+                       }
+                       if (name == null)
+                               throw new ConfigurationException ("Mandatory 
attribute 'name' is missing in 'source' element.");
+
+                       // FIXME: it should raise an error for duplicate name 
sources.
+                       if (sources.ContainsKey (name))
+                               return;
+
+                       TraceSource source = new TraceSource (name, levels);
+                       sources.Add (source.Name, source);
+                       
+                       foreach (XmlNode child in node.ChildNodes) {
+                               XmlNodeType t = child.NodeType;
+                               if (t == XmlNodeType.Whitespace || t == 
XmlNodeType.Comment)
+                                       continue;
+                               if (t == XmlNodeType.Element) {
+                                       if (child.Name == "listeners")
+                                               AddTraceListeners (child);
+                                       else
+                                               ThrowUnrecognizedElement 
(child);
+                                       ValidateInvalidAttributes 
(child.Attributes, child);
+                               }
+                               else
+                                       ThrowUnrecognizedNode (child);
+                       }
+               }
+#endif
+
                // only defines "add" and "remove", but "clear" also works
                // for add, "name" and "type" are required; initializeData is 
optional
                private void AddTraceListeners (XmlNode listenersNode)
Index: System.Diagnostics/TraceEventType.cs
===================================================================
--- System.Diagnostics/TraceEventType.cs        (revision 0)
+++ System.Diagnostics/TraceEventType.cs        (revision 0)
@@ -0,0 +1,57 @@
+//
+// SourceLevels.cs
+//
+// Author:
+//     Atsushi Enomoto  <[EMAIL PROTECTED]>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using System.ComponentModel;
+
+namespace System.Diagnostics
+{
+       public enum TraceEventType
+       {
+               Critical = 1,
+               Error = 2,
+               Warning = 4,
+               Information = 8,
+               Verbose = 16,
+               [EditorBrowsable (EditorBrowsableState.Advanced)]
+               Start = 0x100,
+               [EditorBrowsable (EditorBrowsableState.Advanced)]
+               Stop = 0x200,
+               [EditorBrowsable (EditorBrowsableState.Advanced)]
+               Suspend = 0x400,
+               [EditorBrowsable (EditorBrowsableState.Advanced)]
+               Resume = 0x800,
+               [EditorBrowsable (EditorBrowsableState.Advanced)]
+               Transfer = 0x1000,
+       }
+}
+
+#endif
Index: System.Diagnostics/SourceSwitch.cs
===================================================================
--- System.Diagnostics/SourceSwitch.cs  (revision 0)
+++ System.Diagnostics/SourceSwitch.cs  (revision 0)
@@ -0,0 +1,87 @@
+//
+// SourceSwitch.cs
+//
+// Author:
+//     Atsushi Enomoto  <[EMAIL PROTECTED]>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using System;
+
+namespace System.Diagnostics
+{
+       public class SourceSwitch : Switch
+       {
+               // FIXME: better explanation.
+               const string description = "Source switch.";
+
+               SourceLevels level;
+
+               public SourceSwitch (string displayName)
+                       : this (displayName, String.Empty)
+               {
+               }
+
+               public SourceSwitch (string displayName, string 
defaultSwitchValue)
+                       : base (displayName, description, defaultSwitchValue)
+               {
+               }
+               
+               public SourceLevels Level {
+                       get { return level; }
+                       set { level = value; }
+               }
+
+               public bool ShouldTrace (TraceEventType eventType)
+               {
+                       switch (eventType) {
+                       case TraceEventType.Critical:
+                               return (level & SourceLevels.Critical) != 0;
+                       case TraceEventType.Error:
+                               return (level & SourceLevels.Error) != 0;
+                       case TraceEventType.Warning:
+                               return (level & SourceLevels.Warning) != 0;
+                       case TraceEventType.Information:
+                               return (level & SourceLevels.Information) != 0;
+                       case TraceEventType.Verbose:
+                               return (level & SourceLevels.Verbose) != 0;
+                       case TraceEventType.Start:
+                       case TraceEventType.Stop:
+                       case TraceEventType.Suspend:
+                       case TraceEventType.Resume:
+                       case TraceEventType.Transfer:
+                       default:
+                               return (level & SourceLevels.ActivityTracing) 
!= 0;
+                       }
+               }
+
+               protected override void OnValueChanged ()
+               {
+               }
+       }
+}
+#endif
Index: System.Diagnostics/TraceListener.cs
===================================================================
--- System.Diagnostics/TraceListener.cs (revision 71034)
+++ System.Diagnostics/TraceListener.cs (working copy)
@@ -32,6 +32,7 @@
 //
 
 using System;
+using System.Runtime.InteropServices;
 using System.Diagnostics;
 
 namespace System.Diagnostics {
@@ -152,6 +153,53 @@
                {
                        WriteLine (category + ": " + message);
                }
+
+#if NET_2_0
+               [ComVisible (false)]
+               [MonoTODO]
+               public virtual void TraceData (TraceEventCache eventCache, 
string source,
+                       TraceEventType eventType, int id, object data)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [ComVisible (false)]
+               [MonoTODO]
+               public virtual void TraceData (TraceEventCache eventCache, 
string source,
+                       TraceEventType eventType, int id, params object [] data)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [ComVisible (false)]
+               [MonoTODO]
+               public virtual void TraceEvent (TraceEventCache eventCache, 
string source, TraceEventType eventType, int id)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [ComVisible (false)]
+               [MonoTODO]
+               public virtual void TraceEvent (TraceEventCache eventCache, 
string source, TraceEventType eventType,
+                       int id, string message)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [ComVisible (false)]
+               [MonoTODO]
+               public virtual void TraceEvent (TraceEventCache eventCache, 
string source, TraceEventType eventType, int id, string format, params object 
[] args)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               [ComVisible (false)]
+               [MonoTODO]
+               public virtual void TraceTransfer (TraceEventCache eventCache, 
string source, int id, string message, Guid relatedActivityId)
+               {
+                       throw new NotImplementedException ();
+               }
+#endif
        }
 }
 
Index: System_test.dll.sources
===================================================================
--- System_test.dll.sources     (revision 71034)
+++ System_test.dll.sources     (working copy)
@@ -142,6 +142,8 @@
 System.Configuration/SettingsPropertyValueTest.cs
 System.Diagnostics/EventLogTest.cs
 System.Diagnostics/StopwatchTest.cs
+System.Diagnostics/SourceSwitchTest.cs
+System.Diagnostics/TraceSourceTest.cs
 System.Diagnostics/TraceTest.cs
 System.Diagnostics/SwitchesTest.cs
 System.Diagnostics/DiagnosticsConfigurationHandlerTest.cs
Index: ChangeLog
===================================================================
--- ChangeLog   (revision 71034)
+++ ChangeLog   (working copy)
@@ -1,3 +1,11 @@
+2007-01-17  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * System.dll.sources: added new sources:
+         TraceSource.cs, SourceLevels.cs, CorrelationManager.cs,
+         TraceEventCache.cs, TraceEventType.cs and SourceSwitch.cs.
+       * System_test.dll.sources: added new tests:
+         TraceSourceTest.cs and SourceSwitchTest.cs.
+
 2007-01-11  Dick Porter  <[EMAIL PROTECTED]>
 
        * System.dll.sources: Add 
System.Net.Sockets/{IOControlCode,SocketInformation,SocketInformationOptions,TransmitFileOptions}.cs
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to