package com.thoughtworks.calabash.android;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class Environment {
public static final String ENV_ANDROID_HOME = "ANDROID_HOME";
public static final String ENV_JAVA_HOME = "JAVA_HOME";
private final String keytool;
private final String jarsigner;
private final Map<String, String> envVariables = new HashMap<String, String>();
private final String androidHome;
private String jrubyHome;
public Environment(String androidHome, String javaHome, String keytool, String jarsigner) throws CalabashException {
this.keytool = keytool;
this.jarsigner = jarsigner;
if (!isValidAndroidHome(androidHome))
throw new CalabashException(String.format("Invalid %s : %s", ENV_ANDROID_HOME, androidHome));
this.androidHome = androidHome;
envVariables.put(ENV_ANDROID_HOME, androidHome);
if (javaHome != null && !javaHome.isEmpty())
envVariables.put(ENV_JAVA_HOME, javaHome);
}
public static String getPlatformExecutable(String executable) {
return Utils.isWindows() ? executable + ".exe" : executable;
}
public static String getPathSeparator() {
return Utils.isWindows() ? ";" : ":";
}
public String getJrubyHome() {
return jrubyHome;
}
public void setJrubyHome(String jrubyHome) {
this.jrubyHome = jrubyHome;
}
private boolean isValidAndroidHome(String androidHome) {
return getAdbFile(androidHome).exists();
}
public Map<String, String> getEnvVariables() {
return new HashMap<String, String>(envVariables);
}
public String getKeytool() {
return quoteIfWindows(keytool);
}
public String getJarsigner() {
return quoteIfWindows(jarsigner);
}
public String getAdb() {
return quoteIfWindows(getAdbFile(androidHome).getAbsolutePath());
}
private File getAdbFile(String androidHome) {
return new File(androidHome + File.separator + "platform-tools" + File.separator + getPlatformExecutable("adb"));
}
public String getEmulator() {
return quoteIfWindows(getEmulatorFile(androidHome).getAbsolutePath());
}
private File getEmulatorFile(String androidHome) {
return new File(androidHome + File.separator + "tools" + File.separator + getPlatformExecutable("emulator"));
}
private String quoteIfWindows(String executable) {
return Utils.isWindows() ? "\"" + executable + "\"" : executable;
}
}