package backupclient.install;
import java.io.*;
import java.nio.channels.FileChannel;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.JarFile;
public class Installer {
private static Map<String, Map<String, String>> inputFileMap = new HashMap<String, Map<String, String>>();
private static Map<String, String> outFileMap = new HashMap<String, String>();
static {
inputFileMap.put("Mac OS X", new HashMap<String, String>());
inputFileMap.get("Mac OS X").put("x86_64", "libsigar-universal64-macosx.dylib");
outFileMap.put("Mac OS X", "/usr/lib/java/");
inputFileMap.put("Linux", new HashMap<String, String>());
inputFileMap.get("Linux").put("amd64", "libsigar-amd64-linux.so");
inputFileMap.get("Linux").put("x86", "libsigar-x86-linux.so");
inputFileMap.get("Linux").put("i386", "libsigar-x86-linux.so");
outFileMap.put("Linux", "/usr/lib/");
inputFileMap.put("Windows XP", new HashMap<String, String>());
inputFileMap.get("Windows XP").put("x86", "sigar-x86-winnt.dll");
inputFileMap.get("Windows XP").put("amd64", "sigar-amd64-winnt.dll");
outFileMap.put("Windows XP", "C:\\WINDOWS\\system32\\");
inputFileMap.put("Windows 7", new HashMap<String, String>());
inputFileMap.get("Windows 7").put("x86", "sigar-x86-winnt.dll");
inputFileMap.get("Windows 7").put("amd64", "sigar-amd64-winnt.dll");
outFileMap.put("Windows 7", "C:\\WINDOWS\\system32\\");
inputFileMap.put("Windows Vista", new HashMap<String, String>());
inputFileMap.get("Windows Vista").put("x86", "sigar-x86-winnt.dll");
inputFileMap.get("Windows Vista").put("amd64", "sigar-amd64-winnt.dll");
outFileMap.put("Windows Vista", "C:\\WINDOWS\\system32\\");
inputFileMap.put("Windows 2003", new HashMap<String, String>());
inputFileMap.get("Windows 2003").put("x86", "sigar-x86-winnt.dll");
inputFileMap.get("Windows 2003").put("amd64", "sigar-amd64-winnt.dll");
outFileMap.put("Windows 2003", "C:\\WINDOWS\\system32\\");
inputFileMap.put("Windows Server 2008", new HashMap<String, String>());
inputFileMap.get("Windows Server 2008").put("x86", "sigar-x86-winnt.dll");
inputFileMap.get("Windows Server 2008").put("amd64", "sigar-amd64-winnt.dll");
outFileMap.put("Windows Server 2008", "C:\\WINDOWS\\system32\\");
}
private String inputFileName;
private String outputFileName;
public boolean runInstall() throws IOException {
System.out.println("starting install");
checkOS();
copyFile();
return true;
}
private void checkOS() {
String os = System.getProperty("os.name");
String arch = System.getProperty("os.arch");
Map<String,String> archMap = inputFileMap.get(os);
if (archMap == null) {
throw new RuntimeException("Unknown os version " + os);
}
else {
inputFileName = archMap.get(arch);
if (inputFileName == null) {
throw new RuntimeException("Unknown architecture: " + arch + ", running os: " + os );
}
outputFileName = outFileMap.get(os) + inputFileName;
}
inputFileName = "/sigarfiles/" + inputFileName ;
}
private void copyFile() throws IOException{
if(!outputFileName.equals("") && !inputFileName.equals("")) {
OutputStream out = new FileOutputStream(outputFileName);
InputStream in = Installer.class.getResource(inputFileName).openStream();
byte[] buff = new byte[4096];
int read;
while ((read = in.read(buff)) > 0) {
out.write(buff, 0, read);
}
in.close();
out.close();
System.out.println("Sigar file copied to " + outputFileName);
}
}
}