Skip to content

Commit

Permalink
JNet is able to manage environment variables with the pattern $(ENV_V…
Browse files Browse the repository at this point in the history
…AR) (#601)
  • Loading branch information
masesdevelopers authored Jan 27, 2025
1 parent 78887f9 commit b34720d
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 7 deletions.
34 changes: 32 additions & 2 deletions src/net/JNet/JNetCoreBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,36 @@ protected override string[] ProcessCommandLine()
/// Adds options to the JVM
/// </summary>
protected abstract IDictionary<string, string> Options { get; }
/// <summary>
/// Replace environment variable in <paramref name="item"/>
/// </summary>
/// <param name="item">The string where the environemnt variables shall be replaced</param>
/// <returns>The string with replaced environment varibales</returns>
/// <remarks>Each environment variable is expected in the form $(ENV_VAR)</remarks>
public static string ReplaceEnvironmentVariable(string item)
{
const string startTemplate = "$(";
const string endTemplate = ")";

if (!string.IsNullOrWhiteSpace(item))
{
int firstIndex = 0;
while ((firstIndex = item.IndexOf(startTemplate, firstIndex)) != -1)
{
var secondIndex = item.IndexOf(endTemplate, firstIndex);
if (secondIndex != -1)
{
var envVar = item.Substring(firstIndex + startTemplate.Length, secondIndex - (firstIndex + startTemplate.Length));
if (Environment.GetEnvironmentVariable(envVar) != null)
{
item.Replace($"{startTemplate}{envVar}{endTemplate}", Environment.GetEnvironmentVariable(envVar));
}
}
firstIndex = secondIndex;
}
}
return item;
}

/// <see href="https://www.jcobridge.com/api-clr/html/P_MASES_JCOBridge_C2JBridge_SetupJVMWrapper_JVMOptions.htm"/>
public sealed override IEnumerable<KeyValuePair<string, string>> JVMOptions
Expand All @@ -190,7 +220,7 @@ public sealed override IEnumerable<KeyValuePair<string, string>> JVMOptions
{
foreach (var item in base.JVMOptions)
{
opt.Add(item);
opt.Add(new KeyValuePair<string, string>(ReplaceEnvironmentVariable(item.Key), ReplaceEnvironmentVariable(item.Value)));
}
}
if (Options != null)
Expand All @@ -199,7 +229,7 @@ public sealed override IEnumerable<KeyValuePair<string, string>> JVMOptions
{
try
{
opt.Add(item);
opt.Add(new KeyValuePair<string, string>(ReplaceEnvironmentVariable(item.Key), ReplaceEnvironmentVariable(item.Value)));
}
catch (Exception e)
{
Expand Down
10 changes: 5 additions & 5 deletions src/net/JNetReflector/JNetReflectorCore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ public struct JVMOption
{
public JVMOption(string optionName, string optionValue)
{
OptionName = optionName;
OptionValue = optionValue;
Name = optionName;
Value = optionValue;
}
public string OptionName { get; set; }
public string OptionValue { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}

public IEnumerable<JVMOption> JVMOptions { get; set; }
Expand Down Expand Up @@ -844,7 +844,7 @@ protected override IDictionary<string, string> Options
Dictionary<string, string> dict = new();
foreach (var item in _ConfigurationFromFile.JVMOptions)
{
dict.Add(item.OptionName, item.OptionValue);
dict.Add(item.Name, item.Value);
}
return dict;
}
Expand Down

0 comments on commit b34720d

Please sign in to comment.