Beispiel #1
0
        /*
         * /// <summary>
         * /// Traditional singleton implementation private variable.
         * /// </summary>
         * private static GeneratorHost _instance;
         *
         * /// <summary>
         * /// Traditional Singleton implementation.
         * /// </summary>
         * public static GeneratorHost Instance
         * {
         *      get
         *      {
         *              if (_instance == null)
         *                      _instance = new GeneratorHost();
         *              return _instance;
         *      }
         * }
         */

        internal void InitSchema()
        {
            DefaultNamespaceManager = new XmlNamespaceManager(new NameTable());
            DefaultNamespaceManager.AddNamespace("xgf", Namespace);

            //Validate customization if appropriate.
            if (GeneratorOptions.ValidateCustomizations == true)
            {
                Validator valid = new Validator();
                using (FileStream fs = new FileStream(IO.AppendLocalPath("CustomizationSchema.xsd"), FileMode.Open))
                    CustomizationSchema = XmlSchema.Read(fs, new ValidationEventHandler(valid.OnValidation));

                if (valid.HasErrors)
                {
                    throw new InvalidOperationException("Customization schema file isn't valid." +
                                                        Environment.NewLine + valid.Errors);
                }

                DefaultNamespaceManager = new XmlNamespaceManager(new NameTable());
                XmlQualifiedName[] names = CustomizationSchema.Namespaces.ToArray();
                foreach (XmlQualifiedName ns in names)
                {
                    if (ns.Name != "xgf")
                    {
                        DefaultNamespaceManager.AddNamespace(ns.Name, ns.Namespace);
                    }
                    else if (ns.Namespace != GeneratorHost.Namespace)
                    {
                        throw new InvalidOperationException("xgf namespace prefix is reserved for XGoF namespace.");
                    }
                }
            }
        }