upload tizen2.0 alpha installmanager source
[sdk/installer/install-manager.git] / InstallManager_java / src / org / tizen / installmanager / ui / page / ViewController.java
index 43bef1b..3cf7d47 100644 (file)
@@ -34,14 +34,17 @@ import java.util.List;
 
 import org.tizen.installmanager.core.Config;
 import org.tizen.installmanager.core.IMExitException;
+import org.tizen.installmanager.core.IMFatalException;
 import org.tizen.installmanager.core.InstallManager;
+import org.tizen.installmanager.core.Options;
+import org.tizen.installmanager.core.Config.ServerType;
 import org.tizen.installmanager.lib.ErrorController;
 import org.tizen.installmanager.lib.IIMProgressMonitor;
 import org.tizen.installmanager.lib.Log;
 import org.tizen.installmanager.lib.Registry;
 import org.tizen.installmanager.lib.ErrorController.ErrorCode;
-import org.tizen.installmanager.pkg.lib.PackageManager2;
-import org.tizen.installmanager.pkg.model.Package2;
+import org.tizen.installmanager.pkg.lib.PackageManager;
+import org.tizen.installmanager.pkg.model.Package;
 import org.tizen.installmanager.pkg.model.PackageSet;
 import org.tizen.installmanager.ui.page.InstallingPage.InstallProgressMonitor;
 import org.tizen.installmanager.util.PathUtil;
