示例#1
0
        /// <summary>
        /// 获取当前Bundle扩展的扩展数据
        /// </summary>
        /// <returns>扩展数据列表</returns>
        public IList <ExtensionData> GetExtensionDatas()
        {
            var tmpExtensionDatas = new ExtensionData[extensionDatas.Count];

            extensionDatas.CopyTo(tmpExtensionDatas, 0);
            return(tmpExtensionDatas.ToList());
        }
示例#2
0
        public void AddExtensionProperty(string sectionName, string propertyName, object value)
        {
            if (value == null)
            {
                // For a null value we just don't do anything rather than creating a field with a null value (or add a null value to existing field).
                return;
            }

            if (ExtensionData == null)
            {
                ExtensionData = new SerializableDictionary <string, IFieldSet, FieldSet>();
            }

            IFieldSet sectionFieldSet;

            if (!ExtensionData.TryGetValue(sectionName, out sectionFieldSet))
            {
                sectionFieldSet = new FieldSet();
                ExtensionData.Add(sectionName, sectionFieldSet);
            }

            IField propertyField;

            if (!sectionFieldSet.TryGetValue(propertyName, out propertyField))
            {
                propertyField = new Field(propertyName, value);
                sectionFieldSet.Add(propertyName, propertyField);
            }
            else
            {
                ((Field)propertyField).AddFieldValue(value);
            }
        }
示例#3
0
        private Uri GetAndValidateUrls(string elementName, CultureInfo culture)
        {
            Uri     result  = null;
            XmlNode xmlNode = this.xmlDoc.SelectSingleNode(this.GetOweXpath(elementName), this.namespaceManager);

            if (xmlNode != null)
            {
                string attributeStringValue = ExtensionData.GetAttributeStringValue(xmlNode, "DefaultValue");
                result = SchemaParser.ValidateUrl(this.extensionInstallScope, elementName, attributeStringValue);
                using (XmlNodeList xmlNodeList = xmlNode.SelectNodes(this.GetOweChildPath("Override"), this.namespaceManager))
                {
                    string name = elementName + " " + "Override";
                    foreach (object obj in xmlNodeList)
                    {
                        XmlNode xmlNode2 = (XmlNode)obj;
                        string  attributeStringValue2 = ExtensionData.GetAttributeStringValue(xmlNode2, "Value");
                        Uri     uri = SchemaParser.ValidateUrl(this.extensionInstallScope, name, attributeStringValue2);
                        string  attributeStringValue3 = ExtensionData.GetAttributeStringValue(xmlNode2, "Locale");
                        if (string.Compare(culture.ToString(), attributeStringValue3, StringComparison.OrdinalIgnoreCase) == 0)
                        {
                            result = uri;
                        }
                    }
                }
            }
            return(result);
        }
示例#4
0
        public void ValidateHosts()
        {
            XmlNode oweXmlNode = this.GetOweXmlNode("Hosts");

            if (oweXmlNode == null)
            {
                return;
            }
            bool flag = false;

            foreach (object obj in oweXmlNode.ChildNodes)
            {
                XmlNode xmlNode = (XmlNode)obj;
                if (xmlNode.NodeType == XmlNodeType.Element)
                {
                    string attributeStringValue = ExtensionData.GetAttributeStringValue(xmlNode, "Name");
                    if ("Mailbox".Equals(attributeStringValue, StringComparison.OrdinalIgnoreCase))
                    {
                        flag = true;
                        break;
                    }
                }
            }
            if (!flag)
            {
                throw new OwaExtensionOperationException(Strings.ErrorInvalidManifestData(Strings.ErrorReasonNoMailboxInHosts));
            }
        }
