Skip to content

Commit

Permalink
Merge pull request #505 from warunalakshitha/remove_duplicate_code
Browse files Browse the repository at this point in the history
Refactor environment variable handling
  • Loading branch information
warunalakshitha committed Aug 18, 2023
2 parents 96a4c58 + 608630b commit c9849ae
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 61 deletions.
22 changes: 2 additions & 20 deletions native/src/main/java/io/ballerina/stdlib/os/nativeimpl/GetEnv.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,11 @@
package io.ballerina.stdlib.os.nativeimpl;

import io.ballerina.runtime.api.Environment;
import io.ballerina.runtime.api.PredefinedTypes;
import io.ballerina.runtime.api.creators.TypeCreator;
import io.ballerina.runtime.api.creators.ValueCreator;
import io.ballerina.runtime.api.types.MapType;
import io.ballerina.runtime.api.utils.StringUtils;
import io.ballerina.runtime.api.values.BMap;
import io.ballerina.runtime.api.values.BString;

import java.util.Map;

import static io.ballerina.stdlib.os.utils.OSConstants.ENV_VAR_KEY;
import static io.ballerina.stdlib.os.utils.OSUtils.getEnvVariablesMap;

/**
* Extern function of ballerina.os:getEnv.
Expand All @@ -42,19 +36,7 @@ private GetEnv() {
}

public static BString getEnv(Environment env, BString key) {
Object envVarMap = env.getStrandLocal(ENV_VAR_KEY);
BMap<BString, Object> envMap;
if (envVarMap == null) {
MapType mapType = TypeCreator.createMapType(PredefinedTypes.TYPE_STRING);
envMap = ValueCreator.createMapValue(mapType);
Map<String, String> jEnvMap = System.getenv();
for (Map.Entry<String, String> entry : jEnvMap.entrySet()) {
envMap.put(StringUtils.fromString(entry.getKey()), StringUtils.fromString(entry.getValue()));
}
env.setStrandLocal(ENV_VAR_KEY, envMap);
} else {
envMap = (BMap<BString, Object>) envVarMap;
}
BMap<BString, Object> envMap = getEnvVariablesMap(env);
Object value = envMap.get(key);
if (value == null) {
return StringUtils.fromString("");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,10 @@
package io.ballerina.stdlib.os.nativeimpl;

import io.ballerina.runtime.api.Environment;
import io.ballerina.runtime.api.PredefinedTypes;
import io.ballerina.runtime.api.creators.TypeCreator;
import io.ballerina.runtime.api.creators.ValueCreator;
import io.ballerina.runtime.api.types.MapType;
import io.ballerina.runtime.api.utils.StringUtils;
import io.ballerina.runtime.api.values.BMap;
import io.ballerina.runtime.api.values.BString;

import java.util.Map;

import static io.ballerina.stdlib.os.utils.OSConstants.ENV_VAR_KEY;
import static io.ballerina.stdlib.os.utils.OSUtils.getEnvVariablesMap;

/**
* Extern function of ballerina.os:listEnv.
Expand All @@ -42,17 +35,6 @@ private ListEnv() {
}

public static BMap<BString, Object> listEnv(Environment env) {
Object envVarMap = env.getStrandLocal(ENV_VAR_KEY);
if (envVarMap != null) {
return (BMap<BString, Object>) envVarMap;
}
MapType mapType = TypeCreator.createMapType(PredefinedTypes.TYPE_STRING);
BMap<BString, Object> envMap = ValueCreator.createMapValue(mapType);
Map<String, String> jEnvMap = System.getenv();
for (Map.Entry<String, String> entry : jEnvMap.entrySet()) {
envMap.put(StringUtils.fromString(entry.getKey()), StringUtils.fromString(entry.getValue()));
}
env.setStrandLocal(ENV_VAR_KEY, envMap);
return envMap;
return getEnvVariablesMap(env);
}
}
23 changes: 2 additions & 21 deletions native/src/main/java/io/ballerina/stdlib/os/nativeimpl/SetEnv.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,10 @@
package io.ballerina.stdlib.os.nativeimpl;

import io.ballerina.runtime.api.Environment;
import io.ballerina.runtime.api.PredefinedTypes;
import io.ballerina.runtime.api.creators.TypeCreator;
import io.ballerina.runtime.api.creators.ValueCreator;
import io.ballerina.runtime.api.types.MapType;
import io.ballerina.runtime.api.utils.StringUtils;
import io.ballerina.runtime.api.values.BMap;
import io.ballerina.runtime.api.values.BString;

import java.util.Map;

import static io.ballerina.stdlib.os.utils.OSConstants.ENV_VAR_KEY;
import static io.ballerina.stdlib.os.utils.OSUtils.getEnvVariablesMap;

/**
* Extern function of ballerina.os:setEnv.
Expand All @@ -42,19 +35,7 @@ private SetEnv() {
}

public static Object setEnv(Environment env, BString key, Object value) {
Object envVarMap = env.getStrandLocal(ENV_VAR_KEY);
BMap<BString, Object> envMap;
if (envVarMap == null) {
MapType mapType = TypeCreator.createMapType(PredefinedTypes.TYPE_STRING);
envMap = ValueCreator.createMapValue(mapType);
Map<String, String> jEnvMap = System.getenv();
for (Map.Entry<String, String> entry : jEnvMap.entrySet()) {
envMap.put(StringUtils.fromString(entry.getKey()), StringUtils.fromString(entry.getValue()));
}
env.setStrandLocal(ENV_VAR_KEY, envMap);
} else {
envMap = (BMap<BString, Object>) envVarMap;
}
BMap<BString, Object> envMap = getEnvVariablesMap(env);
if (value == null) {
envMap.remove(key);
} else {
Expand Down
23 changes: 23 additions & 0 deletions native/src/main/java/io/ballerina/stdlib/os/utils/OSUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,21 @@
*/
package io.ballerina.stdlib.os.utils;