@@ -53,8 +56,8 @@ import org.tizen.installmanager.util.PathUtil;
  */
 public class ViewController {
 
-       private InstallManager mInstallManager;
-       private PackageManager2 mPackageManager2;
+       private InstallManager installManager;
+       private PackageManager packageManager;
 
        /**
         * Initialize objects which need to install.
@@ -64,13 +67,26 @@ public class ViewController {
         */
        public boolean init() {
                Log.log("ViewController init");
-               mInstallManager = InstallManager.getInstance();
-               boolean bResult = mInstallManager.init();
-               mPackageManager2 = mInstallManager.getPackageManager2();
-
-               bResult = bResult && existInstallableOrRemovablePackages();
-
-               return bResult;
+               
+               try {
+                       installManager = InstallManager.getInstance();
+                       installManager.init();
+                       packageManager = installManager.getPackageManager();
+                       
+                       if (packageManager == null) {
+                               throw new IMFatalException("Cannot read package information.");
+                       } else {
+                               if (existInstallableOrRemovablePackages()) {
+                                       return true;
+                               } else {
+                                       ErrorController.setInstallationSuccess(false);
+                                       return false;
+                               }
+                       }
+               } catch(IMFatalException e) {
+                       Log.ExceptionLog(e);
+                       return false;
+               }
        }
 
        /**
@@ -78,10 +94,10 @@ public class ViewController {
         * @return Meta package set
         */
        public PackageSet getInstallableOrUpdatableMetaPackages() {
-               if (mPackageManager2 == null) {
+               if (packageManager == null) {
                        return null;
                } else {
-                       return mPackageManager2.getInstallableOrUpdatableMetaPackages();
+                       return packageManager.getInstallableOrUpdatableMetaPackages();
                }
        }
 
@@ -90,10 +106,22 @@ public class ViewController {
         * @return Meta package set
         */
        public PackageSet getInstallableMetaPackageList() {
-               if (mPackageManager2 == null) {
+               if (packageManager == null) {
                        return null;
                } else {
-                       return mPackageManager2.getInstallableMetaPackages();
+                       return packageManager.getInstallableMetaPackages();
+               }
+       }
+       
+       /**
+        * Get meta packages in repository.
+        * @return Meta package set
+        */
+       public PackageSet getRootMetaPackageListOfRepository() {
+               if (packageManager == null) {
+                       return null;
+               } else {
+                       return packageManager.getRootMetaPackagesOfRepository();
                }
        }
 
@@ -102,10 +130,22 @@ public class ViewController {
         * @return Meta package set
         */
        public PackageSet getUpdatableMetapackageList() {
-               if (mPackageManager2 == null) {
+               if (packageManager == null) {
                        return null;
                } else {
-                       return mPackageManager2.getUpdatableMetaPackages();
+                       return packageManager.getUpdatableMetaPackages();
+               }
+       }
+       
+       /**
+        * Get meta packages that are available to update.
+        * @return Meta package set
+        */
+       public PackageSet getNotUpdatableMetapackageList() {
+               if (packageManager == null) {
+                       return null;
+               } else {
+                       return packageManager.getNotInstallableAndNotUpdatablePackages();
                }
        }
 
@@ -114,10 +154,18 @@ public class ViewController {
         * @return Meta package set
         */
        public PackageSet getRemovableMetaPackageList() {
-               if (mPackageManager2 == null) {
+               if (packageManager == null) {
+                       return null;
+               } else {
+                       return packageManager.getRemovableMetaPackages();
+               }
+       }
+       
+       public PackageSet getInstallablePackageListInSnapshot() {
+               if (packageManager == null) {
                        return null;
                } else {
-                       return mPackageManager2.getRemovableMetaPackages();
+                       return packageManager.getInstallableMetaPackagesInSnapshot();
                }
        }
 
@@ -126,7 +174,11 @@ public class ViewController {
         * @return package set
         */
        public PackageSet getRemovablePackageList() {
-               return mPackageManager2.getInstalledPackages();
+               if (packageManager == null) {
+                       return null;
+               } else {
+                       return packageManager.getInstalledPackages();
+               }
        }
 
        /**
@@ -134,7 +186,11 @@ public class ViewController {
         * @return if installed package exists, return true. if not return false.
         */
        public boolean existRemovablePackage() {
-               return mPackageManager2.existInstalledPackages();
+               if (packageManager == null) {
+                       return false;
+               } else {
+                       return packageManager.existInstalledPackages();
+               }
        }
 
        /**
@@ -151,7 +207,7 @@ public class ViewController {
                Log.log("======== Start Installing ========");
                Log.log("ViewController install => Selected package list: " + installList);
 
-               if (mPackageManager2 == null) {
+               if (packageManager == null) {
                        Log.err("Package list does not exist.");
                        return false;
                }
@@ -161,11 +217,31 @@ public class ViewController {
                        return true;
                }
 
-               PackageSet selectedMetas = mPackageManager2.getPackagesByNames(installList);
+               PackageSet selectedMetas = packageManager.getPackagesByNames(installList);
+               
+               //add mandotory packages
+               selectedMetas.addAll(packageManager.getMandatoryPackages());
+               
+               //get package set by pusrpose.
+               selectedMetas = getMetaPackagesByPurpose(selectedMetas);
 
-               return mInstallManager.install(selectedMetas, targetPath, monitor);
+               return installManager.install(selectedMetas, targetPath, monitor);
 
        }
+       
+       private PackageSet getMetaPackagesByPurpose(PackageSet metaPackages) {
+               for (Package pkg : metaPackages) {
+                       String attribute = pkg.getAttribute();
+                       
+                       if (!attribute.equalsIgnoreCase("root") && attribute.equals("extra")) {
+                               if (!attribute.equalsIgnoreCase(attribute)) {
+                                       metaPackages.remove(pkg);
+                               }
+                       }
+               }
+               
+               return metaPackages;
+       }
 
        /**
         * Start to uninstall
@@ -176,19 +252,20 @@ public class ViewController {
         */
        public boolean uninstall(List<String> uninstallList, IIMProgressMonitor monitor) {
                Log.log("ViewController Uninstall Start => " + uninstallList);
-               if (mPackageManager2 == null || uninstallList.size() == 0) {
+               if (packageManager == null || uninstallList.size() == 0) {
                        Log.err("ViewController.uninstall() uninstalllist does not exist. => " + uninstallList);
                        ErrorController.setError(ErrorCode.ERROR);
                        return false;
                }
 
-               if (uninstallList.size() == 1 && uninstallList.get(0).equals(Config.SDK_NAME)) {
+               if (Options.doRemoveOldSDK || (uninstallList.size() == 1 && uninstallList.get(0).equals(Config.SDK_NAME))) {
                        uninstallAll(monitor);
+                       return true;
+               } else {
+                       PackageSet removablePackages = packageManager.getInstalledPackagesByName(uninstallList);
+       
+                       return uninstallPackages(removablePackages, monitor);
                }
-
-               PackageSet removablePackages = mPackageManager2.getPackagesByNames(uninstallList);
-
-               return uninstallPackages(removablePackages, monitor);
        }
 
        /**
@@ -198,7 +275,7 @@ public class ViewController {
         * @return If removable packages can success to uninstall, return true. if not return false.
         */
        public boolean uninstallPackages(PackageSet removableMetapkgs, IIMProgressMonitor monitor) {
-               boolean bRet = mInstallManager.removePackages(removableMetapkgs, monitor);
+               boolean bRet = installManager.removePackages(removableMetapkgs, monitor);
 
                Log.log("ViewController Uninstall End => " + bRet);
                return bRet;
@@ -210,21 +287,17 @@ public class ViewController {
         */
        public void uninstallAll(IIMProgressMonitor monitor) {
                Log.log("ViewController Unintall All");
-               mInstallManager.removeAll(monitor);
+               installManager.removeAll(monitor);
                Registry.removeRegistry();
        }
 
        /**
         * Get package version that is installed already.
-        * @param pkg is installed packages already.
+        * @param pkgName is installed packages already.
         * @return version
         */
-       public String getInstalledVersion(Package2 pkg) {
-               if (pkg == null) {
-                       return null;
-               }
-
-               return mPackageManager2.getInstalledVersion(pkg);
+       public Package getInstalledPackage(String pkgName) {
+               return packageManager.getInstalledPackageByName(pkgName);
        }
 
        /**
@@ -233,8 +306,8 @@ public class ViewController {
         * @return size
         */
        public long getTotalSizeWithDepends(String packageName) {
-               Package2 pkg = mPackageManager2.getPackagesByName(packageName);
-               return getTotalSizeWithDepends(pkg);
+               Package pkg = packageManager.getPackageByName(packageName);
+               return getInstallablePackagesSize(pkg);
        }
 
        /**
@@ -243,7 +316,7 @@ public class ViewController {
         * @return size
         */
        public long getTotalSizeWithDepends(Collection<String> pkgList) {
-               PackageSet pkgSet = mPackageManager2.getPackagesByNames(pkgList);
+               PackageSet pkgSet = packageManager.getPackagesByNames(pkgList);
                return getTotalSizeWithDepends(pkgSet);
        }
 
@@ -252,8 +325,17 @@ public class ViewController {
         * @param pkg is package format.
         * @return size
         */
-       public long getTotalSizeWithDepends(Package2 pkg) {
-               return mPackageManager2.getTotalSizeWithDepends(pkg);
+       public long getInstallablePackagesSize(Package pkg) {
+               return packageManager.getTotalSizeOfInstallablePackages(pkg);
+       }
+       
+       /**
+        * Get total size depends on a package format.
+        * @param pkg is package format.
+        * @return size
+        */
+       public long getRemovablePackagesSize(Package pkg) {
+               return packageManager.getTotalSizeOfRemovablePackages(pkg);
        }
 
        /**
@@ -262,7 +344,7 @@ public class ViewController {
         * @return size
         */
        public long getTotalSizeWithDepends(PackageSet pkgs) {
-               return mPackageManager2.getTotalSizeWithDepends(pkgs);
+               return packageManager.getTotalSizeOfInstallablePackages(pkgs);
        }
 
        /**
@@ -286,7 +368,11 @@ public class ViewController {
         * @return There are packages to install or remove, return true. if not false.
         */
        public boolean existInstallableOrUpdatablePackages() {
-               return (getInstallableOrUpdatableMetaPackages().size() > 0);
+               if (Options.snapshot || Config.fromWhere == Config.ConfDialog.LOCAL_IMAGE) {
+                       return (getInstallablePackageListInSnapshot().size() > 0);
+               } else {
+                       return (getInstallableOrUpdatableMetaPackages().size() > 0);
+               }
        }
 
        /**
@@ -294,7 +380,7 @@ public class ViewController {
         * @return configure object.
         */
        public Config getConfig() {
-               return mInstallManager.getConfig();
+               return installManager.getConfig();
        }
 
        /**
@@ -303,7 +389,7 @@ public class ViewController {
         * @return decription of package.
         */
        public String getDescription(String pkgName) {
-               Package2 pkg = mPackageManager2.getPackagesByName(pkgName);
+               Package pkg = packageManager.getPackageByName(pkgName);
 
                if (pkg == null) {
                        return "";
@@ -339,4 +425,15 @@ public class ViewController {
        public void removeTargetPath(String targetPath) {
                PathUtil.remove(targetPath);
        }
+       
+       /**
+        * save information of server.
+        * @param repository Base-repository of sdk. if repository is null, it do not save repository.
+        * @param type type of repository. if type is null, it do not save type.
+        * @param packageServer package server of sdk. if packageServer is null, it do not save packageServer.
+        * @param packageType set ServerType.snapshot or ServerType.package. if serverType is null, it do not save serverType.
+        */
+       public void saveConfiguration(String repository, String distribution, ServerType packageType, String snapshotPath) {
+               Config.getInstance().saveConfiguration(repository, distribution,  packageType, snapshotPath);
+       }
 }