示例#5
0
        internal bool TryGetExtensionUpdate(ExtensionData extensionData, out byte[] manifestBytes)
        {
            manifestBytes = null;
            this.CleanupCache();
            ExtensionsCacheEntry extensionsCacheEntry = null;

            if (this.extensionsDictionary.TryGetValue(extensionData.MarketplaceAssetID, out extensionsCacheEntry))
            {
                if (extensionData.ExtensionId != extensionsCacheEntry.ExtensionID)
                {
                    ExtensionsCache.Tracer.TraceError <string, string, string>(0L, "ExtensionsCache.TryGetExtensionUpdate: Extension {0} ExtensionID property {1} does not match cache entry value {2}.", extensionData.MarketplaceAssetID, extensionData.ExtensionId, extensionsCacheEntry.ExtensionID);
                    ExtensionDiagnostics.Logger.LogEvent(ApplicationLogicEventLogConstants.Tuple_MismatchedCacheMailboxExtensionId, extensionData.MarketplaceAssetID, new object[]
                    {
                        "ProcessUpdates",
                        extensionData.MarketplaceAssetID,
                        extensionData.ExtensionId,
                        extensionsCacheEntry.ExtensionID
                    });
                }
                else if (extensionData.Version != null && extensionsCacheEntry.RequestedCapabilities != null && extensionsCacheEntry.Manifest != null && extensionData.Version < extensionsCacheEntry.Version && ExtensionData.CompareCapabilities(extensionsCacheEntry.RequestedCapabilities.Value, extensionData.RequestedCapabilities.Value) <= 0 && GetUpdates.IsValidUpdateState(new OmexConstants.AppState?(extensionsCacheEntry.State)))
                {
                    manifestBytes = extensionsCacheEntry.Manifest;
                }
            }
            return(manifestBytes != null);
        }
示例#6
0
        public IExtensionBuilder CreateInstance(Type extensionBuilderType, ExtensionData extensionData)
        {
            var result = Activator.CreateInstance(extensionBuilderType);
            var props  = extensionBuilderType.GetProperties();

            if (props.Length == 0)
            {
                return(result as IExtensionBuilder);
            }

            // set property values
            foreach (var prop in props)
            {
                if (!prop.CanWrite)
                {
                    continue;
                }
                object propValue;
                if (extensionData.TryGet(prop.Name, out propValue))
                {
                    prop.SetValue(result, propValue, null);
                }
            }

            return(result as IExtensionBuilder);
        }
示例#7
0
        internal void CreateNewExtensionData(string uniqueId, string name, string version, Dictionary <string, string> data)
        {
            // TODO: Figure out how to add extension version when creating new ExtensionData
            var extensionData = new ExtensionData(uniqueId, name, version, data);

            ExtensionData.Add(extensionData);
        }
示例#8
0
 /// <summary>
 /// Initializes a new instance of <see cref="ImageBox"/>.
 /// </summary>
 public PrintViewImageBox()
 {
     this.Tiles.ItemAdded   += OnTileAdded;
     this.Tiles.ItemRemoved += OnTileRemoved;
     ExtensionData           = new ExtensionData();
     DisplaySet              = new DisplaySet();
 }
