[NUI] Add Tizen.NUI.XamlBuild module
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI.XamlBuild / src / internal / Xaml / ResourcesLoader.cs
1 using System;
2 using System.IO;
3 using System.Reflection;
4 using Tizen.NUI;
5 using System.Xml;
6 using Tizen.NUI.Binding.Internals;
7
8 // [assembly:Dependency(typeof(Tizen.NUI.Xaml.ResourcesLoader))]
9 namespace Tizen.NUI.Xaml
10 {
11     internal class ResourcesLoader : IResourcesLoader
12     {
13         public T CreateFromResource<T>(string resourcePath, Assembly assembly, IXmlLineInfo lineInfo) where T: new()
14         {
15             var alternateResource = ResourceLoader.ResourceProvider?.Invoke(assembly.GetName(), resourcePath);
16             if (alternateResource != null) {
17                 var rd = new T();
18                 rd.LoadFromXaml(alternateResource);
19                 return rd;
20             }
21
22             var resourceId = XamlResourceIdAttribute.GetResourceIdForPath(assembly, resourcePath);
23             if (resourceId == null)
24                 throw new XamlParseException($"Resource '{resourcePath}' not found.", lineInfo);
25
26             using (var stream = assembly.GetManifestResourceStream(resourceId)) {
27                 if (stream == null)
28                     throw new XamlParseException($"No resource found for '{resourceId}'.", lineInfo);
29                 using (var reader = new StreamReader(stream)) {
30                     var rd = new T();
31                     rd.LoadFromXaml(reader.ReadToEnd());
32                     return rd;
33                 }
34             }
35         }
36
37         public string GetResource(string resourcePath, Assembly assembly, IXmlLineInfo lineInfo)
38         {
39             var alternateResource = ResourceLoader.ResourceProvider?.Invoke(assembly.GetName(), resourcePath);
40             if (alternateResource != null)
41                 return alternateResource;
42
43             var resourceId = XamlResourceIdAttribute.GetResourceIdForPath(assembly, resourcePath);
44             if (resourceId == null)
45                 throw new XamlParseException($"Resource '{resourcePath}' not found.", lineInfo);
46
47             using (var stream = assembly.GetManifestResourceStream(resourceId)) {
48                 if (stream == null)
49                     throw new XamlParseException($"No resource found for '{resourceId}'.", lineInfo);
50                 using (var reader = new StreamReader(stream))
51                     return reader.ReadToEnd();
52             }
53         }
54     }
55 }