PKGMGR: Supported repository priority 97/13297/1
authordonghyuk.yang <donghyuk.yang@samsung.com>
Tue, 3 Dec 2013 06:37:22 +0000 (15:37 +0900)
committerdonghyuk.yang <donghyuk.yang@samsung.com>
Tue, 3 Dec 2013 06:37:22 +0000 (15:37 +0900)
If repositories have duplicated packages, priority for repositories is
needed.

Change-Id: I1a9d8e69c8daf30e074aaa8f7adf6a98ce592719
Signed-off-by: donghyuk.yang <donghyuk.yang@samsung.com>
20 files changed:
org.tizen.nativeplatform/icons/list-movedown.gif [new file with mode: 0644]
org.tizen.nativeplatform/icons/list-moveup.gif [new file with mode: 0644]
org.tizen.nativeplatform/src/org/tizen/nativeplatform/coredump/CoredumpPreprocessor.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/launch/wizards/PlatformCoredumpLaunchWizard.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/pkg/commander/IPkgCommander.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/pkg/commander/rpm/RpmCommanderCommon.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/pkg/tools/ZypperXmlParser.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/pkgmgr/PkgMgrInitializer.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/pkgmgr/ui/BuildsystemTab.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/pkgmgr/ui/CommonTab.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/pkgmgr/ui/DeviceTab.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/pkgmgr/ui/PkgMgrUIMessages.properties
org.tizen.nativeplatform/src/org/tizen/nativeplatform/repo/commander/LocalRepoMounter.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/repo/commander/RepoManager.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/repo/model/Repository.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/rootstrap/BaseFileSystemGenerator.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/rootstrap/RootstrapManager.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/rootstrap/XMLPluginGenerator.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/views/model/PlatformRootstrap.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/views/ui/RootstrapView.java

diff --git a/org.tizen.nativeplatform/icons/list-movedown.gif b/org.tizen.nativeplatform/icons/list-movedown.gif
new file mode 100644 (file)
index 0000000..572933e
Binary files /dev/null and b/org.tizen.nativeplatform/icons/list-movedown.gif differ
diff --git a/org.tizen.nativeplatform/icons/list-moveup.gif b/org.tizen.nativeplatform/icons/list-moveup.gif
new file mode 100644 (file)
index 0000000..768c5c1
Binary files /dev/null and b/org.tizen.nativeplatform/icons/list-moveup.gif differ
index a7ba5df..787d236 100644 (file)
@@ -11,6 +11,7 @@ import org.tizen.nativeplatform.pkg.commander.IPkgCommander.TOOL;
 import org.tizen.nativeplatform.pkg.commander.PkgCommandTarget;
 import org.tizen.nativeplatform.pkg.model.PkgStatus;
 import org.tizen.nativeplatform.pkgmgr.PkgMgrInitializer;
+import org.tizen.nativeplatform.repo.model.Repository;
 import org.tizen.nativeplatform.rootstrap.RootstrapManager;
 import org.tizen.nativeplatform.types.CmdTargetTypes;
 import org.tizen.nativeplatform.types.PkgInstallTypes;
@@ -86,7 +87,7 @@ public class CoredumpPreprocessor {
         return false;
     }
 