示例#9
0
    public override void OnPastingCellClipboardContent(object item, object cellContent)
    {
        if (!IsReadOnly &&
            ExtensionData != null &&
            ExtensionDataKey != null &&
            ExtensionDataType?.IsAssignableFrom(item.GetType()) == true)
        {
            if (ExtensionData.ResolveValue(item) is IEnumerable <KeyValuePair <string, string> > dic)
            {
                var s = ((cellContent as string) ?? cellContent?.ToString()).TrimOrNull();

                if (dic is IDictionary <string, string> td)
                {
                    if (s == null)
                    {
                        td.Remove(ExtensionDataKey);
                    }
                    else
                    {
                        td[ExtensionDataKey] = s;
                    }
                }
                else if (dic is ICollection <KeyValuePair <string, string> > col)
                {
                    if (col is IList <KeyValuePair <string, string> > list && s != null)
                    {
                        for (var i = 0; i < list.Count; i++)
                        {
                            if (list[i].Key == ExtensionDataKey)
                            {
                                list[i] = new KeyValuePair <string, string>(ExtensionDataKey, s);

                                for (var j = list.Count - 1; j > i; j--)
                                {
                                    if (list[j].Key == ExtensionDataKey)
                                    {
                                        list.RemoveAt(j);
                                    }
                                }

                                return;
                            }
                        }
                    }

                    foreach (var kv in col.Where(e => e.Key == ExtensionDataKey).ToList())
                    {
                        col.Remove(kv);
                    }

                    if (s != null)
                    {
                        col.Add(new KeyValuePair <string, string>(ExtensionDataKey, s));
                    }
                }
            }
        }
        base.OnPastingCellClipboardContent(item, cellContent);
    }
        // Token: 0x0600036E RID: 878 RVA: 0x0000D874 File Offset: 0x0000BA74
        protected void UpdateAppsLinks(NavBarData navBarData, AuthZClientInfo effectiveCaller)
        {
            string domain = string.Empty;

            if (navBarData.AppsLinks == null)
            {
                return;
            }
            if (effectiveCaller != null && !string.IsNullOrWhiteSpace(effectiveCaller.PrimarySmtpAddress))
            {
                SmtpAddress smtpAddress = new SmtpAddress(effectiveCaller.PrimarySmtpAddress);
                if (smtpAddress.IsValidAddress)
                {
                    domain = smtpAddress.Domain;
                }
            }
            string deploymentId        = ExtensionDataHelper.GetDeploymentId(domain);
            List <NavBarLinkData> list = new List <NavBarLinkData>(navBarData.AppsLinks.Length);

            NavBarLinkData[] appsLinks = navBarData.AppsLinks;
            int i = 0;

            while (i < appsLinks.Length)
            {
                NavBarLinkData navBarLinkData = appsLinks[i];
                if ("ShellMarketplace".Equals(navBarLinkData.Id, StringComparison.Ordinal))
                {
                    if (Globals.IsPreCheckinApp)
                    {
                        navBarLinkData.Url          = ExtensionData.GetClientExtensionMarketplaceUrl(this.culture.LCID, HttpContext.Current.Request, false, deploymentId, null);
                        navBarLinkData.TargetWindow = "_blank";
                        goto IL_169;
                    }
                    ExchangeRunspaceConfiguration exchangeRunspaceConfiguration = ExchangeRunspaceConfigurationCache.Singleton.Get(effectiveCaller, null, false);
                    if (exchangeRunspaceConfiguration.HasRoleOfType(RoleType.MyMarketplaceApps) && (string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["OfficeStoreUnavailable"]) || StringComparer.OrdinalIgnoreCase.Equals("false", ConfigurationManager.AppSettings["OfficeStoreUnavailable"])))
                    {
                        navBarLinkData.Url          = ExtensionData.GetClientExtensionMarketplaceUrl(this.culture.LCID, HttpContext.Current.Request, exchangeRunspaceConfiguration.HasRoleOfType(RoleType.MyReadWriteMailboxApps), deploymentId, null);
                        navBarLinkData.TargetWindow = "_blank";
                        goto IL_169;
                    }
                }
                else
                {
                    if ("ShellOfficeDotCom".Equals(navBarLinkData.Id, StringComparison.Ordinal))
                    {
                        navBarLinkData.TargetWindow = "_blank";
                        goto IL_169;
                    }
                    goto IL_169;
                }
IL_171:
                i++;
                continue;
IL_169:
                list.Add(navBarLinkData);
                goto IL_171;
            }
            navBarData.AppsLinks = list.ToArray();
        }
示例#11
0
 public SealInfo(SesHeader header, DerIA5String esId, SesPropertyInfo property, SesPictureInfo picture, ExtensionData extData)
 {
     Header        = header;
     EsId          = esId;
     Property      = property;
     Picture       = picture;
     ExtensionData = extData;
 }
示例#12
0
        // Token: 0x06000BD5 RID: 3029 RVA: 0x000305D4 File Offset: 0x0002E7D4
        internal static string CreateUrlWithQueryString(string baseUrl, string requestId)
        {
            string installedOwaVersion = DefaultExtensionTable.GetInstalledOwaVersion();
            string url = ExtensionData.AppendUnencodedQueryParameter(baseUrl, "CV", installedOwaVersion);

            url = ExtensionData.AppendUnencodedQueryParameter(url, "Client", "WAC_Outlook");
            return(ExtensionData.AppendUnencodedQueryParameter(url, "corr", requestId));
        }
