package com.arjuna.qa.extension;
import org.jboss.arquillian.container.spi.ServerKillProcessor;
import org.jboss.arquillian.core.spi.LoadableExtension;
public class ServerExtension implements LoadableExtension {
@Override
public void register(ExtensionBuilder builder) {
if (isWindows()) {
builder.service(ServerKillProcessor.class, JBossAS7ServerKillProcessorWin.class);
} else {
builder.service(ServerKillProcessor.class, JBossAS7ServerKillProcessor.class);
}
}
public static boolean isWindows() {
String osName = System.getProperty("os.name");
return osName != null && ((osName.indexOf("Windows") > -1) || (osName.indexOf("windows") > -1));
}
public static boolean isLinux() {
String osName = System.getProperty("os.name");
return osName != null && ((osName.indexOf("Linux") > -1) || (osName.indexOf("linux") > -1));
}
public static boolean isSolaris() {
String osName = System.getProperty("os.name");
return osName != null && ((osName.indexOf("Solaris") > -1) || (osName.indexOf("solaris") > -1) || (osName.indexOf("SunOS") > -1));
}
public static boolean isHpux() {
String osName = System.getProperty("os.name");
return osName != null && ((osName.toUpperCase().indexOf("HP-UX") > -1));
}
public static boolean isIbmJdk() {
return System.getProperty("java.vendor").contains("IBM Corporation");
}
enum OSType {
WINDOWS {
@Override
public String getPSCommand() {
return "wmic PROCESS GET ProcessId,CommandLine,Name";
}
},
LINUX {
@Override
public String getPSCommand() {
return "ps aux";
}
@Override
String getPSIDIndex() {
return "{print $2}";
}
},
SOLARIS {
@Override
public String getPSCommand() {
return ServerExtension.isIbmJdk() ? "/usr/ucb/ps aux" : "jps";
}
@Override
String getPSIDIndex() {
return ServerExtension.isIbmJdk() ? "{print $2}" : "{print $1}";
}
},
HPUX {
@Override
public String getPSCommand() {
return ServerExtension.isIbmJdk() ? "/usr/ucb/ps aux" : "jps";
}
@Override
String getPSIDIndex() {
return ServerExtension.isIbmJdk() ? "{print $2}" : "{print $1}";
}
};
// IBM JDK does not have "jps" so using "ps", Solaris have "ps" in "/usr/ucb/".
String getPSCommand() {
return null;
}
String getPSIDIndex() {
return null;
}
static OSType getOSType() {
if (ServerExtension.isHpux()) return HPUX;
if (ServerExtension.isWindows()) return WINDOWS;
if (ServerExtension.isSolaris()) return SOLARIS;
return LINUX;
}
}
}