-    public PlatformRootstrap generateRootstrap(String name, String arch, Map<String, String> repos,
+    public PlatformRootstrap generateRootstrap(String name, String arch, List<Repository> repos,
             IProgressMonitor monitor) throws InterruptedException {
         resetLogAndMessage();
         PlatformRootstrap newRootstrap = null;
index a2e47e0..30a31b0 100644 (file)
@@ -32,7 +32,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
-import java.util.Map;
 
 import org.eclipse.cdt.managedbuilder.core.IConfiguration;
 import org.eclipse.core.resources.IProject;
@@ -50,13 +49,14 @@ import org.slf4j.LoggerFactory;
 import org.tizen.nativecommon.build.SmartBuildInterface;
 import org.tizen.nativeplatform.build.PlatformConfigurationManager;
 import org.tizen.nativeplatform.coredump.CoredumpPreprocessor;
-import org.tizen.nativeplatform.coredump.model.CoredumpModel;
 import org.tizen.nativeplatform.coredump.model.CallStackVO;
+import org.tizen.nativeplatform.coredump.model.CoredumpModel;
 import org.tizen.nativeplatform.launch.wizard.pages.PlatformLaunchSettingCorePage;
 import org.tizen.nativeplatform.launch.wizard.pages.PlatformLaunchSettingDepPkgPage;
 import org.tizen.nativeplatform.launch.wizard.pages.PlatformLaunchSettingRootstrapPage;
 import org.tizen.nativeplatform.pkg.commander.PkgCommandTarget;
 import org.tizen.nativeplatform.repo.commander.RepoManager;
+import org.tizen.nativeplatform.repo.model.Repository;
 import org.tizen.nativeplatform.rootstrap.RootstrapManager;
 import org.tizen.nativeplatform.types.PkgTypes;
 import org.tizen.nativeplatform.util.GBSArchitectureChecker;
@@ -184,7 +184,7 @@ public class PlatformCoredumpLaunchWizard extends PlatformLaunchWizard {
                     // select new rootstrap
                 } else {
                     List<String> repoList = rootstrapPage.getRepositryList();
-                    final Map<String, String> repos = RepoManager.createRepeHashMap(repoList);
+                    final List<Repository> repos = RepoManager.createRepoList(repoList);
                     final String rootstrapName = rootstrapPage.getRootstrapName();
                     final String rootstrapArch = GBSArchitectureChecker
                             .changeToSupportedArchitecture(rootstrapPage.getArch());
index 8393abe..74137ff 100644 (file)
@@ -34,6 +34,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.tizen.nativeplatform.pkg.model.PkgInfo;
 import org.tizen.nativeplatform.pkg.model.PkgStatus;
 import org.tizen.nativeplatform.pkgmgr.PackageManagerOuputReceiver;
+import org.tizen.nativeplatform.repo.model.Repository;
 import org.tizen.nativeplatform.types.CmdTargetTypes;
 import org.tizen.nativeplatform.types.PkgInstallTypes;
 
@@ -95,7 +96,7 @@ public interface IPkgCommander {
 
     Map<String, PkgStatus> getWhatProvides(String capability);
 
-    Map<String, String> getRepoList();
+    List<Repository> getRepoList();
 
     ICommandStatus upgrade(IProgressMonitor monitor);
 
index df07aed..b1d969e 100644 (file)
@@ -35,13 +35,10 @@ import java.util.Map;
 import java.util.Map.Entry;
 
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jgit.util.FileUtils;
 import org.eclipse.ui.console.MessageConsoleStream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.tizen.common.ui.view.console.ConsoleManager;
-import org.tizen.common.util.FileUtil;
 import org.tizen.nativeplatform.pkg.commander.ICommandStatus;
 import org.tizen.nativeplatform.pkg.commander.IPkgCommander;
 import org.tizen.nativeplatform.pkg.model.Package;
@@ -52,7 +49,7 @@ import org.tizen.nativeplatform.pkg.tools.RpmTool;
 import org.tizen.nativeplatform.pkg.tools.ZypperTool;
 import org.tizen.nativeplatform.pkg.tools.ZypperXmlParser;
 import org.tizen.nativeplatform.pkgmgr.PackageManagerOuputReceiver;
-import org.tizen.nativeplatform.rds.CachePackageChecksum;
+import org.tizen.nativeplatform.repo.model.Repository;
 import org.tizen.nativeplatform.types.PkgInstallTypes;
 import org.tizen.nativeplatform.util.CharacterStripper;
 import org.tizen.nativeplatform.util.CommandLauncher;
@@ -729,8 +726,8 @@ public abstract class RpmCommanderCommon implements IPkgCommander {
         return pkgMap;
     }
 
-    public Map<String, String> getRepoList() {
-        Map<String, String> result = new HashMap<String, String>();
+    public List<Repository> getRepoList() {
+        List<Repository> result = new ArrayList<Repository>();
         if (!checkPkgInstalled(ZypperTool.NAME)) {
             printResultLog("Failed to get repository list. \"zypper\" package is not installed");
             return result;
@@ -754,12 +751,11 @@ public abstract class RpmCommanderCommon implements IPkgCommander {
         }
         if (result != null) {
             printResultLog(String.format("Get repository list: %d", result.size()));
-            printResultLog(result.toString());
+            //printResultLog(result.toString());
         } else {
             printResultLog("Failed to get repository list");
         }
         return result;
-
     }
 
     public ICommandStatus refreshRepoListXmlOut() {
index b9ccbe1..a04887b 100644 (file)
@@ -2,7 +2,9 @@ package org.tizen.nativeplatform.pkg.tools;
 
 import java.io.IOException;
 import java.io.StringReader;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -11,8 +13,9 @@ import javax.xml.parsers.ParserConfigurationException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.tizen.nativeplatform.pkg.model.PkgStatus;
 import org.tizen.nativeplatform.pkg.model.Package;
+import org.tizen.nativeplatform.pkg.model.PkgStatus;
+import org.tizen.nativeplatform.repo.model.Repository;
 import org.tizen.nativeplatform.types.PkgInstallTypes;
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
@@ -156,10 +159,10 @@ public class ZypperXmlParser {
         return pkgMap;
     }
 
-    public Map<String, String> getRepoList() {
-        Map<String, String> repoMap = new HashMap<String, String>();
+    public List<Repository> getRepoList() {
+        List<Repository> repoList = new ArrayList<Repository>();
         if (doc == null) {
-            return repoMap;
+            return repoList;
         }
 
         doc.getDocumentElement().normalize();
@@ -184,12 +187,10 @@ public class ZypperXmlParser {
                     break;
                 }
             }
-
-            repoMap.put(alias, url);
+            Repository repo = new Repository(alias, url);
+            repoList.add(repo);
         }
-
-        return repoMap;
-
+        return repoList;
     }
 
     public Map<String, PkgStatus> getWhatProvideList() {
index bb27d21..552ad70 100644 (file)
@@ -27,8 +27,7 @@
 
 package org.tizen.nativeplatform.pkgmgr;
 
-import java.util.Map;
-import java.util.Map.Entry;
+import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.tizen.nativeplatform.pkg.commander.IPkgCommander;
@@ -82,12 +81,20 @@ public class PkgMgrInitializer {
     public void initDeviceRepoInfo() {
         if (isSetDevice()) {
             RepositoryProvider.INSTANCE.getDeviceRepos().clear();
-            Map<String, String> list = dvCommander.getRepoList();
-            for (Entry<String, String> e : list.entrySet()) {
-                String name = e.getKey();
-                String url = e.getValue();
-                RepositoryProvider.INSTANCE.getDeviceRepos().add(new Repository(name, url));
+            List<Repository> list = dvCommander.getRepoList();
+            RepositoryProvider.INSTANCE.getDeviceRepos().addAll(list);
+        }
+    }
+
+    public void initDeviceRepoInfo(List<Repository> repositories) {
+        if (isSetDevice()) {
+            dvCommander.resetRepo();
+            int idx = 0;
+            for (Repository repo : repositories) {
+                String name = String.format("url%d", idx++);
+                dvCommander.addRepo(name, repo.getUri());
             }
+            initDeviceRepoInfo();
         }
     }
 
@@ -125,12 +132,14 @@ public class PkgMgrInitializer {
 
     public void fastInitData(IProgressMonitor monitor) throws InterruptedException {
         if (isSetRootstrap()) {
-            Map<String, String> reposMap = rootstrap.getRepoMap();
-            Map<String, String> list = target.getCommander(CmdTargetTypes.ROOTSTRAP).getRepoList();
+            List<Repository> sourceList = rootstrap.getRepoList();
+            List<Repository> targetList = target.getCommander(CmdTargetTypes.ROOTSTRAP)
+                    .getRepoList();
             boolean needReset = true;
-            if (reposMap.size() == list.size()) {
-                for (String repo : list.values()) {
-                    if (reposMap.get(repo) == null) {
+            if (sourceList.size() == targetList.size()) {
+                for (Repository repo : targetList) {
+                    String url = repo.getUri();
+                    if (!rootstrap.containRepository(url)) {
                         needReset = true;
                         break;
                     } else {
index 2703d74..5db3c95 100644 (file)
@@ -76,6 +76,12 @@ public class BuildsystemTab extends CommonTab {
             return false;
         }
         String url = dialog.getRepositoryURL();
+        Repository repo = target.getRootstrap().getRepository(url);
+        if (repo != null) {
+            DialogUtil.openMessageDialog(
+                    String.format(resources.getString("PkgMgr.Msg.Repo.Exists"), repo.getName()));
+            return false;
+        }
         target.getRootstrap().addRepoURL(url);
         return true;
     }
@@ -87,17 +93,28 @@ public class BuildsystemTab extends CommonTab {
             return false;
         }
 
-        Repository repos = (Repository) repoViewer.getTable().getItem(selectedIdx).getData();
+        Repository selectedRepository = (Repository) repoViewer.getTable().getItem(selectedIdx)
+                .getData();
         ModifyRepoDialog dialog = new ModifyRepoDialog(shell,
-                resources.getString("PkgMgr.Tab.Buildsystem"), repos.getName(), repos.getUri(),
-                true);
+                resources.getString("PkgMgr.Tab.Buildsystem"), selectedRepository.getName(),
+                selectedRepository.getUri(), true);
 
         if (dialog.open() != ModifyRepoDialog.OK) {
             return false;
         }
 
         if (dialog.isDirty()) {
-            target.getRootstrap().changeRepoURL(repos.getUri(), dialog.getRepositoryURL());
+            String newUrl = dialog.getRepositoryURL();
+            Repository repo = target.getRootstrap().getRepository(newUrl);
+            if (repo != null) {
+                DialogUtil
+                        .openMessageDialog(
+                        String.format(resources.getString("PkgMgr.Msg.Repo.Exists"), repo.getName()));
+                return false;
+            } else {
+                return target.getRootstrap().modifyRepoURL(selectedRepository.getUri(),
+                        dialog.getRepositoryURL());
+            }
         }
         return true;
     }
@@ -108,11 +125,34 @@ public class BuildsystemTab extends CommonTab {
             DialogUtil.openMessageDialog(resources.getString("PkgMgr.Message.Select.OnePackage"));
             return false;
         }
-        Repository repos = (Repository) repoViewer.getTable().getItem(selectedIdx).getData();
-        target.getRootstrap().removeRepoURL(repos.getUri());
+        Repository selectedRepository = (Repository) repoViewer.getTable().getItem(selectedIdx)
+                .getData();
+        target.getRootstrap().removeRepoURL(selectedRepository.getUri());
         return true;
     }
 
+    protected boolean handleMoveupRepositoryButton() {
+        int selectedIdx = repoViewer.getTable().getSelectionIndex();
+        if (selectedIdx == -1) {
+            DialogUtil.openMessageDialog(resources.getString("PkgMgr.Message.Select.OnePackage"));
+            return false;
+        }
+        Repository selectedRepository = (Repository) repoViewer.getTable().getItem(selectedIdx)
+                .getData();
+        return target.getRootstrap().moveupRepository(selectedRepository.getUri());
+    }
+
+    protected boolean handleMovedownRepositoryButton() {
+        int selectedIdx = repoViewer.getTable().getSelectionIndex();
+        if (selectedIdx == -1) {
+            DialogUtil.openMessageDialog(resources.getString("PkgMgr.Message.Select.OnePackage"));
+            return false;
+        }
+        Repository selectedRepository = (Repository) repoViewer.getTable().getItem(selectedIdx)
+                .getData();
+        return target.getRootstrap().movedownRepository(selectedRepository.getUri());
+    }
+
     protected void handleUpgradeButton() {
         ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
 
index bf8559d..dd3f453 100644 (file)
@@ -135,6 +135,10 @@ abstract public class CommonTab {
 
     abstract protected boolean handleRemoveRepositoryButton();
 
+    abstract protected boolean handleMoveupRepositoryButton();
+
+    abstract protected boolean handleMovedownRepositoryButton();
+
     abstract protected void handleUpgradeButton();
 
     abstract protected List<PkgStatus> getPackageList();
@@ -261,7 +265,7 @@ abstract public class CommonTab {
         Group grpRepo = new Group(parent, SWT.NONE);
         grpRepo.setText(resources.getString("PkgMgr.Frame.Respository"));
         GridData repo_gd = new GridData(GridData.FILL_HORIZONTAL);
-        repo_gd.heightHint = 150;
+        repo_gd.heightHint = 180;
         grpRepo.setLayoutData(repo_gd);
         grpRepo.setLayout(new GridLayout(2, false));
 
@@ -288,7 +292,7 @@ abstract public class CommonTab {
     private void createColumnsForRepoTable(Composite parent) {
         String[] titles = { resources.getString("PkgMgr.Repo.Table.Column.1"),
                 resources.getString("PkgMgr.Repo.Table.Column.2") };
-        int[] bounds = { 100, 850 };
+        int[] bounds = { 100, 900 };
 
         SelectionAdapter adapter = new RepoTableSelectionAdapter(repoViewer);
         TableViewerColumn colName = createTableViewerColumn(repoViewer, adapter, titles[0],
@@ -346,8 +350,31 @@ abstract public class CommonTab {
 
             @Override
             public void mouseDown(MouseEvent e) {
+                ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
                 if (handleAddRepositoryButton()) {
-                    updateRepositoryInfo();
+                    try {
+                        dialog.run(true, false, new IRunnableWithProgress() {
+                            @Override
+                            public void run(IProgressMonitor monitor)
+                                    throws InvocationTargetException,
+                                    InterruptedException {
+                                monitor.beginTask("Add repository", -1);
+                                try {
+                                    updateRepositoryInfo();
+                                } finally {
+                                    monitor.done();
+                                }
+                            }
+                        });
+                    } catch (InvocationTargetException e1) {
+                        DialogUtil.openErrorDialog(resources.getString("PkgMgr.Msg.Error.Addrepo")
+                                + "("
+                                + e1.toString() + ")");
+                    } catch (InterruptedException e1) {
+                        DialogUtil.openErrorDialog(resources.getString("PkgMgr.Msg.Error.Addrepo")
+                                + "("
+                                + e1.toString() + ")");
+                    }
                     repoViewer.refresh();
                 }
             }
@@ -358,6 +385,52 @@ abstract public class CommonTab {
 
         });
 
+        Button remove_bt = new Button(composite, SWT.PUSH);
+        Image removeIcon = ImageUtil.getImage(Activator.PLUGIN_ID, "icons/rootstrap/remove.gif");
+        remove_bt.setImage(removeIcon);
+        remove_bt.setToolTipText(resources.getString("PkgMgr.Button.RemoveRepo.Tooltip"));
+        remove_bt.addMouseListener(new MouseListener() {
+
+            @Override
+            public void mouseDoubleClick(MouseEvent e) {
+            }
+
+            @Override
+            public void mouseDown(MouseEvent e) {
+                ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
+                if (handleRemoveRepositoryButton()) {
+                    try {
+                        dialog.run(true, false, new IRunnableWithProgress() {
+                            @Override
+                            public void run(IProgressMonitor monitor)
+                                    throws InvocationTargetException,
+                                    InterruptedException {
+                                monitor.beginTask("Remove repository", -1);
+                                try {
+                                    updateRepositoryInfo();
+                                } finally {
+                                    monitor.done();
+                                }
+                            }
+                        });
+                    } catch (InvocationTargetException e1) {
+                        DialogUtil.openErrorDialog(resources
+                                .getString("PkgMgr.Msg.Error.Removerepo") + "("
+                                + e1.toString() + ")");
+                    } catch (InterruptedException e1) {
+                        DialogUtil.openErrorDialog(resources
+                                .getString("PkgMgr.Msg.Error.Removerepo") + "("
+                                + e1.toString() + ")");
+                    }
+                    repoViewer.refresh();
+                }
+            }
+
+            @Override
+            public void mouseUp(MouseEvent e) {
+            }
+        });
+
         Button modify_bt = new Button(composite, SWT.PUSH);
         Image modifyIcon = ImageUtil.getImage(Activator.PLUGIN_ID, "icons/rootstrap/edit.gif");
         modify_bt.setImage(modifyIcon);
@@ -370,8 +443,31 @@ abstract public class CommonTab {
 
             @Override
             public void mouseDown(MouseEvent e) {
+                ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
                 if (handleModifyRepositoryButton()) {
-                    updateRepositoryInfo();
+                    try {
+                        dialog.run(true, false, new IRunnableWithProgress() {
+                            @Override
+                            public void run(IProgressMonitor monitor)
+                                    throws InvocationTargetException,
+                                    InterruptedException {
+                                monitor.beginTask("Modify repository", -1);
+                                try {
+                                    updateRepositoryInfo();
+                                } finally {
+                                    monitor.done();
+                                }
+                            }
+                        });
+                    } catch (InvocationTargetException e1) {
+                        DialogUtil.openErrorDialog(resources
+                                .getString("PkgMgr.Msg.Error.Modifyrepo") + "("
+                                + e1.toString() + ")");
+                    } catch (InterruptedException e1) {
+                        DialogUtil.openErrorDialog(resources
+                                .getString("PkgMgr.Msg.Error.Modifyrepo") + "("
+                                + e1.toString() + ")");
+                    }
                     repoViewer.refresh();
                 }
             }
@@ -381,11 +477,11 @@ abstract public class CommonTab {
             }
         });
 
-        Button remove_bt = new Button(composite, SWT.PUSH);
-        Image removeIcon = ImageUtil.getImage(Activator.PLUGIN_ID, "icons/rootstrap/remove.gif");
-        remove_bt.setImage(removeIcon);
-        remove_bt.setToolTipText(resources.getString("PkgMgr.Button.RemoveRepo.Tooltip"));
-        remove_bt.addMouseListener(new MouseListener() {
+        Button moveup_bt = new Button(composite, SWT.PUSH);
+        Image moveupIcon = ImageUtil.getImage(Activator.PLUGIN_ID, "icons/list-moveup.gif");
+        moveup_bt.setImage(moveupIcon);
+        moveup_bt.setToolTipText(resources.getString("PkgMgr.Button.MoverepoUp.Tooltip"));
+        moveup_bt.addMouseListener(new MouseListener() {
 
             @Override
             public void mouseDoubleClick(MouseEvent e) {
@@ -393,8 +489,77 @@ abstract public class CommonTab {
 
             @Override
             public void mouseDown(MouseEvent e) {
-                if (handleRemoveRepositoryButton()) {
-                    updateRepositoryInfo();
+                ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
+                if (handleMoveupRepositoryButton()) {
+                    try {
+                        dialog.run(true, false, new IRunnableWithProgress() {
+                            @Override
+                            public void run(IProgressMonitor monitor)
+                                    throws InvocationTargetException,
+                                    InterruptedException {
+                                monitor.beginTask("Move repository up", -1);
+                                try {
+                                    updateRepositoryInfo();
+                                } finally {
+                                    monitor.done();
+                                }
+                            }
+                        });
+                    } catch (InvocationTargetException e1) {
+                        DialogUtil.openErrorDialog(resources
+                                .getString("PkgMgr.Msg.Error.MoverepoUp") + "("
+                                + e1.toString() + ")");
+                    } catch (InterruptedException e1) {
+                        DialogUtil.openErrorDialog(resources
+                                .getString("PkgMgr.Msg.Error.MoverepoUp") + "("
+                                + e1.toString() + ")");
+                    }
+                    repoViewer.refresh();
+                }
+            }
+
+            @Override
+            public void mouseUp(MouseEvent e) {
+            }
+        });
+
+        Button movedown_bt = new Button(composite, SWT.PUSH);
+        Image movedownIcon = ImageUtil.getImage(Activator.PLUGIN_ID, "icons/list-movedown.gif");
+        movedown_bt.setImage(movedownIcon);
+        movedown_bt.setToolTipText(resources.getString("PkgMgr.Button.MoverepoDown.Tooltip"));
+        movedown_bt.addMouseListener(new MouseListener() {
+
+            @Override
+            public void mouseDoubleClick(MouseEvent e) {
+            }
+
+            @Override
+            public void mouseDown(MouseEvent e) {
+                ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
+                if (handleMovedownRepositoryButton()) {
+                    try {
+                        dialog.run(true, false, new IRunnableWithProgress() {
+                            @Override
+                            public void run(IProgressMonitor monitor)
+                                    throws InvocationTargetException,
+                                    InterruptedException {
+                                monitor.beginTask("Move repository down", -1);
+                                try {
+                                    updateRepositoryInfo();
+                                } finally {
+                                    monitor.done();
+                                }
+                            }
+                        });
+                    } catch (InvocationTargetException e1) {
+                        DialogUtil.openErrorDialog(resources
+                                .getString("PkgMgr.Msg.Error.MoverepoDown") + "("
+                                + e1.toString() + ")");
+                    } catch (InterruptedException e1) {
+                        DialogUtil.openErrorDialog(resources
+                                .getString("PkgMgr.Msg.Error.MoverepoDown") + "("
+                                + e1.toString() + ")");
+                    }
                     repoViewer.refresh();
                 }
             }
index c65d4d6..36d9b7e 100644 (file)
@@ -27,8 +27,8 @@
 
 package org.tizen.nativeplatform.pkgmgr.ui;
 
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.eclipse.swt.widgets.Shell;
@@ -46,10 +46,13 @@ import org.tizen.nativeplatform.types.CmdTargetTypes;
 public class DeviceTab extends CommonTab {
 
     private PkgCommandTarget target = null;
+    private List<Repository> repositories = new ArrayList<Repository>();
 
     public DeviceTab(Shell shell, TabFolder folder, PkgCommandTarget target) {
         super(shell, folder, target.getCommander(CmdTargetTypes.DEVICE));
         this.target = target;
+        repositories.clear();
+        repositories.addAll(getRepositoryList());
     }
 
     protected CopyOnWriteArrayList<Repository> getRepositoryList() {
@@ -57,9 +60,21 @@ public class DeviceTab extends CommonTab {
     }
 
     public void updateRepositoryInfo() {
-        // initializeRepositoryInfo(device);
         PkgMgrInitializer initializer = new PkgMgrInitializer(target);
-        initializer.initDeviceRepoInfo();
+        initializer.initDeviceRepoInfo(repositories);
+    }
+
+    public boolean resetRepositoryInfo() {
+        commander.resetRepo();
+        int idx = 0;
+        for (Repository repo : repositories) {
+            String name = String.format("url%d", idx++);
+            ICommandStatus status = commander.addRepo(name, repo.getUri());
+            if (!status.isOk()) {
+                return false;
+            }
+        }
+        return true;
     }
 
     public void createTab() {
@@ -68,12 +83,17 @@ public class DeviceTab extends CommonTab {
     }
 
     private String findUrlName() {
-        Map<String, String> list = commander.getRepoList();
         int idx = 0;
         String name = "";
-        for (idx = 0; idx < list.size(); idx++) {
+        for (idx = 0; idx < repositories.size(); idx++) {
             name = String.format("url%d", idx);
-            if (!list.containsKey(name)) {
+            boolean exists = false;
+            for (Repository repo : repositories) {
+                if (repo.getName().equals(name)) {
+                    exists = true;
+                }
+            }
+            if (!exists) {
                 return name;
             }
         }
@@ -82,7 +102,6 @@ public class DeviceTab extends CommonTab {
     }
 
     protected boolean handleAddRepositoryButton() {
-
         AddRepoDialog dialog = new AddRepoDialog(shell,
                 resources.getString("PkgMgr.Tab.Buildsystem"), false);
         if (dialog.open() != AddRepoDialog.OK) {
@@ -90,10 +109,17 @@ public class DeviceTab extends CommonTab {
         }
         String name = findUrlName();
         String url = dialog.getRepositoryURL();
-        ICommandStatus status = commander.addRepo(name, url);
-        if (!status.isOk()) {
-            return false;
+        // check to exist repository
+        for (Repository repo : repositories) {
+            if (repo.getUri().equals(url)) {
+                DialogUtil
+                        .openMessageDialog(
+                        String.format(resources.getString("PkgMgr.Msg.Repo.Exists"), repo.getName()));
+                return false;
+            }
         }
+        // add a new repository
+        repositories.add(new Repository(name, url));
         return true;
     }
 
@@ -104,34 +130,108 @@ public class DeviceTab extends CommonTab {
             return false;
         }
 
-        Repository repos = (Repository) repoViewer.getTable().getItem(selectedIdx).getData();
+        Repository selectedRepository = (Repository) repoViewer.getTable().getItem(selectedIdx)
+                .getData();
         ModifyRepoDialog dialog = new ModifyRepoDialog(shell,
-                resources.getString("PkgMgr.Tab.Device"), repos.getName(), repos.getUri(), false);
+                resources.getString("PkgMgr.Tab.Device"), selectedRepository.getName(),
+                selectedRepository.getUri(), false);
         if (dialog.open() != ModifyRepoDialog.OK) {
             return false;
         }
-        ICommandStatus status = commander.removeRepo(repos.getName());
-        if (!status.isOk()) {
+        String newUrl = dialog.getRepositoryURL();
+        // check to exist repository
+        for (Repository repo : repositories) {
+            if (repo.getUri().equals(newUrl)) {
+                DialogUtil
+                        .openMessageDialog(
+                        String.format(resources.getString("PkgMgr.Msg.Repo.Exists"), repo.getName()));
+                return false;
+            }
+        }
+        // modify the repository
+        for (Repository repo : repositories) {
+            if (selectedRepository.getUri().equals(repo.getUri())) {
+                repo.setUri(newUrl);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    protected boolean handleRemoveRepositoryButton() {
+        int selectedIdx = repoViewer.getTable().getSelectionIndex();
+        if (selectedIdx == -1) {
+            DialogUtil.openMessageDialog(resources.getString("PkgMgr.Message.Select.OnePackage"));
             return false;
         }
-        status = commander.addRepo(dialog.getRepositoryName(), dialog.getRepositoryURL());
-        if (!status.isOk()) {
+        Repository selectedRepository = (Repository) repoViewer.getTable().getItem(selectedIdx)
+                .getData();
+        int idx = 0;
+        boolean found = false;
+        // find target repository
+        for (Repository repo : repositories) {
+            if (selectedRepository.getUri().equals(repo.getUri())) {
+                found = true;
+                break;
+            }
+            idx++;
+        }
+        if (found) {
+            repositories.remove(idx);
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    protected boolean handleMoveupRepositoryButton() {
+        int selectedIdx = repoViewer.getTable().getSelectionIndex();
+        if (selectedIdx == -1) {
+            DialogUtil.openMessageDialog(resources.getString("PkgMgr.Message.Select.OnePackage"));
             return false;
         }
+        Repository selectedRepository = (Repository) repoViewer.getTable().getItem(selectedIdx)
+                .getData();
+        int idx = 0;
+        Repository targetRepository = null;
+        for (Repository repo : repositories) {
+            if (selectedRepository.getUri().equals(repo.getUri())) {
+                targetRepository = repo;
+                break;
+            }
+            idx++;
+        }
+        if (idx <= 0) {
+            return false;
+        }
+        repositories.add(idx - 1, targetRepository);
+        repositories.remove(idx + 1);
         return true;
     }
 
-    protected boolean handleRemoveRepositoryButton() {
+    protected boolean handleMovedownRepositoryButton() {
         int selectedIdx = repoViewer.getTable().getSelectionIndex();
         if (selectedIdx == -1) {
             DialogUtil.openMessageDialog(resources.getString("PkgMgr.Message.Select.OnePackage"));
             return false;
         }
-        Repository repos = (Repository) repoViewer.getTable().getItem(selectedIdx).getData();
-        ICommandStatus status = commander.removeRepo(repos.getName());
-        if (!status.isOk()) {
+        Repository selectedRepository = (Repository) repoViewer.getTable().getItem(selectedIdx)
+                .getData();
+        int idx = 0;
+        int maxIdx = repositories.size() - 1;
+        Repository targetRepository = null;
+        for (Repository repo : repositories) {
+            if (selectedRepository.getUri().equals(repo.getUri())) {
+                targetRepository = repo;
+                break;
+            }
+            idx++;
+        }
+        if (idx >= maxIdx) {
             return false;
         }
+        repositories.add(idx + 2, targetRepository);
+        repositories.remove(idx);
         return true;
     }
 
index 80bc88e..a244145 100644 (file)
@@ -17,7 +17,9 @@ PkgMgr.Button.AddRepo.Tooltip = Add a repository
 PkgMgr.Button.ModifyRepo = Modify
 PkgMgr.Button.ModifyRepo.Tooltip = Modify a repository
 PkgMgr.Button.RemoveRepo = Remove
-PkgMgr.Button.RemoveRepo.Tooltip = Remove the selected repositories
+PkgMgr.Button.RemoveRepo.Tooltip = Remove the selected repository
+PkgMgr.Button.MoverepoUp.Tooltip = Move the selected repository up
+PkgMgr.Button.MoverepoDown.Tooltip = Move the selected repository down
 PkgMgr.Button.RefreshRepo = Refresh
 PkgMgr.Button.RefreshRepo.Tooltip = Refresh remote package information
 PkgMgr.Button.Upgrade = Upgrade
@@ -61,6 +63,12 @@ PkgMgr.Repo.Table.Column.2 = Repository URL
 PkgMgr.Msg.Error.Failed.Mount = Failed to mount local repository!
 PkgMgr.Msg.Error.Display.PkgProp = Failed to get package information!
 PkgMgr.Msg.Upgrade.Notsupported = Upgrading is not supported yet.
+PkgMgr.Msg.Repo.Exists = The repository exists [%s]
+PkgMgr.Msg.Error.Addrepo = Failed to add repository
+PkgMgr.Msg.Error.Removerepo = Failed to remove repository
+PkgMgr.Msg.Error.Modifyrepo = Failed to modify repository
+PkgMgr.Msg.Error.MoverepoUp = Failed to move repository up
+PkgMgr.Msg.Error.MoverepoDown = Failed to move repository down
 
 Action.Msg.Progress.Initializing.PkgMgr = Initializing Package Manager...
 Action.Msg.Progress.Init.BuildSystem.Repo = Intializing repositories on build system...
index a224df7..9b4cc2a 100644 (file)
@@ -7,7 +7,6 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -15,6 +14,7 @@ import org.eclipse.core.runtime.Path;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.tizen.nativecommon.build.SmartBuildInterface;
+import org.tizen.nativeplatform.repo.model.Repository;
 import org.tizen.nativeplatform.util.CommandLauncher;
 import org.tizen.nativeplatform.views.model.PlatformRootstrap;
 
@@ -109,10 +109,10 @@ public class LocalRepoMounter {
         final String rootstrapPath = SmartBuildInterface.getInstance().getPlatformRootstrapPath(
                 rootstrap.getPath().toOSString());
 
-        Map<String, String> repos = rootstrap.getRepoMap();
-        for (Entry<String, String> e : repos.entrySet()) {
-            String url = e.getKey();
-            String type = e.getValue();
+        List<Repository> repos = rootstrap.getRepoList();
+        for (Repository repo : repos) {
+            String url = repo.getUri();
+            String type = repo.getType();
             if (RepoManager.isLocalType(type) && RepoManager.isLocalUrl(url)) {
                 IPath result = mountLocalRepository(rootstrapPath, url, monitor);
                 if (result != null) {
@@ -272,13 +272,11 @@ public class LocalRepoMounter {
      */
     public static List<IPath> umountLocalRepository(PlatformRootstrap rootstrap,
             IProgressMonitor monitor) {
-
         List<IPath> failedRepoPath = new ArrayList<IPath>();
-        Map<String, String> repos = rootstrap.getRepoMap();
-
-        for (Entry<String, String> e : repos.entrySet()) {
-            String url = e.getKey();
-            String type = e.getValue();
+        List<Repository> repos = rootstrap.getRepoList();
+        for (Repository repo : repos) {
+            String url = repo.getUri();
+            String type = repo.getType();
             if (RepoManager.isLocalType(type) && RepoManager.isLocalUrl(url)) {
                 if (!umountLocalRepository(url, monitor)) {
                     failedRepoPath.add(getMountedRepoPath(url));
index 771f370..75c8d49 100644 (file)
@@ -1,10 +1,7 @@
 package org.tizen.nativeplatform.repo.commander;
 
-import java.util.HashMap;
-import java.util.Iterator;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 
 import org.eclipse.core.runtime.IPath;
 import org.tizen.nativecommon.build.SmartBuildInterface;
@@ -61,18 +58,20 @@ public class RepoManager {
         return result;
     }
 
-    public static Map<String, String> createRepeHashMap(List<String> repos) {
-        Map<String, String> map = new HashMap<String, String>();
+    public static List<Repository> createRepoList(List<String> repos) {
+        List<Repository> repoList = new ArrayList<Repository>();
+        int idx = 0;
         for (String repo : repos) {
+            String name = String.format("url%d", idx++);
             repo = repo.trim();
             if (isLocalUrl(repo)) {
-                map.put(repo, RepoManager.LOCAL_REPO_TYPE);
+                repoList.add(new Repository(name, repo, RepoManager.LOCAL_REPO_TYPE));
             } else {
-                map.put(repo, RepoManager.REMOTE_REPO_TYPE);
+                repoList.add(new Repository(name, repo, RepoManager.REMOTE_REPO_TYPE));
             }
         }
 
-        return map;
+        return repoList;
     }
 
     public static void addReposToRootstrap(PkgCommandTarget target) {
@@ -81,10 +80,10 @@ public class RepoManager {
                 rootstrap.getPath().toOSString());
 
         int idx = 0;
-        Map<String, String> reposMap = rootstrap.getRepoMap();
-        for (Entry<String, String> e : reposMap.entrySet()) {
-            String url = e.getKey();
-            String type = e.getValue();
+        List<Repository> repos = rootstrap.getRepoList();
+        for (Repository repo : repos) {
+            String url = repo.getUri();
+            String type = repo.getType();
             String name = String.format("url%d", idx++);
             if (RepoManager.isLocalType(type) && RepoManager.isLocalUrl(url)) {
                 IPath repoPath = LocalRepoMounter.mountLocalRepository(rootstrapPath, url, null);
index 2ec2e93..4fd4e0b 100644 (file)
 package org.tizen.nativeplatform.repo.model;
 
 public class Repository {
-       private String name = "";
-       private String uri = "";
-       private boolean dirty = false;
-       private boolean checkColumn = false;
-       
-       public Repository() {
-               
-       }
-       
-       public Repository( String name, String uri ) {
-               this.name = name;
-               this.uri = uri;
-       }
-       
-       public String getName()
-       {
-               return name;
-       }
-       
-       public void setName(String name) 
-       {
-               this.name = name;
-       }
-       
-       public String getUri()
-       {
-               return uri;
-       }
-       
-       public void setUri(String uri) 
-       {
-               this.uri = uri;
-       }
-       
-       public boolean getCheckColumn()
-       {
-               return checkColumn;
-       }
-       
-       public void setCheckColumn( boolean check )
-       {
-               this.checkColumn = check;
-       }
-       
-       public boolean getCheckDirty()
-       {
-               return dirty;
-       }
-       
-       public void setCheckDirty( boolean check )
-       {
-               this.dirty = check;
-       }
+    private String name = "";
+    private String uri = "";
+    private String type = "";
+    private boolean dirty = false;
+    private boolean checkColumn = false;
+
+    public Repository() {
+    }
+
+    public Repository(String name, String uri) {
+        this.name = name;
+        this.uri = uri;
+    }
+
+    public Repository(String name, String uri, String type) {
+        this.name = name;
+        this.uri = uri;
+        this.type = type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getUri() {
+        return uri;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setUri(String uri) {
+        this.uri = uri;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public boolean getCheckColumn() {
+        return checkColumn;
+    }
+
+    public void setCheckColumn(boolean check) {
+        this.checkColumn = check;
+    }
+
+    public boolean getCheckDirty() {
+        return dirty;
+    }
+
+    public void setCheckDirty(boolean check) {
+        this.dirty = check;
+    }
 }
index 80d33b0..8b9a11b 100644 (file)
@@ -2,7 +2,6 @@ package org.tizen.nativeplatform.rootstrap;
 
 import java.io.File;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -11,6 +10,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.tizen.common.core.application.InstallPathConfig;
 import org.tizen.nativecommon.build.SmartBuildInterface;
 import org.tizen.nativeplatform.preferences.PreferencesManager;
+import org.tizen.nativeplatform.repo.model.Repository;
 import org.tizen.nativeplatform.util.CommandLauncher;
 import org.tizen.nativeplatform.util.RootstrapUtil;
 import org.tizen.nativeplatform.views.model.PlatformRootstrap;
@@ -23,7 +23,7 @@ public class BaseFileSystemGenerator {
         return latestTempRootstrap;
     }
 
-    public static boolean generate(String rootstrapPath, String arch, List<String> reposURLs,
+    public static boolean generate(String rootstrapPath, List<String> reposURLs, String arch,
             IPath confFile, IProgressMonitor monitor) throws InterruptedException {
         File rootstrapDir = new File(rootstrapPath);
         String id = rootstrapDir.getName();
@@ -86,16 +86,13 @@ public class BaseFileSystemGenerator {
     }
 
     public static boolean generate(String rootstrapPath, String arch,
-            Map<String, String> reposURLs, IPath confFile, IProgressMonitor monitor)
+            List<Repository> reposURLs, IPath confFile, IProgressMonitor monitor)
             throws InterruptedException {
         List<String> repos = new ArrayList<String>();
-        Iterator<String> keySet = reposURLs.keySet().iterator();
-
-        while (keySet.hasNext()) {
-            repos.add(keySet.next());
+        for (Repository repo : reposURLs) {
+            repos.add(repo.getUri());
         }
-
-        return generate(rootstrapPath, arch, repos, confFile, monitor);
+        return generate(rootstrapPath, repos, arch, confFile, monitor);
     }
 
     public static void remove(String id, String arch) throws InterruptedException {
index 409d099..793db56 100644 (file)
@@ -48,6 +48,7 @@ import org.tizen.nativecommon.build.model.Rootstrap;
 import org.tizen.nativecommon.build.model.SBIModel;
 import org.tizen.nativeplatform.build.PlatformConfigurationManager;
 import org.tizen.nativeplatform.repo.commander.RepoManager;
+import org.tizen.nativeplatform.repo.model.Repository;
 import org.tizen.nativeplatform.util.CommandLauncher;
 import org.tizen.nativeplatform.util.RootstrapUtil;
 import org.tizen.nativeplatform.views.model.PlatformRootstrap;
@@ -87,17 +88,19 @@ public class RootstrapManager {
                 String path = sbi.getRootstrapPathFromRootstrapID(id);
                 String version = sbi.getRootstrapVersionFromRootstrapID(id);
                 boolean isDefault = sbi.getIsDefaultFromRootstrapID(id);
-                Map<String, String> reposURLs = new HashMap<String, String>();
+                List<Repository> reposURLs = new ArrayList<Repository>();
                 String rootstrapPath = sbi.getRootstrapPropertyValue(id,
                         PlatformRootstrap.PROPERTY_REPO_URLS);
                 String confFile = sbi.getRootstrapPropertyValue(id,
                         PlatformRootstrap.PROPERTY_CONFIGURATION_FILE);
                 if (rootstrapPath != null && rootstrapPath.split(URL_SEP_REGEXP).length >= 1) {
+                    int idx = 0;
                     for (String url : rootstrapPath.split(URL_SEP_REGEXP)) {
+                        String name = String.format("url%d", idx++);
                         if (RepoManager.isLocalUrl(url)) {
-                            reposURLs.put(url, RepoManager.LOCAL_REPO_TYPE);
+                            reposURLs.add(new Repository(name, url, RepoManager.LOCAL_REPO_TYPE));
                         } else {
-                            reposURLs.put(url, RepoManager.REMOTE_REPO_TYPE);
+                            reposURLs.add(new Repository(name, url, RepoManager.REMOTE_REPO_TYPE));
                         }
                     }
                 }
@@ -588,7 +591,7 @@ public class RootstrapManager {
     }
 
     public static PlatformRootstrap generate(String name, String arch, String version,
-            Map<String, String> reposURLs, boolean immediateGen, IPath confFile,
+            List<Repository> reposURLs, boolean immediateGen, IPath confFile,
             IProgressMonitor monitor) throws InterruptedException {
 
         boolean initialized = false;
@@ -621,14 +624,16 @@ public class RootstrapManager {
             return null;
         }
 
-        HashMap<String, String> reposURLs = new HashMap<String, String>();
+        List<Repository> reposURLs = new ArrayList<Repository>();
         String urlStr = rootstrap.getPropertyValue(PlatformRootstrap.PROPERTY_REPO_URLS);
         if (urlStr != null) {
+            int idx = 0;
             for (String url : urlStr.split(URL_SEP_REGEXP)) {
+                String name = String.format("url%d", idx++);
                 if (RepoManager.isLocalUrl(url)) {
-                    reposURLs.put(url.trim(), RepoManager.LOCAL_REPO_TYPE);
+                    reposURLs.add(new Repository(name, url.trim(), RepoManager.LOCAL_REPO_TYPE));
                 } else {
-                    reposURLs.put(url.trim(), RepoManager.REMOTE_REPO_TYPE);
+                    reposURLs.add(new Repository(name, url.trim(), RepoManager.REMOTE_REPO_TYPE));
                 }
             }
         }
index 9d1039d..22689b9 100644 (file)
@@ -4,9 +4,7 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -26,6 +24,7 @@ import org.slf4j.LoggerFactory;
 import org.tizen.nativecommon.build.SmartBuildInterface;
 import org.tizen.nativecommon.build.model.SBIModel;
 import org.tizen.nativecommon.build.model.Target;
+import org.tizen.nativeplatform.repo.model.Repository;
 import org.tizen.nativeplatform.util.RootstrapUtil;
 import org.tizen.nativeplatform.views.model.PlatformRootstrap;
 import org.w3c.dom.Attr;
@@ -52,31 +51,28 @@ public class XMLPluginGenerator {
 
     protected static final Logger logger = LoggerFactory.getLogger(XMLPluginGenerator.class);
 
-    public static boolean generate(String id, String name, String arch, String version, String path,
-            List<String> reposURLs) {
-        return generate(id, name, arch, version, path, reposURLs, null);
+    public static boolean generate(String id, String name, String arch, String version,
+            String path, List<String> reposURLs) {
+        return generate(id, name, arch, version, path, null, reposURLs);
     }
 
-    public static boolean generate(String id, String name, String arch, String version, String path,
-            Map<String, String> reposURLs, IPath confFile) {
+    public static boolean generate(String id, String name, String arch, String version,
+            String path, List<Repository> reposURLs, IPath confFile) {
 
         List<String> repos = new ArrayList<String>();
-        Iterator<String> keySet = reposURLs.keySet().iterator();
-
-        while (keySet.hasNext()) {
-            repos.add(keySet.next());
+        for (Repository repo : reposURLs) {
+            repos.add(repo.getUri());
         }
-
-        return generate(id, name, arch, version, path, repos, confFile);
+        return generate(id, name, arch, version, path, confFile, repos);
     }
 
-    public static boolean generate(String id, String name, String arch, String version, String path,
-            List<String> reposURLs, IPath confFile) {
+    public static boolean generate(String id, String name, String arch, String version,
+            String path, IPath confFile, List<String> reposURLs) {
         return generate(id, name, arch, version, path, reposURLs, confFile, false);
     }
 
-    public static boolean generate(String id, String name, String arch, String version, String path,
-            List<String> reposURLs, IPath confFile, boolean isDefault) {
+    public static boolean generate(String id, String name, String arch, String version,
+            String path, List<String> reposURLs, IPath confFile, boolean isDefault) {
 
         IPath pluginPath = new Path(SmartBuildInterface.getInstance().getPluginPath());
         IPath filePath = pluginPath.append(id + ".xml");
index ddf3c33..ff33713 100644 (file)
@@ -29,23 +29,21 @@ package org.tizen.nativeplatform.views.model;
 
 import java.io.File;
 import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.tizen.nativecommon.build.model.Rootstrap;
 import org.tizen.nativeplatform.repo.commander.LocalRepoMounter;
 import org.tizen.nativeplatform.repo.commander.RepoManager;
+import org.tizen.nativeplatform.repo.model.Repository;
 
 public class PlatformRootstrap extends Rootstrap implements ICheckTreeItem {
     private String http_proxy;
     private boolean checked;
     private boolean initialized;
 
-    private Map<String, String> reposURLs = new HashMap<String, String>();
+    private List<Repository> reposURLs = new ArrayList<Repository>();
     private IPath confFile = null;
     public static final String PROPERTY_REPO_URLS = "REPOSITORY_URLS";
     public static final String PROPERTY_CONFIGURATION_FILE = "CONFIGURATION_FILE";
@@ -55,16 +53,18 @@ public class PlatformRootstrap extends Rootstrap implements ICheckTreeItem {
     public static final String DEFAULT_VERSION = "1.0";
 
     public PlatformRootstrap(String id, String name, String arch, String rootstrapPath,
-            Map<String, String> reposURLs, IPath confFile, boolean initialized, boolean isDefault) {
-        super(id, name, SUPPORTED_TOOLCHAIN_TYPE, DEFAULT_VERSION, arch, new Path(rootstrapPath), isDefault);
+            List<Repository> reposURLs, IPath confFile, boolean initialized, boolean isDefault) {
+        super(id, name, SUPPORTED_TOOLCHAIN_TYPE, DEFAULT_VERSION, arch, new Path(rootstrapPath),
+                isDefault);
         this.reposURLs = reposURLs;
         this.initialized = initialized;
         this.confFile = confFile;
     }
 
     public PlatformRootstrap(String id, String name, String arch, String rootstrapPath,
-            Map<String, String> reposURLs, String confFile, boolean initialized, boolean isDefault) {
-        super(id, name, SUPPORTED_TOOLCHAIN_TYPE, DEFAULT_VERSION, arch, new Path(rootstrapPath), isDefault);
+            List<Repository> reposURLs, String confFile, boolean initialized, boolean isDefault) {
+        super(id, name, SUPPORTED_TOOLCHAIN_TYPE, DEFAULT_VERSION, arch, new Path(rootstrapPath),
+                isDefault);
         this.reposURLs = reposURLs;
         this.initialized = initialized;
         if (confFile != null && !confFile.isEmpty()) {
@@ -73,7 +73,7 @@ public class PlatformRootstrap extends Rootstrap implements ICheckTreeItem {
     }
 
     public PlatformRootstrap(String id, String name, String arch, String version,
-            String rootstrapPath, Map<String, String> reposURLs, String confFile,
+            String rootstrapPath, List<Repository> reposURLs, String confFile,
             boolean initialized, boolean isDefault) {
         super(id, name, SUPPORTED_TOOLCHAIN_TYPE, version, arch, new Path(rootstrapPath), isDefault);
         this.reposURLs = reposURLs;
@@ -84,8 +84,9 @@ public class PlatformRootstrap extends Rootstrap implements ICheckTreeItem {
     }
 
     public PlatformRootstrap(String id, String name, String arch, String rootstrapPath,
-            Map<String, String> reposURLs, String confFile, boolean initialized) {
-        super(id, name, SUPPORTED_TOOLCHAIN_TYPE, DEFAULT_VERSION, arch, new Path(rootstrapPath), false);
+            List<Repository> reposURLs, String confFile, boolean initialized) {
+        super(id, name, SUPPORTED_TOOLCHAIN_TYPE, DEFAULT_VERSION, arch, new Path(rootstrapPath),
+                false);
         this.reposURLs = reposURLs;
         this.initialized = initialized;
         if (confFile != null && !confFile.isEmpty()) {
@@ -131,21 +132,28 @@ public class PlatformRootstrap extends Rootstrap implements ICheckTreeItem {
         return exists;
     }
 
-    public Map<String, String> getRepoMap() {
+    public List<Repository> getRepoList() {
         return reposURLs;
     }
 
     public List<String> getJustRepoURLs() {
         List<String> repos = new ArrayList<String>();
-        Iterator<String> keySet = reposURLs.keySet().iterator();
-
-        while (keySet.hasNext()) {
-            repos.add(keySet.next());
+        for (Repository repo : reposURLs) {
+            repos.add(repo.getUri());
         }
-
         return repos;
     }
 
+    public boolean modifyRepoURL(String url, String newUrl) {
+        for (Repository repo : reposURLs) {
+            if (repo.getUri().equals(url)) {
+                repo.setUri(newUrl);
+                return true;
+            }
+        }
+        return false;
+    }
+
     public boolean addRepoURL(String url) {
         if (RepoManager.isLocalUrl(url)) {
             return addRepoURL(url, RepoManager.LOCAL_REPO_TYPE);
@@ -154,58 +162,100 @@ public class PlatformRootstrap extends Rootstrap implements ICheckTreeItem {
         }
     }
 
+    public boolean containRepository(String url) {
+        for (Repository repo : reposURLs) {
+            if (repo.getUri().equals(url)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public boolean addRepoURL(String url, String type) {
-        boolean result = false;
 
         if (type == null) {
             type = RepoManager.REMOTE_REPO_TYPE;
         }
-        if (!reposURLs.containsKey(url)) {
-            result = (reposURLs.put(url, type) != null) ? true : false;
+        for (Repository repo : reposURLs) {
+            if (repo.getUri().equals(url)) {
+                repo.setType(type);
+                return true;
+            }
         }
 
-        return result;
+        Repository newRepository = new Repository();
+        newRepository.setUri(url);
+        newRepository.setType(type);
+        reposURLs.add(newRepository);
+        return true;
     }
 
-    public boolean changeRepoURL(String fromUrl, String toUrl) {
-        if (removeRepoURL(fromUrl)) {
-            return addRepoURL(toUrl);
-        } else {
-            return false;
-        }
+    public boolean removeRepoURL(String url) {
+        return removeRepoURL(url, RepoManager.getURLType(url));
     }
 
-    public boolean changeRepoURL(String fromUrl, String fromType, String toUrl, String toType) {
-        if (removeRepoURL(fromUrl, fromType)) {
-            return addRepoURL(toUrl, toType);
-        } else {
-            return false;
+    public Repository getRepository(String url) {
+        for (Repository repo : reposURLs) {
+            if (repo.getUri().equals(url)) {
+                return repo;
+            }
         }
+        return null;
     }
 
-    public boolean changeRepoURL(String fromUrl, String toUrl, String toType) {
-        if (removeRepoURL(fromUrl)) {
-            return addRepoURL(toUrl, toType);
-        } else {
+    public boolean moveupRepository(String url) {
+        int idx = 0;
+        Repository targetRepository = null;
+        for (Repository repo : reposURLs) {
+            if (url.equals(repo.getUri())) {
+                targetRepository = repo;
+                break;
+            }
+            idx++;
+        }
+        if (idx <= 0) {
             return false;
         }
+        reposURLs.add(idx - 1, targetRepository);
+        reposURLs.remove(idx + 1);
+        return true;
     }
 
-    public boolean removeRepoURL(String url) {
-        return removeRepoURL(url, RepoManager.getURLType(url));
+    public boolean movedownRepository(String url) {
+        int idx = 0;
+        int maxIdx = reposURLs.size() - 1;
+        Repository targetRepository = null;
+        for (Repository repo : reposURLs) {
+            if (url.equals(repo.getUri())) {
+                targetRepository = repo;
+                break;
+            }
+            idx++;
+        }
+        if (idx >= maxIdx) {
+            return false;
+        }
+        reposURLs.add(idx + 2, targetRepository);
+        reposURLs.remove(idx);
+        return true;
     }
 
     public boolean removeRepoURL(String url, String type) {
-        boolean result = false;
+        Repository targetRepo = null;
 
         if (RepoManager.isLocalType(type)) {
             if (LocalRepoMounter.umountLocalRepository(url, null)) {
-                result = (reposURLs.remove(url) != null) ? true : false;
+                targetRepo = getRepository(url);
             }
         } else {
-            result = (reposURLs.remove(url) != null) ? true : false;
+            targetRepo = getRepository(url);
+        }
+        if (targetRepo != null) {
+            reposURLs.remove(targetRepo);
+        } else {
+            return false;
         }
-        return result;
+        return true;
     }
 
     @Override
index a4212c8..cd0c75f 100644 (file)
@@ -28,6 +28,7 @@
 package org.tizen.nativeplatform.views.ui;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.ResourceBundle;
@@ -102,9 +103,11 @@ import org.tizen.nativeplatform.pkgmgr.PkgMgrInitializer;
 import org.tizen.nativeplatform.pkgmgr.ui.RPMPackageDialog;
 import org.tizen.nativeplatform.repo.commander.LocalRepoMounter;
 import org.tizen.nativeplatform.repo.commander.RepoManager;
+import org.tizen.nativeplatform.repo.model.Repository;
 import org.tizen.nativeplatform.rootstrap.BaseFileSystemGenerator;
 import org.tizen.nativeplatform.rootstrap.IRootstrapChangedListener;
 import org.tizen.nativeplatform.rootstrap.RootstrapManager;
+import org.tizen.nativeplatform.util.CommandLauncher;
 import org.tizen.nativeplatform.util.GBSArchitectureChecker;
 import org.tizen.nativeplatform.util.PlatformProjectUtil;
 import org.tizen.nativeplatform.views.model.PlatformRootstrap;
@@ -130,6 +133,8 @@ public class RootstrapView extends ViewPart {
 
     private IProject project;
     private Shell shell;
+    
+    private Map<String, Thread> threadMap = new HashMap<String, Thread>();
 
     private static final String PLATFORM_PERSPECTIVE_ID = "org.tizen.nativeplatform.perspective";
 
@@ -522,14 +527,13 @@ public class RootstrapView extends ViewPart {
     }
 
     private void showAddDialog() {
-        // AddRootstrapDialog dlg = new AddRootstrapDialog(shell);
         RootstrapGenDialog dlg = new RootstrapGenDialog(shell);
         if (dlg.open() == RootstrapGenDialog.OK) {
             String rootstrapName = dlg.getRootstrapName();
             String arch = GBSArchitectureChecker.changeToSupportedArchitecture(dlg
                     .getSelectionTab().getArchitecture());
             List<String> repositoryURLs = dlg.getSelectionTab().getRepositoryURLs();
-            Map<String, String> repoURLs = RepoManager.createRepeHashMap(repositoryURLs);
+            List<Repository> repoURLs = RepoManager.createRepoList(repositoryURLs);
 
             boolean immediateGen = dlg.getSelectionTab().isImmediateGenerateChecked();
             IPath buildConfFile = dlg.getSelectionTab().getBuildConfFile();
@@ -538,7 +542,7 @@ public class RootstrapView extends ViewPart {
     }
 
     private void genRootstrap(final String name, final String arch,
-            final Map<String, String> repoURLs, final boolean immediateGen,
+            final List<Repository> repoURLs, final boolean immediateGen,
             final IPath buildConfFile) {
 
         // generate rootstrap here
@@ -712,8 +716,8 @@ public class RootstrapView extends ViewPart {
                                         resources.getString("GenRootDlg.Progress.Msg.Generating"),
                                         -1);
                                 if (!BaseFileSystemGenerator.generate(
-                                        selected.getPath().toString(), selected.getArch(),
-                                        selected.getJustRepoURLs(), selected.getConfFile(), monitor)) {
+                                        selected.getPath().toString(), selected.getJustRepoURLs(), 
+                                        selected.getArch(), selected.getConfFile(), monitor)) {
                                     throw new InterruptedException(
                                             "Generating base file system failed!");
                                 }