示例#13
0
        internal virtual ExtensionData GetExtensionDataForInstall(IRecipientSession adRecipientSession)
        {
            SafeXmlDocument safeXmlDocument = new SafeXmlDocument();

            safeXmlDocument.PreserveWhitespace = true;
            safeXmlDocument.LoadXml(this.ManifestXml);
            return(ExtensionData.CreateForXmlStorage(this.AppId, this.MarketplaceAssetID, this.MarketplaceContentMarket, this.Type, this.Scope, this.Enabled, this.AppVersion, DisableReasonType.NotDisabled, safeXmlDocument, this.AppStatus, this.Etoken));
        }
示例#14
0
        /// <summary>
        /// Internal mechanism to access the extension's library.
        /// </summary>
        /// <returns>Extension's library.</returns>
        internal static Library GetExtensionLibrary(TableDefinitionCollection tableDefinitions)
        {
            if (null == ComPlusExtensionData.library)
            {
                ComPlusExtensionData.library = ExtensionData.LoadLibraryHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.complus.wixlib", tableDefinitions);
            }

            return(ComPlusExtensionData.library);
        }
示例#15
0
 /// <summary>
 /// Initializes a new instance of <see cref="ClipboardItem"/>.
 /// </summary>
 /// <param name="item"></param>
 /// <param name="image"></param>
 /// <param name="name"></param>
 /// <param name="description"></param>
 /// <param name="displayRectangle"></param>
 public ClipboardItem(object item, Image image, string name, string description, Rectangle displayRectangle)
 {
     _item             = item;
     _image            = image;
     _name             = name ?? string.Empty;
     _description      = description ?? string.Empty;
     _displayRectangle = displayRectangle;
     _extensionData    = new ExtensionData();
 }
示例#16
0
 public TbsSign(DerInteger version, SeSeal eSeal, DerGeneralizedTime timeInfo, DerBitString dataHash, DerIA5String propertyInfo, ExtensionData extData)
 {
     Version      = version;
     EsSeal       = eSeal;
     TimeInfo     = timeInfo;
     DataHash     = dataHash;
     PropertyInfo = propertyInfo;
     ExtData      = extData;
 }
示例#17
0
        /// <summary>
        /// Internal mechanism to access the extension's library.
        /// </summary>
        /// <returns>Extension's library.</returns>
        internal static Library GetExtensionLibrary(TableDefinitionCollection tableDefinitions)
        {
            if (null == FirewallExtensionData.library)
            {
                FirewallExtensionData.library = ExtensionData.LoadLibraryHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.firewall.wixlib", tableDefinitions);
            }

            return(FirewallExtensionData.library);
        }
示例#18
0
        /// <summary>
        /// Internal mechanism to access the extension's table definitions.
        /// </summary>
        /// <returns>Extension's table definitions.</returns>
        internal static TableDefinitionCollection GetExtensionTableDefinitions()
        {
            if (null == DependencyExtensionData.tableDefinitions)
            {
                DependencyExtensionData.tableDefinitions = ExtensionData.LoadTableDefinitionHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.tables.xml");
            }

            return(DependencyExtensionData.tableDefinitions);
        }
示例#19
0
        /// <summary>
        /// Internal mechanism to access the extension's library.
        /// </summary>
        /// <returns>Extension's library.</returns>
        internal static Library GetExtensionLibrary(TableDefinitionCollection tableDefinitions)
        {
            if (null == DependencyExtensionData.library)
            {
                DependencyExtensionData.library = ExtensionData.LoadLibraryHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.Dependency.wixlib", tableDefinitions);
            }

            return(DependencyExtensionData.library);
        }
