PageRenderTime 66ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/src/sys/dotnet/fan/sys/Env.cs

https://bitbucket.org/bedlaczech/fan-1.0
C# | 203 lines | 116 code | 51 blank | 36 comment | 12 complexity | bc9fb83c983c58634cc9fca257c15889 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. //
  2. // Copyright (c) 2010, Brian Frank and Andy Frank
  3. // Licensed under the Academic Free License version 3.0
  4. //
  5. // History:
  6. // 27 Jan 10 Brian Frank Creation
  7. //
  8. //using System;
  9. //using System.Collections;
  10. //using System.Reflection;
  11. //using System.IO;
  12. using Fanx.Util;
  13. namespace Fan.Sys
  14. {
  15. public abstract class Env : FanObj
  16. {
  17. //////////////////////////////////////////////////////////////////////////
  18. // Construction
  19. //////////////////////////////////////////////////////////////////////////
  20. public static Env cur() { return Sys.m_curEnv; }
  21. public static void make_(Env self) { make_(self, cur()); }
  22. public static void make_(Env self, Env parent) { self.m_parent = parent; }
  23. public Env()
  24. {
  25. this.m_scripts = new EnvScripts();
  26. this.m_props = new EnvProps(this);
  27. this.m_index = new EnvIndex(this);
  28. }
  29. public Env(Env parent) : this()
  30. {
  31. this.m_parent = parent;
  32. }
  33. //////////////////////////////////////////////////////////////////////////
  34. // Obj
  35. //////////////////////////////////////////////////////////////////////////
  36. public override Type @typeof() { return Sys.EnvType; }
  37. public override string toStr() { return @typeof().toStr(); }
  38. //////////////////////////////////////////////////////////////////////////
  39. // Non-Virtuals
  40. //////////////////////////////////////////////////////////////////////////
  41. public Env parent() { return m_parent; }
  42. public string os() { return Sys.m_os; }
  43. public string arch() { return Sys.m_arch; }
  44. public string platform() { return Sys.m_platform; }
  45. public string runtime() { return "dotnet"; }
  46. public long idHash(object obj) { return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj); }
  47. //////////////////////////////////////////////////////////////////////////
  48. // Virtuals
  49. //////////////////////////////////////////////////////////////////////////
  50. public virtual List args() { return m_parent.args(); }
  51. public virtual Map vars() { return m_parent.vars(); }
  52. public virtual Map diagnostics() { return m_parent.diagnostics(); }
  53. public virtual void gc() { m_parent.gc(); }
  54. public virtual string host() { return m_parent.host(); }
  55. public virtual string user() { return m_parent.user(); }
  56. public virtual void exit() { this.exit(0); }
  57. public virtual void exit(long status) { m_parent.exit(status); }
  58. public virtual InStream @in() { return m_parent.@in(); }
  59. public virtual OutStream @out() { return m_parent.@out(); }
  60. public virtual OutStream err() { return m_parent.err(); }
  61. public virtual string promptPassword() { return this.promptPassword(""); }
  62. public virtual string promptPassword(string msg) { return m_parent.promptPassword(); }
  63. public virtual File homeDir() { return m_parent.homeDir(); }
  64. public virtual File workDir() { return m_parent.workDir(); }
  65. public virtual File tempDir() { return m_parent.tempDir(); }
  66. //////////////////////////////////////////////////////////////////////////
  67. // Resolution
  68. //////////////////////////////////////////////////////////////////////////
  69. public virtual File findFile(string uri) { return findFile(Uri.fromStr(uri), true); }
  70. public virtual File findFile(string uri, bool check) { return findFile(Uri.fromStr(uri), check); }
  71. public virtual File findFile(Uri uri) { return findFile(uri, true); }
  72. public virtual File findFile(Uri uri, bool check)
  73. {
  74. return m_parent.findFile(uri, check);
  75. }
  76. public virtual List findAllFiles(string uri) { return findAllFiles(Uri.fromStr(uri)); }
  77. public virtual List findAllFiles(Uri uri)
  78. {
  79. return m_parent.findAllFiles(uri);
  80. }
  81. public virtual File findPodFile(string name)
  82. {
  83. return findFile(Uri.fromStr("lib/fan/" + name + ".pod"), false);
  84. }
  85. public virtual List findAllPodNames()
  86. {
  87. List acc = new List(Sys.StrType);
  88. List files = findFile(Uri.fromStr("lib/fan/")).list();
  89. for (int i=0; i<files.sz(); ++i)
  90. {
  91. File f = (File)files.get(i);
  92. if (f.isDir() || "pod" != f.ext()) continue;
  93. acc.add(f.basename());
  94. }
  95. return acc;
  96. }
  97. //////////////////////////////////////////////////////////////////////////
  98. // State
  99. //////////////////////////////////////////////////////////////////////////
  100. public virtual Type compileScript(File file) { return compileScript(file, null); }
  101. public virtual Type compileScript(File file, Map options)
  102. {
  103. return m_scripts.compile(file, options);
  104. }
  105. public virtual List index(string key)
  106. {
  107. return m_index.get(key);
  108. }
  109. public virtual List indexKeys()
  110. {
  111. return m_index.keys();
  112. }
  113. public virtual Map props(Pod pod, Uri uri, Duration maxAge)
  114. {
  115. return m_props.get(pod, uri, maxAge);
  116. }
  117. public virtual string config(Pod pod, string key) { return config(pod, key, null); }
  118. public virtual string config(Pod pod, string key, string def)
  119. {
  120. return (string)m_props.get(pod, m_configProps, Duration.m_oneMin).get(key, def);
  121. }
  122. public virtual string locale(Pod pod, string key) { return locale(pod, key, m_noDef, Locale.cur()); }
  123. public virtual string locale(Pod pod, string key, string def) { return locale(pod, key, def, Locale.cur()); }
  124. public virtual string locale(Pod pod, string key, string def, Locale locale)
  125. {
  126. object val;
  127. Duration maxAge = Duration.m_maxVal;
  128. // 1. 'props(pod, `locale/{locale}.props`)'
  129. val = props(pod, locale.m_strProps, maxAge).get(key, null);
  130. if (val != null) return (string)val;
  131. // 2. 'props(pod, `locale/{lang}.props`)'
  132. val = props(pod, locale.m_langProps, maxAge).get(key, null);
  133. if (val != null) return (string)val;
  134. // 3. 'props(pod, `locale/en.props`)'
  135. val = props(pod, m_localeEnProps, maxAge).get(key, null);
  136. if (val != null) return (string)val;
  137. // 4. Fallback to 'pod::key' unless 'def' specified
  138. if (def == m_noDef) return pod + "::" + key;
  139. return def;
  140. }
  141. //////////////////////////////////////////////////////////////////////////
  142. // Fields
  143. //////////////////////////////////////////////////////////////////////////
  144. static readonly string m_noDef = "_Env_nodef_";
  145. static Uri m_configProps = Uri.fromStr("config.props");
  146. static Uri m_localeEnProps = Uri.fromStr("locale/en.props");
  147. private Env m_parent;
  148. private EnvScripts m_scripts;
  149. private EnvProps m_props;
  150. private EnvIndex m_index;
  151. }
  152. }