ROOTSTRAP: Supported to add extra repositories when rootstrap creation. 61/20361/1
authordonghyuk.yang <donghyuk.yang@samsung.com>
Mon, 5 May 2014 13:20:42 +0000 (22:20 +0900)
committerdonghyuk.yang <donghyuk.yang@samsung.com>
Mon, 5 May 2014 13:20:42 +0000 (22:20 +0900)
User can add extra repositories and order it when creating a new
rootstrap. It is supported only in Package Manager before. Now, It also
is supported in rootstrap creation dialog.

Change-Id: I5493bf964a4e667a7a367a45d62c70e25fe839f8
Signed-off-by: donghyuk.yang <donghyuk.yang@samsung.com>
org.tizen.nativeplatform/src/org/tizen/nativeplatform/build/PlatformBuildCommandLauncher.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/pkgmgr/ui/RepoCommonDialog.java
org.tizen.nativeplatform/src/org/tizen/nativeplatform/views/ui/RemoteRepoTab.java

index 30b6394..0a1cd44 100644 (file)
@@ -39,6 +39,7 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.ptp.remotetools.core.IRemoteExecutionTools;
 import org.eclipse.ptp.remotetools.core.IRemoteScript;
 import org.tizen.common.util.OSChecker;
+import org.tizen.common.util.ProcessMonitorThread;
 import org.tizen.nativecommon.ProjectUtil;
 import org.tizen.nativecommon.build.ProjectTypeManager;
 import org.tizen.nativecommon.build.SmartBuildInterface;
@@ -70,6 +71,10 @@ public class PlatformBuildCommandLauncher extends CommandLauncher {
         } else {
             fProcess = super.execute(commandPath, args, env, changeToDirectory, monitor);
         }
+        
+        ProcessMonitorThread pmt = new ProcessMonitorThread(fProcess, monitor);
+        pmt.start();
+        
         return fProcess;
     }
 
index 935c871..6fc0af8 100644 (file)
@@ -83,6 +83,9 @@ public abstract class RepoCommonDialog extends Dialog {
         super.configureShell(newShell);
         newShell.setText(title);
         newShell.setLocation(x, y);
+        if (!supportLocalRepo) {
+            height = 200;
+        }
         newShell.setSize(width, height);
     }
 
index 1bd4870..b928d21 100644 (file)
@@ -50,6 +50,7 @@ import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -65,7 +66,11 @@ import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.swt.widgets.Text;
 import org.tizen.common.util.DialogUtil;
+import org.tizen.common.util.ImageUtil;
 import org.tizen.common.util.SWTUtil;
+import org.tizen.nativeplatform.Activator;
+import org.tizen.nativeplatform.pkgmgr.ui.AddRepoDialog;
+import org.tizen.nativeplatform.pkgmgr.ui.ModifyRepoDialog;
 import org.tizen.nativeplatform.rootstrap.SnapshotURLParser;
 import org.tizen.nativeplatform.ui.provider.RepoTableViewerProvider;
 import org.tizen.nativeplatform.util.TableUtil;