示例#20
0
        internal override ExtensionData GetExtensionDataForInstall(IRecipientSession adRecipientSession)
        {
            ExtensionData extensionDataForInstall = base.GetExtensionDataForInstall(adRecipientSession);

            extensionDataForInstall.IsMandatory        = (base.DefaultStateForUser == Microsoft.Exchange.Management.Extension.DefaultStateForUser.AlwaysEnabled);
            extensionDataForInstall.IsEnabledByDefault = (base.DefaultStateForUser == Microsoft.Exchange.Management.Extension.DefaultStateForUser.Enabled);
            extensionDataForInstall.ProvidedTo         = this.ProvidedTo;
            extensionDataForInstall.SpecificUsers      = OrgApp.ConvertPresentationFormatToWireUserList(adRecipientSession, this.UserList);
            return(extensionDataForInstall);
        }
示例#21
0
 public TbsSign(DerInteger version, SeSeal eSeal, DerGeneralizedTime timeInfo, DerBitString dataHash, DerIA5String propertyInfo, DerObjectIdentifier signatureAlgorithm, ExtensionData extData)
 {
     Version            = version;
     EsSeal             = eSeal;
     TimeInfo           = timeInfo;
     DataHash           = dataHash;
     PropertyInfo       = propertyInfo;
     ExtensionData      = extData;
     SignatureAlgorithm = signatureAlgorithm;
 }
示例#22
0
    public static IArgumentDescriptor Input(
        this IArgumentDescriptor descriptor,
        string argumentName = "input",
        string?typeName     = null)
    {
        ExtensionData contextData = descriptor.Extend().Definition.ContextData;

        contextData[InputContextData.Input] = new InputContextData(typeName, argumentName);
        return(descriptor);
    }
        internal static void UpdatePaidAppSourceLocation(string urlElementName, ExtensionData extensionData)
        {
            if (string.IsNullOrWhiteSpace(extensionData.Etoken))
            {
                return;
            }
            Exception ex;

            extensionData.TryUpdateSourceLocation(null, urlElementName, out ex, new ExtensionDataHelper.TryModifySourceLocationDelegate(EntitlementTokenData.TryModifySourceLocation));
        }
示例#24
0
    public static IObjectFieldDescriptor Payload(
        this IObjectFieldDescriptor descriptor,
        string?fieldName = null,
        string?typeName  = null)
    {
        ExtensionData contextData = descriptor.Extend().Definition.ContextData;

        contextData[PayloadContextData.Payload] = new PayloadContextData(fieldName, typeName);
        return(descriptor);
    }
示例#25
0
        public ExtensionData ExtensionData()
        {
            var list = new ExtensionData();

            for (var i = 0; i < Size; i++)
            {
                list.Add(i.ToString(), i);
            }

            return(list);
        }
        public object GetData(string key)
        {
            if (ExtensionData == null)
            {
                return(null);
            }

            object value;

            return(ExtensionData.TryGetValue(key, out value) ? value : null);
        }