import io.ballerina.runtime.api.Environment;
import io.ballerina.runtime.api.PredefinedTypes;
import io.ballerina.runtime.api.creators.TypeCreator;
import io.ballerina.runtime.api.creators.ValueCreator;
import io.ballerina.runtime.api.types.MapType;
import io.ballerina.runtime.api.utils.StringUtils;
import io.ballerina.runtime.api.values.BMap;
import io.ballerina.runtime.api.values.BObject;
import io.ballerina.runtime.api.values.BString;

import java.io.IOException;
import java.util.Map;

import static io.ballerina.stdlib.os.nativeimpl.ModuleUtils.getModule;
import static io.ballerina.stdlib.os.utils.OSConstants.ENV_VAR_KEY;
import static io.ballerina.stdlib.os.utils.OSConstants.PROCESS_FIELD;
import static io.ballerina.stdlib.os.utils.OSConstants.PROCESS_TYPE;

Expand Down Expand Up @@ -58,4 +65,20 @@ public static BString getSystemProperty(BString key) {
}
return StringUtils.fromString(value);
}

public static BMap<BString, Object> getEnvVariablesMap(Environment env) {
Object envVarMap = env.getStrandLocal(ENV_VAR_KEY);
BMap<BString, Object> envMap;
if (envVarMap != null) {
return (BMap<BString, Object>) envVarMap;
}
MapType mapType = TypeCreator.createMapType(PredefinedTypes.TYPE_STRING);
envMap = ValueCreator.createMapValue(mapType);
Map<String, String> jEnvMap = System.getenv();
for (Map.Entry<String, String> entry : jEnvMap.entrySet()) {
envMap.put(StringUtils.fromString(entry.getKey()), StringUtils.fromString(entry.getValue()));
}
env.setStrandLocal(ENV_VAR_KEY, envMap);
return envMap;
}
}

0 comments on commit c9849ae

Please sign in to comment.