INST: InstallManager get added options and can be executed itself for 92/11692/1
authoryongsung1.kim <yongsung1.kim@samsung.com>
Sun, 3 Nov 2013 08:35:27 +0000 (17:35 +0900)
committeryongsung1.kim <yongsung1.kim@samsung.com>
Sun, 3 Nov 2013 08:35:27 +0000 (17:35 +0900)
upgrading.
There are 2 options added such as -distribution, -repository. When
package server has a installmanager package which is higher version than
current installmanager version, it will be executed itself.
InstallManager could not be executed on Windows7 64bit. But now we fixed
it.

Signed-off-by: yongsung1.kim <yongsung1.kim@samsung.com>
Change-Id: I5c284fedda80a1e1491ddfe0e2f97df70eb588da

InstallManager_java/src/org/tizen/installmanager/core/InstallManager.java
InstallManager_java/src/org/tizen/installmanager/core/InstallManagerConstants.java
InstallManager_java/src/org/tizen/installmanager/lib/win/WindowsSDKPackageFormat.java
InstallManager_java/src/org/tizen/installmanager/ui/page/ViewController.java
os_stubs/windows/InstallManager-64.nsi
os_stubs/windows/InstallManager.nsi

index 09f925a..6cbf6b0 100644 (file)
@@ -118,6 +118,11 @@ public class InstallManager {
                                mConfig.getConfigFile().setRepository(Options.repository);
                                mConfig.saveConfig();
                        }