@@ -73,7 +78,6 @@ import org.tizen.nativeplatform.views.model.ICheckTreeItem;
 
 public class RemoteRepoTab implements IRepositoryTab {
 
-    protected TableViewer repoViewer = null;
     protected CheckboxTableViewer pkgViewer = null;
     protected Combo categoryCombo;
     protected Text filterText;
@@ -265,13 +269,14 @@ public class RemoteRepoTab implements IRepositoryTab {
     private void createSettingRepoComposite(Composite parent) {
 
         Group group = new Group(parent, SWT.NONE);
-        group.setLayout(new GridLayout(1, false));
+        group.setLayout(new GridLayout(2, false));
         group.setText(resources.getString("GenRootDlg.Group.Repos"));
         GridData gridData = new GridData(GridData.FILL_HORIZONTAL
                 | GridData.VERTICAL_ALIGN_BEGINNING);
         group.setLayoutData(gridData);
 
-        createTreeViewer(group);
+        createRepositoryTable(group);
+        createRepositoryButtons(group);
     }
 
     private void createGenButtonComposite(Composite parent) {
@@ -349,12 +354,92 @@ public class RemoteRepoTab implements IRepositoryTab {
         reposURLViewer.setInput(data);
         noityModified();
     }
+    
+    private void moveUpRepository(int index) {
+        String repo_1 = (String)reposURLViewer.getTable().getItem(index).getData();
+        String name_1 = repo_1.split("[|]")[0];
+        String url_1 = repo_1.split("[|]")[1];
+
+        String repo_2 = (String)reposURLViewer.getTable().getItem(index-1).getData();
+        String name_2 = repo_2.split("[|]")[0];
+        String url_2 = repo_2.split("[|]")[1];
+        
+        String data_1 = String.format("%s|%s", name_2, url_1);
+        String data_2 = String.format("%s|%s", name_1, url_2);
+        
+        List<String> repos = (List<String>)reposURLViewer.getInput();
+        repos.remove(index-1);
+        repos.add(index-1, data_1);
+        repos.remove(index);
+        repos.add(index, data_2);
+        reposURLViewer.setInput(repos);
+        reposURLViewer.getTable().setSelection(index-1);
+        noityModified();
+    }
+    
+    private void moveDownRepository(int index) {
+        String repo_1 = (String)reposURLViewer.getTable().getItem(index).getData();
+        String name_1 = repo_1.split("[|]")[0];
+        String url_1 = repo_1.split("[|]")[1];
+
+        String repo_2 = (String)reposURLViewer.getTable().getItem(index+1).getData();
+        String name_2 = repo_2.split("[|]")[0];
+        String url_2 = repo_2.split("[|]")[1];
+        
+        String data_1 = String.format("%s|%s", name_2, url_1);
+        String data_2 = String.format("%s|%s", name_1, url_2);
+        
+        List<String> repos = (List<String>)reposURLViewer.getInput();
+        repos.remove(index+1);
+        repos.add(index+1, data_1);
+        repos.remove(index);
+        repos.add(index, data_2);
+        reposURLViewer.setInput(repos);
+        reposURLViewer.getTable().setSelection(index+1);
+        noityModified();        
+    }
+    
+    private void modifyRepository(int index, String newRepo) {
+        List<String> repos = (List<String>)reposURLViewer.getInput();
+        String repo = repos.get(index);
+        String name = repo.split("[|]")[0];
+        String newData = String.format("%s|%s", name, newRepo);
+        repos.remove(index);
+        repos.add(index, newData);
+        reposURLViewer.setInput(repos);
+        noityModified();
+    }
+    
+    private void removeRepository(int index) {
+        String data = (String)reposURLViewer.getTable().getItem(index).getData();
+        int idx = 0;
+        List<String> repos = (List<String>)reposURLViewer.getInput();
+        List<String> newRepos = new ArrayList<String>();
+        for (String repo : repos) {
+            if (!repo.equals(data)) {
+                String url = repo.split("[|]")[1];
+                newRepos.add(String.format("url%d|%s", idx++, url));
+            }
+        }
+        reposURLViewer.setInput(newRepos);
+        noityModified();
+    }
+    
+    private void addRepository(String newRepo) {
+        List<String> repos = (List<String>)reposURLViewer.getInput();
+        int idx = repos.size();
+        String newData = String.format("url%d|%s", idx, newRepo);
+        repos.add(newData);
+        reposURLViewer.setInput(repos);
+        noityModified();
+    }
+    
 
     private void noityModified() {
         listener.modified();
     }
 
-    private void createTreeViewer(Composite parent) {
+    private void createRepositoryTable(Composite parent) {
 
         reposURLViewer = new TableViewer(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
         Table table = reposURLViewer.getTable();
@@ -380,6 +465,138 @@ public class RemoteRepoTab implements IRepositoryTab {
         table.setLayoutData(tableGridData);
         reposURLViewer.setInput(new ArrayList<ICheckTreeItem>());
     }
+    
+    private void createRepositoryButtons(Composite parent) {
+        Composite composite = new Composite(parent, SWT.NONE);
+        composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+        GridLayout gridLayout = new GridLayout();
+        gridLayout.numColumns = 1;
+        gridLayout.marginWidth = 0;
+        gridLayout.marginHeight = 0;
+        composite.setLayout(gridLayout);
+
+        Button add_bt = new Button(composite, SWT.PUSH);
+        Image addIcon = ImageUtil.getImage(Activator.PLUGIN_ID, "icons/rootstrap/add.gif");
+        add_bt.setImage(addIcon);
+        add_bt.addMouseListener(new MouseListener() {
+
+            @Override
+            public void mouseDoubleClick(MouseEvent e) {
+            }
+
+            @Override
+            public void mouseDown(MouseEvent e) {
+                AddRepoDialog dialog = new AddRepoDialog(shell,"Rootstrap", false);
+                if (dialog.open() != AddRepoDialog.OK) {
+                    return;
+                }
+                String url = dialog.getRepositoryURL();
+                addRepository(url);
+            }
+
+            @Override
+            public void mouseUp(MouseEvent e) {
+            }
+
+        });
+
+        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.addMouseListener(new MouseListener() {
+
+            @Override
+            public void mouseDoubleClick(MouseEvent e) {
+            }
+
+            @Override
+            public void mouseDown(MouseEvent e) {
+                int selectedIdx = reposURLViewer.getTable().getSelectionIndex();
+                removeRepository(selectedIdx);
+            }
+
+            @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);
+        modify_bt.addMouseListener(new MouseListener() {
+
+            @Override
+            public void mouseDoubleClick(MouseEvent e) {
+            }
+
+            @Override
+            public void mouseDown(MouseEvent e) {
+                int selectedIdx = reposURLViewer.getTable().getSelectionIndex();
+                String repo = (String)reposURLViewer.getTable().getItem(selectedIdx).getData();
+                String name = repo.split("[|]")[0];
+                String url = repo.split("[|]")[1];
+                ModifyRepoDialog dialog = new ModifyRepoDialog(shell, "Rootstrap", name, url, false);
+                if (dialog.open() != ModifyRepoDialog.OK) {
+                    return;
+                }
+                if (dialog.isDirty()) {
+                    String newUrl = dialog.getRepositoryURL();
+                    modifyRepository(selectedIdx, newUrl);
+                }
+            }
+
+            @Override
+            public void mouseUp(MouseEvent e) {
+            }
+        });
+
+        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.addMouseListener(new MouseListener() {
+
+            @Override
+            public void mouseDoubleClick(MouseEvent e) {
+            }
+
+            @Override
+            public void mouseDown(MouseEvent e) {
+                int selectedIdx = reposURLViewer.getTable().getSelectionIndex();
+                if (selectedIdx < 1) {
+                    return;
+                }
+                moveUpRepository(selectedIdx);
+            }
+
+            @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.addMouseListener(new MouseListener() {
+
+            @Override
+            public void mouseDoubleClick(MouseEvent e) {
+            }
+
+            @Override
+            public void mouseDown(MouseEvent e) {
+                int size = ((List<String>)reposURLViewer.getInput()).size();
+                int selectedIdx = reposURLViewer.getTable().getSelectionIndex();
+                if (selectedIdx >= size-1) {
+                    return;
+                }
+                moveDownRepository(selectedIdx);
+            }
+
+            @Override
+            public void mouseUp(MouseEvent e) {
+            }
+        });
+    }
        
     @Override
     public String getArchitecture() {