示例#27
0
        public override Version GetMinApiVersion()
        {
            XmlNode mandatoryOweXmlNode = base.GetMandatoryOweXmlNode("Requirements");
            Version version             = null;

            foreach (object obj in mandatoryOweXmlNode.ChildNodes)
            {
                XmlNode xmlNode = (XmlNode)obj;
                if (xmlNode.NodeType == XmlNodeType.Element && "Sets".Equals(xmlNode.LocalName, StringComparison.Ordinal))
                {
                    string input = ExtensionData.GetOptionalAttributeStringValue(xmlNode, "DefaultMinVersion", "1.1");
                    if (!Version.TryParse(input, out version) || version < SchemaConstants.LowestApiVersionSupportedBySchemaVersion1_1)
                    {
                        throw new OwaExtensionOperationException(Strings.ErrorInvalidManifestData(Strings.ErrorReasonDefaultVersionIsInvalid));
                    }
                    int num = 0;
                    foreach (object obj2 in xmlNode)
                    {
                        XmlNode xmlNode2 = (XmlNode)obj2;
                        if (xmlNode2.NodeType == XmlNodeType.Element && "Set".Equals(xmlNode2.LocalName, StringComparison.Ordinal))
                        {
                            num++;
                            if (num > 1)
                            {
                                throw new OwaExtensionOperationException(Strings.ErrorInvalidManifestData(Strings.ErrorReasonOnlyMailboxSetAllowedInRequirement));
                            }
                            string attributeStringValue = ExtensionData.GetAttributeStringValue(xmlNode2, "Name");
                            if (!"Mailbox".Equals(attributeStringValue, StringComparison.OrdinalIgnoreCase))
                            {
                                throw new OwaExtensionOperationException(Strings.ErrorInvalidManifestData(Strings.ErrorReasonOnlyMailboxSetAllowedInRequirement));
                            }
                            if (xmlNode2.Attributes != null)
                            {
                                XmlAttribute xmlAttribute = xmlNode2.Attributes["MinVersion"];
                                if (xmlAttribute != null && !string.IsNullOrEmpty(xmlAttribute.Value))
                                {
                                    input = xmlAttribute.Value;
                                    if (!Version.TryParse(input, out version) || version < SchemaConstants.LowestApiVersionSupportedBySchemaVersion1_1)
                                    {
                                        throw new OwaExtensionOperationException(Strings.ErrorInvalidManifestData(Strings.ErrorReasonMinVersionIsInvalid));
                                    }
                                }
                            }
                        }
                    }
                    if (num != 1)
                    {
                        throw new OwaExtensionOperationException(Strings.ErrorInvalidManifestData(Strings.ErrorReasonOnlyMailboxSetAllowedInRequirement));
                    }
                    break;
                }
            }
            return(version);
        }
示例#28
0
        public string GetIdForTokenRequests()
        {
            XmlNode xmlNode = this.xmlDoc.SelectSingleNode(this.GetOweXpath("SourceLocation"), this.namespaceManager);

            if (xmlNode == null)
            {
                SchemaParser.Tracer.TraceError(0L, "SourceLocation tag is missing from the given node.");
                throw new OwaExtensionOperationException(Strings.ErrorCanNotReadInstalledList(Strings.FailureReasonSourceLocationTagMissing));
            }
            return(ExtensionData.GetAttributeStringValue(xmlNode, "DefaultValue"));
        }
示例#29
0
        public ImageViewerComponent(IViewerSetupHelper setupHelper)
        {
            Platform.CheckForNullReference(setupHelper, "setupHelper");
            _setupHelper = setupHelper;
            _setupHelper.SetImageViewer(this);

            _shortcutManager  = new ViewerShortcutManager(this);
            _priorStudyLoader = new AsynchronousPriorStudyLoader(this, _setupHelper.GetPriorStudyFinder());

            ExtensionData = new ExtensionData();
        }
        private App ConvertStoreObjectToPresentationObject(ExtensionData extensionData)
        {
            DefaultStateForUser?defaultStateForUser = new DefaultStateForUser?(extensionData.IsMandatory ? DefaultStateForUser.AlwaysEnabled : (extensionData.IsEnabledByDefault ? DefaultStateForUser.Enabled : DefaultStateForUser.Disabled));
            Uri iconURL = extensionData.IconURL;

            if (this.isUserScope)
            {
                return(new App((ExtensionInstallScope.User == extensionData.Scope.GetValueOrDefault()) ? null : defaultStateForUser, extensionData.MarketplaceAssetID, extensionData.MarketplaceContentMarket, extensionData.ProviderName, iconURL, extensionData.ExtensionId, extensionData.VersionAsString, extensionData.Type, extensionData.Scope, extensionData.RequestedCapabilities, extensionData.DisplayName, extensionData.Description, extensionData.Enabled, extensionData.Manifest.OuterXml, new ADObjectId(), extensionData.Etoken, extensionData.EtokenData, extensionData.AppStatus));
            }
            return(new OrgApp(defaultStateForUser, extensionData.ProvidedTo, OrgApp.ConvertWireUserListToPresentationFormat(this.adRecipientSession, extensionData.SpecificUsers), extensionData.MarketplaceAssetID, extensionData.MarketplaceContentMarket, extensionData.ProviderName, iconURL, extensionData.ExtensionId, extensionData.VersionAsString, extensionData.Type, extensionData.Scope, extensionData.RequestedCapabilities, extensionData.DisplayName, extensionData.Description, extensionData.Enabled, extensionData.Manifest.OuterXml, extensionData.Etoken, extensionData.EtokenData, extensionData.AppStatus, new ADObjectId()));
        }
