summaryrefslogtreecommitdiffstats
path: root/api/src/main/java/org/openslx/taskmanager
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/main/java/org/openslx/taskmanager')
-rw-r--r--api/src/main/java/org/openslx/taskmanager/api/Environment.java68
-rw-r--r--api/src/main/java/org/openslx/taskmanager/api/SystemCommandTask.java7
2 files changed, 74 insertions, 1 deletions
diff --git a/api/src/main/java/org/openslx/taskmanager/api/Environment.java b/api/src/main/java/org/openslx/taskmanager/api/Environment.java
new file mode 100644
index 0000000..3942ec5
--- /dev/null
+++ b/api/src/main/java/org/openslx/taskmanager/api/Environment.java
@@ -0,0 +1,68 @@
+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.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Holds the environment that tasks running a system command *should*
+ * use. The environment is read from a config file.
+ */
+public class Environment
+{
+
+ private static final Logger log = Logger.getLogger( Environment.class );
+
+ 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 ) {
+ Matcher m = regex.matcher( line );
+ if ( !m.matches() )
+ continue;
+ 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();
+
+ Environment.env = env;
+ log.info( "Loaded " + env.size() + " environment lines." );
+ } catch ( IOException e ) {
+ log.info( "Could not load environment definition from " + fileName + ". Processes might use the same environment as this thread." );
+ return false;
+ }
+ return true;
+ }
+
+ public static Map<String, String> get()
+ {
+ 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 {