// Copyright (c) Microsoft Corporation. All rights reserved. // using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Reflection; using System.Xml; using System.Xml.XPath; namespace Microsoft.Ddue.Tools { public abstract class BuildComponent : IDisposable { protected BuildComponent (BuildAssembler assembler, XPathNavigator configuration) { this.assembler = assembler; WriteMessage(MessageLevel.Info, "Instantiating component."); } public abstract void Apply (XmlDocument document, string key); public virtual void Apply (XmlDocument document) { Apply(document, null); } public virtual void Dispose () { // override to do something } // shared data private BuildAssembler assembler; public BuildAssembler BuildAssembler { get { return(assembler); } } //private MessageHandler handler; private static Dictionary data = new Dictionary(); protected static Dictionary Data { get { return(data); } } // component messaging facility protected void OnComponentEvent (EventArgs e) { assembler.OnComponentEvent(this.GetType(), e); } protected void WriteMessage (MessageLevel level, string message) { if (level == MessageLevel.Ignore) return; MessageHandler handler = assembler.MessageHandler; if (handler != null) handler(this.GetType(), level, message); } } public enum MessageLevel { Ignore, // don't show at all Info, // informational message Warn, // a minor problem occured Error // a major problem occured } public delegate void MessageHandler (Type component, MessageLevel level, string message); }