Update Reference Sources to .NET Framework 4.6.1
[mono.git] / mcs / class / referencesource / System.Data.Entity / System / Data / EntityModel / SchemaObjectModel / XmlSchemaResource.cs
1 //---------------------------------------------------------------------
2 // <copyright file="XmlSchemaResource.cs" company="Microsoft">
3 //      Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 //
6 // @owner       [....]
7 // @backupOwner [....]
8 //---------------------------------------------------------------------
9 using System.Diagnostics;
10 using System.Data.Mapping;
11 using System.Data.Metadata.Edm;
12 using System.Collections.Generic;
13
14 namespace System.Data.EntityModel.SchemaObjectModel
15 {
16     internal struct XmlSchemaResource
17     {
18         private static XmlSchemaResource[] EmptyImportList = new XmlSchemaResource[0];
19         public XmlSchemaResource(string namespaceUri, string resourceName, XmlSchemaResource[] importedSchemas)
20         {
21             Debug.Assert(!string.IsNullOrEmpty(namespaceUri), "namespaceUri is null or empty");
22             Debug.Assert(!string.IsNullOrEmpty(resourceName), "resourceName is null or empty");
23             Debug.Assert(importedSchemas != null, "importedSchemas is null");
24             NamespaceUri = namespaceUri;
25             ResourceName = resourceName;
26             ImportedSchemas = importedSchemas;
27         }
28         public XmlSchemaResource(string namespaceUri, string resourceName)
29         {
30             Debug.Assert(!string.IsNullOrEmpty(namespaceUri), "namespaceUri is null or empty");
31             Debug.Assert(!string.IsNullOrEmpty(resourceName), "resourceName is null or empty");
32             NamespaceUri = namespaceUri;
33             ResourceName = resourceName;
34             ImportedSchemas = EmptyImportList;
35         }
36         internal string NamespaceUri;
37         internal string ResourceName;
38         internal XmlSchemaResource[] ImportedSchemas;
39
40
41         /// <summary>
42         /// Builds a dictionary from XmlNamespace to XmlSchemaResource of both C and S space schemas
43         /// </summary>
44         /// <returns>The built XmlNamespace to XmlSchemaResource dictionary.</returns>
45         internal static Dictionary<string, XmlSchemaResource> GetMetadataSchemaResourceMap(double schemaVersion)
46         {
47             Dictionary<string, XmlSchemaResource> schemaResourceMap = new Dictionary<string, XmlSchemaResource>(StringComparer.Ordinal);
48             AddEdmSchemaResourceMapEntries(schemaResourceMap, schemaVersion);
49             AddStoreSchemaResourceMapEntries(schemaResourceMap, schemaVersion);
50             return schemaResourceMap;
51         }
52
53         /// <summary>
54         /// Adds Store schema resource entries to the given XmlNamespace to XmlSchemaResoure map
55         /// </summary>
56         /// <param name="schemaResourceMap">The XmlNamespace to XmlSchemaResource map to add entries to.</param>
57         internal static void AddStoreSchemaResourceMapEntries(Dictionary<string, XmlSchemaResource> schemaResourceMap, double schemaVersion)
58         {
59             XmlSchemaResource[] ssdlImports = { new XmlSchemaResource(XmlConstants.EntityStoreSchemaGeneratorNamespace, "System.Data.Resources.EntityStoreSchemaGenerator.xsd") };
60  
61             XmlSchemaResource ssdlSchema = new XmlSchemaResource(XmlConstants.TargetNamespace_1, "System.Data.Resources.SSDLSchema.xsd", ssdlImports);
62             schemaResourceMap.Add(ssdlSchema.NamespaceUri, ssdlSchema);
63
64             if (schemaVersion >= XmlConstants.StoreVersionForV2)
65             {
66                 XmlSchemaResource ssdlSchema2 = new XmlSchemaResource(XmlConstants.TargetNamespace_2, "System.Data.Resources.SSDLSchema_2.xsd", ssdlImports);
67                 schemaResourceMap.Add(ssdlSchema2.NamespaceUri, ssdlSchema2);
68             }
69
70             if (schemaVersion >= XmlConstants.StoreVersionForV3)
71             {
72                 Debug.Assert(XmlConstants.SchemaVersionLatest == XmlConstants.StoreVersionForV3, "Did you add a new schema version");
73
74                 XmlSchemaResource ssdlSchema3 = new XmlSchemaResource(XmlConstants.TargetNamespace_3, "System.Data.Resources.SSDLSchema_3.xsd", ssdlImports);
75                 schemaResourceMap.Add(ssdlSchema3.NamespaceUri, ssdlSchema3);
76             }
77
78             XmlSchemaResource providerManifest = new XmlSchemaResource(XmlConstants.ProviderManifestNamespace, "System.Data.Resources.ProviderServices.ProviderManifest.xsd");
79             schemaResourceMap.Add(providerManifest.NamespaceUri, providerManifest);
80         }
81
82         /// <summary>
83         /// Adds Mapping schema resource entries to the given XmlNamespace to XmlSchemaResoure map
84         /// </summary>
85         /// <param name="schemaResourceMap">The XmlNamespace to XmlSchemaResource map to add entries to.</param>
86         internal static void AddMappingSchemaResourceMapEntries(Dictionary<string, XmlSchemaResource> schemaResourceMap, double schemaVersion)
87         {
88             XmlSchemaResource msl1 = new XmlSchemaResource(StorageMslConstructs.NamespaceUriV1, StorageMslConstructs.ResourceXsdNameV1);
89             schemaResourceMap.Add(msl1.NamespaceUri, msl1);
90
91             if (schemaVersion >= XmlConstants.EdmVersionForV2)
92             {
93                 XmlSchemaResource msl2 = new XmlSchemaResource(StorageMslConstructs.NamespaceUriV2, StorageMslConstructs.ResourceXsdNameV2);
94                 schemaResourceMap.Add(msl2.NamespaceUri, msl2);
95             }
96
97             if (schemaVersion >= XmlConstants.EdmVersionForV3)
98             {
99                 Debug.Assert(XmlConstants.SchemaVersionLatest == XmlConstants.EdmVersionForV3, "Did you add a new schema version");
100                 XmlSchemaResource msl3 = new XmlSchemaResource(StorageMslConstructs.NamespaceUriV3, StorageMslConstructs.ResourceXsdNameV3);
101                 schemaResourceMap.Add(msl3.NamespaceUri, msl3);
102             }
103         }
104
105         /// <summary>
106         /// Adds Edm schema resource entries to the given XmlNamespace to XmlSchemaResoure map,
107         /// when calling from SomSchemaSetHelper.ComputeSchemaSet(), all the imported xsd will be included
108         /// </summary>
109         /// <param name="schemaResourceMap">The XmlNamespace to XmlSchemaResource map to add entries to.</param>
110         internal static void AddEdmSchemaResourceMapEntries(Dictionary<string, XmlSchemaResource> schemaResourceMap, double schemaVersion)
111         {
112             XmlSchemaResource[] csdlImports = { new XmlSchemaResource(XmlConstants.CodeGenerationSchemaNamespace, "System.Data.Resources.CodeGenerationSchema.xsd") };
113             
114             XmlSchemaResource[] csdl2Imports = { 
115                 new XmlSchemaResource(XmlConstants.CodeGenerationSchemaNamespace, "System.Data.Resources.CodeGenerationSchema.xsd"),
116                 new XmlSchemaResource(XmlConstants.AnnotationNamespace, "System.Data.Resources.AnnotationSchema.xsd") };
117
118             XmlSchemaResource[] csdl3Imports = { 
119                 new XmlSchemaResource(XmlConstants.CodeGenerationSchemaNamespace, "System.Data.Resources.CodeGenerationSchema.xsd"),
120                 new XmlSchemaResource(XmlConstants.AnnotationNamespace, "System.Data.Resources.AnnotationSchema.xsd") };
121
122             XmlSchemaResource csdlSchema_1 = new XmlSchemaResource(XmlConstants.ModelNamespace_1, "System.Data.Resources.CSDLSchema_1.xsd", csdlImports);
123             schemaResourceMap.Add(csdlSchema_1.NamespaceUri, csdlSchema_1);
124
125             XmlSchemaResource csdlSchema_1_1 = new XmlSchemaResource(XmlConstants.ModelNamespace_1_1, "System.Data.Resources.CSDLSchema_1_1.xsd", csdlImports);
126             schemaResourceMap.Add(csdlSchema_1_1.NamespaceUri, csdlSchema_1_1);
127
128             if (schemaVersion >= XmlConstants.EdmVersionForV2)
129             {
130                 XmlSchemaResource csdlSchema_2 = new XmlSchemaResource(XmlConstants.ModelNamespace_2, "System.Data.Resources.CSDLSchema_2.xsd", csdl2Imports);
131                 schemaResourceMap.Add(csdlSchema_2.NamespaceUri, csdlSchema_2);
132             }
133
134             if (schemaVersion >= XmlConstants.EdmVersionForV3)
135             {
136                 Debug.Assert(XmlConstants.SchemaVersionLatest == XmlConstants.EdmVersionForV3, "Did you add a new schema version");
137
138                 XmlSchemaResource csdlSchema_3 = new XmlSchemaResource(XmlConstants.ModelNamespace_3, "System.Data.Resources.CSDLSchema_3.xsd", csdl3Imports);
139                 schemaResourceMap.Add(csdlSchema_3.NamespaceUri, csdlSchema_3);
140             }
141         }
142     }
143 }