示例#31
0
文件: SplashForm.cs 项目: rsdn/janus
		private void DrawExtension(ExtensionData data, Graphics graphics, Rectangle rectangle)
		{
			graphics.DrawImage(
				data.Icon,
				rectangle.Left + (rectangle.Width - _moduleImageSize) / 2,
				rectangle.Top,
				_moduleImageSize,
				_moduleImageSize);
			var sf = new StringFormat { Alignment = StringAlignment.Center };
			graphics.DrawString(
				data.DisplayName,
				_itemsBox.Font,
				Brushes.Black,
				new Rectangle(
					rectangle.Left,
					rectangle.Top + _moduleImageSize,
					rectangle.Width, rectangle.Height - _moduleImageSize),
				sf);
		}
示例#32
0
            /// <summary>
            /// Adds extensions to the extension array list. This function handles the starting
            /// node in the XML document tree with XML_EXTENSION_TAG. Each extension is parsed
            /// for name, id, and location.
            /// </summary>
            /// <param name="m_xmlReader">An XmlTextReader instance starting at the XML_EXTENSION_TAG node of the XML document.</param>
            /// <remarks>
            /// Author(s):  teejay
            /// Revision:   1.0
            /// Modified:   6/04/2003
            /// </remarks>
            private void AddExtension( XmlTextReader m_xmlReader )
            {
                // The extension will refer to a new dependency file to load which
                // will be read from this new XmlTextReader...
                XmlTextReader m_newReader;
                string m_elementName;
                string m_elementValue;

                // instantaite a new struct to store the data...
                ExtensionData m_extensionData = new ExtensionData( );

                try
                {
                    while ( m_xmlReader.Read( ) )
                    {
                        switch ( m_xmlReader.NodeType )
                        {
                            case XmlNodeType.EndElement:

                                if ( m_xmlReader.Name == XML_EXTENSION_TAG )
                                    goto finished;

                                break;

                            case XmlNodeType.Element:

                                // get the name of the element...
                                m_elementName = m_xmlReader.Name;

                                // attempt to read the actual value of the element...
                                m_xmlReader.Read( );

                                if ( m_xmlReader.NodeType == XmlNodeType.EndElement )
                                {
                                    // no value exists for this element...
                                    m_elementValue = "";
                                }
                                else
                                    m_elementValue = m_xmlReader.Value;

                                if ( m_elementName == XML_EXTENSION_ID_TAG )
                                    m_extensionData.id = m_elementValue;

                                if ( m_elementName == XML_EXTENSION_NAME_TAG )
                                    m_extensionData.name = m_elementValue;

                                if ( m_elementName == XML_EXTENSION_LOCATION_TAG )
                                    if ( Directory.Exists( m_elementValue ) )
                                        m_extensionData.location = m_elementValue;
                                    else
                                        m_extensionData.location =
                                            System.IO.Path.GetFullPath( System.IO.Path.GetFullPath( m_dependencyLocation ) + "\\" + m_elementValue );

                                break;
                        }
                    }

                finished:

                    // add the extension to the array...
                    m_extensionArray.Add( m_extensionData );

                    // now attempt to load the extended dependency data as part of the current
                    // list of dependencies...
                    m_newReader = LoadDependencyFileLocally( m_extensionData.location + "\\" + m_extensionData.name );

                    // parse dependencies on this extended dependency file...
                    ParseDependencies( m_newReader );
                }
                catch ( DependencyFileDoesNotExistException e )
                {
                    TestExceptions.printException( e );

                    throw e;
                }
            }