+                       
+                       if (Options.distribution != null && !Options.distribution.isEmpty()) {
+                               mConfig.getConfigFile().setDistribution(Options.distribution);
+                               mConfig.saveConfig();
+                       }
 
                        if (mConfig.getConfigFile() == null) {
                                Log.log("Loading config file failed");
index 49cf1f8..ef49aeb 100644 (file)
@@ -8,6 +8,7 @@ public class InstallManagerConstants {
        final static public String INSTALLMANAGER_PACKAGE_NAME = "install-manager";
        final static public String INSTALLMANAGER_JAR_FILE_NAME = "InstallManager.jar";
        final static public String INSTALLMANAGER_BINARY_PREFIX = "inst-manager";
+       final static public String INSTALLMANAGERV2_JAR_FILE_NAME ="InstallManagerV2.jar";
        final static public String INSTALLMANAGER_EXECUTALBE_FILE_NAME_FOR_LINUX = INSTALLMANAGER_BINARY_PREFIX + ".bin";
        final static public String INSTALLMANAGER_EXECUTALBE_FILE_NAME_FOR_WINDOWS = INSTALLMANAGER_BINARY_PREFIX + ".exe";
        final static public String INSTALLMANAGER_EXECUTALBE_DIR_NAME_FOR_MAC = INSTALLMANAGER_BINARY_PREFIX + ".app";
index 8dedc42..8efb885 100644 (file)
@@ -36,6 +36,7 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
 import org.tizen.installmanager.core.IMFatalException;
+import org.tizen.installmanager.lib.ErrorController;
 import org.tizen.installmanager.lib.IIMProgressMonitor;
 import org.tizen.installmanager.lib.Log;
 import org.tizen.installmanager.lib.SDKPackageFormat;
@@ -166,11 +167,11 @@ public class WindowsSDKPackageFormat extends SDKPackageFormat{
                        if (zipEntry != null) {
                                Log.err("Fail to unpack " + zipEntry.getName());
                        }
-
+                       
                        return ERROR;
                } catch (Throwable e) {
                        Log.ExceptionLog(e);
-                       throw new IMFatalException(e.getMessage());
+                       return ERROR;
                } finally {
                        try {
                                if (zipOutput != null) {
index 00b6c79..efe6afb 100644 (file)
@@ -49,6 +49,7 @@ import org.tizen.installmanager.lib.Downloader;
 import org.tizen.installmanager.lib.ErrorController;
 import org.tizen.installmanager.lib.IIMProgressMonitor;
 import org.tizen.installmanager.lib.Log;
+import org.tizen.installmanager.lib.Platform;
 import org.tizen.installmanager.lib.Registry;
 import org.tizen.installmanager.lib.ErrorController.ErrorCode;
 import org.tizen.installmanager.lib.SDKPackageFormat;
@@ -786,7 +787,7 @@ public class ViewController {
        
        public boolean updateInstallManager() {
                Package pkg = packageManager.getPackageByName(InstallManagerConstants.INSTALLMANAGER_PACKAGE_NAME);
-               
+
                if (pkg == null) {
                        return false;
                }
@@ -809,9 +810,11 @@ public class ViewController {
                }
                
                if (extractIMPackage(imPackage)) {
+                       Log.log("Success to extract updatable InstallManager.");
                        runNewInstallManager();
                        return true;
                } else {
+                       Log.err("Fail to extract updatable InstallManager. Cannot execute it.");
                        return false;
                }
        }
@@ -823,6 +826,13 @@ public class ViewController {
                
                String packagePath = pkg.getFileName();
                String installManagerTempPath = PathUtil.get(PathUtil.getTempDir(), PathUtil.getFileName(packagePath));
+               File tempInstaller = new File(installManagerTempPath);
+               
+               if (tempInstaller.exists()) {
+                       if (!PathUtil.remove(installManagerTempPath)) {
+                               Log.err("Cannot remove installmanager. => " + tempInstaller);
+                       }
+               }
                
                try {
                        long size = downloader.download(pkg.getURL(), installManagerTempPath, null);
@@ -869,7 +879,7 @@ public class ViewController {
        }
        
        private boolean isIMBinary(String fileName) {
-               if (fileName.equals(InstallManagerConstants.INSTALLMANAGER_BINARY_NAME)){
+               if (fileName.equals(InstallManagerConstants.INSTALLMANAGERV2_JAR_FILE_NAME)){
                        return true;
                } else {
                        return false;
@@ -877,21 +887,78 @@ public class ViewController {
        }
        
        private void runNewInstallManager() {
-               File tempDirFile = new File(PathUtil.get(PathUtil.getTempDir(), "data", "install-manager"));
-               
-               for (File childFile : tempDirFile.listFiles()) {
-                       if (isIMBinary(childFile.getName())) {
-                               try {
-                                       String cmd = ShellUtil.addInterpreter(childFile.getAbsolutePath());                                     
-                                       ProcessBuilder pb = new ProcessBuilder(ShellUtil.stringToken(cmd));
-                                       pb.directory(tempDirFile);
-                                       pb.start();
-                                       
-                                       System.exit(0);
-                               } catch (IOException e) {
-                                       Log.ExceptionLog(e);
-                                       return;
+               File tempIMJarFile = new File(PathUtil.get(
+                               PathUtil.getTempDir(), "data", "install-manager",
+                               InstallManagerConstants.INSTALLMANAGERV2_JAR_FILE_NAME));
+
+               if (tempIMJarFile.exists()) {
+                       try {
+                               ArrayList<String> commands = new ArrayList<String>();
+                               
+                               String javaHome = System.getProperty("java.home");
+                               File java = null;
+                               if (Platform.isLinux() || Platform.isMacOS()) {
+                                       java = new File(PathUtil.get(javaHome, "bin", "java"));
+                               } else if (Platform.isWindows()) {
+                                       java = new File(PathUtil.get(javaHome, "bin", "java.exe"));
+                               }
+                               
+                               String forceBitOption = "-d" + System.getProperty("sun.arch.data.model");
+
+                               String jarPath = PathUtil.get(tempIMJarFile.getAbsolutePath());
+                               if (java.exists()) {
+                                       commands.add(java.getAbsolutePath());
+                               } else {
+                                       commands.add("java");
+                               }
+                               
+                               if (Platform.isMacOS()) {
+                                       commands.add("-XstartOnFirstThread");
                                }
+                               
+                               commands.add(forceBitOption);
+                               commands.add("-jar");
+                               commands.add(jarPath);
+                               
+                               if (Options.executablePath != null) {
+                                       commands.add("-path");
+                                       commands.add(Options.executablePath);
+                               }
+                               
+                               String repo = Config.getInstance().getConfigFile().getRepository();
+                               if (repo != null & !repo.isEmpty()) {
+                                       commands.add("-repository");
+                                       commands.add(repo);
+                               }
+                               
+                               String dist = Config.getInstance().getConfigFile().getDistribution();
+                               if (repo != null & !repo.isEmpty()) {
+                                       commands.add("-distribution");
+                                       commands.add(dist);
+                               }
+                               
+                               String proxyHost = Config.getInstance().getConfigFile().getProxyHost();
+                               int proxyPort = Config.getInstance().getConfigFile().getProxyPort();
+                               if (proxyHost != null & !proxyHost.isEmpty()) {
+                                       if (proxyPort > 0) {
+                                               commands.add("-proxy");
+                                               commands.add(proxyHost + ":" + proxyPort);
+                                       }
+                               }
+                               
+                               Config.getInstance().getConfigFile().setInstallManagerVersion(packageManager.getPackageByName("install-manager").getVersion().toString());
+                               Config.getInstance().getConfigFile().saveConfig(PathUtil.get(tempIMJarFile.getParent(), "installmanager.conf"));
+                               
+                               Log.log("Updatable commands => " + commands);
+                               
+                               ProcessBuilder pb = new ProcessBuilder(commands);
+                               pb.directory(tempIMJarFile.getParentFile());
+                               pb.start();
+                               
+                               System.exit(0);
+                       } catch (IOException e) {
+                               Log.ExceptionLog(e);
+                               return;
                        }
                }
        }
index 6a7ea80..c41c187 100644 (file)
@@ -207,7 +207,8 @@ done:
        ${EndIf}\r
 \r
        ${If} $R0 == ""\r
-               Exec "javaw -jar $INSTDIR\InstallManager.jar $2"\r
+               ExecDos::Exec /NOUNLOAD /ASYNC /DISABLEFSR "java -jar $INSTDIR\InstallManager.jar $2"\r
+               pop $4\r
        ${Else}\r
                StrCpy $3 "$2 $R0"\r
                System::Call 'kernel32::GetStdHandle(i -11)i.r0' ;try to get stdout\r
index 4027edf..e416de1 100644 (file)
@@ -182,7 +182,7 @@ done:
                Pop $1\r
                ${If} $1 == "" ; if not java version 1.7, it will check java version using java home.\r
                        ## Execute java.exe in java home\r
-                       nsExec::ExecToStack '"$5" /C ""$4\bin\java.exe" "-version""'\r
+                       nsExec::ExecToStack '"$3" /C ""$5\bin\java.exe" "-version""'\r
                        Pop $0\r
                        Pop $6\r
 \r
@@ -204,7 +204,8 @@ done:
        ${EndIf}\r
 \r
        ${If} $R0 == ""\r
-               Exec "javaw -jar $INSTDIR\InstallManager.jar $2"\r
+               ExecDos::Exec /NOUNLOAD /ASYNC "java.exe -jar $INSTDIR\InstallManager.jar $2"\r
+               Pop $4\r
        ${Else}\r
                StrCpy $3 "$2 $R0"\r
                System::Call 'kernel32::GetStdHandle(i -11)i.r0' ;try to get stdout\r