[NUI]Add xaml support for nui and nui xaml test sample (#230)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / 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.Internals;
7
8 // [assembly:Dependency(typeof(Tizen.NUI.Xaml.ResourcesLoader))]
9 namespace Tizen.NUI.Xaml
10 {
11         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 }