summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/src/main/java/org/openslx/taskmanager/api/Environment.java (renamed from daemon/src/main/java/org/openslx/taskmanager/Environment.java)45
-rw-r--r--api/src/main/java/org/openslx/taskmanager/api/SystemCommandTask.java7
-rw-r--r--daemon/src/main/java/org/openslx/taskmanager/App.java1
3 files changed, 30 insertions, 23 deletions
diff --git a/daemon/src/main/java/org/openslx/taskmanager/Environment.java b/api/src/main/java/org/openslx/taskmanager/api/Environment.java
index acbfad4..3942ec5 100644
--- a/daemon/src/main/java/org/openslx/taskmanager/Environment.java
+++ b/api/src/main/java/org/openslx/taskmanager/api/Environment.java
@@ -1,11 +1,13 @@
-package org.openslx.taskmanager;
+package org.openslx.taskmanager.api;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
+import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.log4j.Logger;
@@ -18,21 +20,33 @@ public class Environment
private static final Logger log = Logger.getLogger( Environment.class );
- private static Map<String, String> env = new LinkedHashMap<>();
+ private static Map<String, String> env = null;
public static boolean load( String fileName )
{
+ if ( env != null )
+ throw new RuntimeException( "Already loaded" );
try {
+ Pattern regex = Pattern.compile( "^([a-zA-Z0-9_]+)(|=.*)$" );
FileReader fileReader = new FileReader( fileName );
BufferedReader bufferedReader = new BufferedReader( fileReader );
Map<String, String> env = new LinkedHashMap<>();
String line = null;
while ( ( line = bufferedReader.readLine() ) != null ) {
- if ( !line.matches( "^[a-zA-Z0-9_]+=" ) )
+ Matcher m = regex.matcher( line );
+ if ( !m.matches() )
continue;
- String[] part = line.split( "=", 2 );
- env.put( part[0], part[1] );
+ String name = m.group( 1 );
+ String value = m.group( 2 );
+ if ( value.isEmpty() ) {
+ value = System.getenv( name );
+ } else {
+ value = value.substring( 1 );
+ }
+ if ( value != null ) {
+ env.put( name, value );
+ }
}
bufferedReader.close();
@@ -45,23 +59,10 @@ public class Environment
}
return true;
}
-
- public static void set( Map<String, String> environment )
+
+ public static Map<String, String> get()
{
- environment.clear();
- environment.putAll( env );
- }
-
- public static String[] get()
- {
- // Get reference to env so it doesn't change while in this function (load() from other thread)
- Map<String, String> env = Environment.env;
- String ret[] = new String[ env.size() ];
- int i = 0;
- for ( Entry<String, String> it : env.entrySet() ) {
- ret[i++] = it.getKey() + "=" + it.getValue();
- }
- return ret;
+ return Collections.unmodifiableMap( env );
}
}
diff --git a/api/src/main/java/org/openslx/taskmanager/api/SystemCommandTask.java b/api/src/main/java/org/openslx/taskmanager/api/SystemCommandTask.java
index 18c8ecc..c1aa6e5 100644
--- a/api/src/main/java/org/openslx/taskmanager/api/SystemCommandTask.java
+++ b/api/src/main/java/org/openslx/taskmanager/api/SystemCommandTask.java
@@ -48,7 +48,12 @@ public abstract class SystemCommandTask extends AbstractTask
ProcessBuilder pb = new ProcessBuilder( command );
pb.directory( new File( "/" ) );
- initEnvironment( pb.environment() );
+ Map<String, String> env = pb.environment();
+ if ( Environment.get() != null ) {
+ env.clear();
+ env.putAll( Environment.get() );
+ }
+ initEnvironment( env );
try {
diff --git a/daemon/src/main/java/org/openslx/taskmanager/App.java b/daemon/src/main/java/org/openslx/taskmanager/App.java
index d64929d..3b8eb66 100644
--- a/daemon/src/main/java/org/openslx/taskmanager/App.java
+++ b/daemon/src/main/java/org/openslx/taskmanager/App.java
@@ -6,6 +6,7 @@ import java.util.List;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
+import org.openslx.taskmanager.api.Environment;
import org.openslx.taskmanager.main.Taskmanager;
import org.openslx.taskmanager.network.NetworkHandlerTcp;
import org.openslx.taskmanager.network.NetworkHandlerUdp;