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 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 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 get() { return Collections.unmodifiableMap( env ); } }