]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/wizards/FetchWizard.java
Start migrating SLC client
[gpl/argeo-slc.git] / org.argeo.slc.client.ui.dist / src / main / java / org / argeo / slc / client / ui / dist / wizards / FetchWizard.java
diff --git a/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/wizards/FetchWizard.java b/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/wizards/FetchWizard.java
new file mode 100644 (file)
index 0000000..5d250c0
--- /dev/null
@@ -0,0 +1,671 @@
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.slc.client.ui.dist.wizards;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.jcr.Credentials;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.RepositoryFactory;
+import javax.jcr.Session;
+
+import org.argeo.ArgeoMonitor;
+import org.argeo.eclipse.ui.EclipseArgeoMonitor;
+import org.argeo.jcr.ArgeoNames;
+import org.argeo.jcr.ArgeoTypes;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.UserJcrUtils;
+import org.argeo.slc.SlcException;
+import org.argeo.slc.client.ui.dist.DistPlugin;
+import org.argeo.slc.client.ui.dist.PrivilegedJob;
+import org.argeo.slc.client.ui.dist.utils.ViewerUtils;
+import org.argeo.slc.repo.RepoConstants;
+import org.argeo.slc.repo.RepoSync;
+import org.argeo.slc.repo.RepoUtils;
+import org.argeo.util.security.Keyring;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TableViewerColumn;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Defines parameters for the fetch process and run it using a {@link RepoSync}
+ * object.
+ */
+public class FetchWizard extends Wizard {
+       // private final static Log log = LogFactory.getLog(FetchWizard.class);
+
+       // Business objects
+       private Keyring keyring;
+       private RepositoryFactory repositoryFactory;
+       private Session currSession;
+       private Node targetRepoNode, sourceRepoNode;
+
+       private List<WkspObject> selectedWorkspaces = new ArrayList<WkspObject>();
+
+       // The pages
+       private ChooseWkspPage chooseWkspPage;
+       private RecapPage recapPage;
+
+       // Cache the advanced pages
+       private Map<WkspObject, AdvancedFetchPage> advancedPages = new HashMap<FetchWizard.WkspObject, FetchWizard.AdvancedFetchPage>();
+
+       // Controls with parameters
+       private Button filesOnlyBtn;
+       private Button advancedBtn;
+       private CheckboxTableViewer wkspViewer;
+
+       public FetchWizard(Keyring keyring, RepositoryFactory repositoryFactory,
+                       Repository nodeRepository) {
+               super();
+               this.keyring = keyring;
+               this.repositoryFactory = repositoryFactory;
+               try {
+                       currSession = nodeRepository.login();
+               } catch (RepositoryException e) {
+                       throw new SlcException(
+                                       "Unexpected error while initializing fetch wizard", e);
+               }
+       }
+
+       @Override
+       public void dispose() {
+               JcrUtils.logoutQuietly(currSession);
+               super.dispose();
+       }
+
+       @Override
+       public void addPages() {
+               try {
+                       chooseWkspPage = new ChooseWkspPage();
+                       addPage(chooseWkspPage);
+                       recapPage = new RecapPage();
+                       addPage(recapPage);
+                       setWindowTitle("Define Fetch Procedure");
+               } catch (Exception e) {
+                       throw new SlcException("Cannot add page to wizard ", e);
+               }
+       }
+
+       @Override
+       public boolean performFinish() {
+               if (!canFinish())
+                       return false;
+               try {
+                       // Target Repository
+                       String targetRepoUri = targetRepoNode.getProperty(
+                                       ArgeoNames.ARGEO_URI).getString();
+                       Repository targetRepo = RepoUtils.getRepository(repositoryFactory,
+                                       keyring, targetRepoNode);
+                       Credentials targetCredentials = RepoUtils.getRepositoryCredentials(
+                                       keyring, targetRepoNode);
+
+                       // Source Repository
+                       String sourceRepoUri = sourceRepoNode.getProperty(
+                                       ArgeoNames.ARGEO_URI).getString();
+                       Repository sourceRepo = RepoUtils.getRepository(repositoryFactory,
+                                       keyring, sourceRepoNode);
+                       Credentials sourceCredentials = RepoUtils.getRepositoryCredentials(
+                                       keyring, sourceRepoNode);
+
+                       String msg = "Your are about to fetch data from repository: \n\t"
+                                       + sourceRepoUri + "\ninto target repository: \n\t"
+                                       + targetRepoUri + "\nDo you really want to proceed ?";
+
+                       boolean result = MessageDialog.openConfirm(DistPlugin.getDefault()
+                                       .getWorkbench().getDisplay().getActiveShell(),
+                                       "Confirm Fetch Launch", msg);
+
+                       if (result) {
+                               RepoSync repoSync = new RepoSync(sourceRepo, sourceCredentials,
+                                               targetRepo, targetCredentials);
+                               repoSync.setTargetRepoUri(targetRepoUri);
+                               repoSync.setSourceRepoUri(sourceRepoUri);
+
+                               // Specify workspaces to synchronise
+                               Map<String, String> wksps = new HashMap<String, String>();
+                               for (Object obj : wkspViewer.getCheckedElements()) {
+                                       WkspObject stn = (WkspObject) obj;
+                                       wksps.put(stn.srcName, stn.targetName);
+                               }
+                               repoSync.setWkspMap(wksps);
+
+                               // Set the import files only option
+                               repoSync.setFilesOnly(filesOnlyBtn.getSelection());
+                               FetchJob job = new FetchJob(repoSync);
+                               job.setUser(true);
+                               job.schedule();
+                       }
+               } catch (Exception e) {
+                       throw new SlcException(
+                                       "Unexpected error while launching the fetch", e);
+               }
+               return true;
+       }
+
+       // ///////////////////////////////
+       // ////// THE PAGES
+
+       private class ChooseWkspPage extends WizardPage {
+
+               private Map<String, Node> sourceReposMap;
+               private Combo chooseSourceRepoCmb;
+
+               public ChooseWkspPage() {
+                       super("Main");
+                       setTitle("Choose workspaces to fetch");
+                       setDescription("Check 'advanced fetch' box to "
+                                       + "rename workspaces and fine tune the process");
+
+                       // Initialise with registered Repositories
+                       sourceReposMap = getSourceRepoUris();
+               }
+
+               public void createControl(Composite parent) {
+                       Composite composite = new Composite(parent, SWT.NO_FOCUS);
+                       composite.setLayout(new GridLayout(2, false));
+
+                       // Choose source repository combo
+                       new Label(composite, SWT.NONE)
+                                       .setText("Choose a source repository");
+                       chooseSourceRepoCmb = new Combo(composite, SWT.BORDER
+                                       | SWT.V_SCROLL);
+                       chooseSourceRepoCmb.setItems(sourceReposMap.keySet().toArray(
+                                       new String[sourceReposMap.size()]));
+                       GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+                       chooseSourceRepoCmb.setLayoutData(gd);
+
+                       // Check boxes
+                       final Button selectAllBtn = new Button(composite, SWT.CHECK);
+                       selectAllBtn.setText("Select/Unselect all");
+
+                       advancedBtn = new Button(composite, SWT.CHECK);
+                       advancedBtn.setText("Advanced fetch");
+                       advancedBtn.setToolTipText("Check this for further "
+                                       + "parameterization of the fetch process");
+
+                       // Workspace table
+                       Table table = new Table(composite, SWT.H_SCROLL | SWT.V_SCROLL
+                                       | SWT.BORDER | SWT.CHECK);
+                       gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+                       gd.horizontalSpan = 2;
+                       table.setLayoutData(gd);
+                       configureWkspTable(table);
+
+                       // Import only files
+                       filesOnlyBtn = new Button(composite, SWT.CHECK | SWT.WRAP);
+                       filesOnlyBtn
+                                       .setText("Import only files (faster, a normalized action should be launched once done)");
+                       filesOnlyBtn.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false,
+                                       false, 2, 1));
+
+                       // Listeners
+                       selectAllBtn.addSelectionListener(new SelectionAdapter() {
+                               public void widgetSelected(SelectionEvent e) {
+                                       wkspViewer.setAllChecked(selectAllBtn.getSelection());
+                                       getContainer().updateButtons();
+                               }
+                       });
+
+                       // advancedBtn.addSelectionListener(new SelectionAdapter() {
+                       // public void widgetSelected(SelectionEvent e) {
+                       // if (advancedBtn.getSelection()){
+                       //
+                       // }
+                       // wkspViewer.setAllChecked();
+                       // }
+                       // });
+
+                       chooseSourceRepoCmb.addModifyListener(new ModifyListener() {
+                               public void modifyText(ModifyEvent e) {
+                                       String chosenUri = chooseSourceRepoCmb
+                                                       .getItem(chooseSourceRepoCmb.getSelectionIndex());
+                                       sourceRepoNode = sourceReposMap.get(chosenUri);
+                                       wkspViewer.setInput(sourceRepoNode);
+                               }
+                       });
+
+                       wkspViewer.addCheckStateListener(new ICheckStateListener() {
+                               public void checkStateChanged(CheckStateChangedEvent event) {
+                                       getContainer().updateButtons();
+                               }
+                       });
+
+                       // Initialise to first available repo
+                       if (chooseSourceRepoCmb.getItemCount() > 0)
+                               chooseSourceRepoCmb.select(0);
+
+                       // Compulsory
+                       setControl(composite);
+               }
+
+               @Override
+               public boolean isPageComplete() {
+                       return wkspViewer.getCheckedElements().length != 0;
+               }
+
+               @Override
+               public IWizardPage getNextPage() {
+                       // WARNING: page are added and never removed.
+                       if (advancedBtn.getSelection()
+                                       && wkspViewer.getCheckedElements().length != 0) {
+                               IWizardPage toReturn = null;
+                               for (Object obj : wkspViewer.getCheckedElements()) {
+                                       WkspObject curr = (WkspObject) obj;
+                                       // currSelecteds.add(curr);
+                                       AdvancedFetchPage page;
+                                       if (!advancedPages.containsKey(curr)) {
+                                               page = new AdvancedFetchPage(curr.srcName, curr);
+                                               addPage(page);
+                                               advancedPages.put(curr, page);
+                                       } else
+                                               page = advancedPages.get(curr);
+                                       if (toReturn == null)
+                                               toReturn = page;
+                               }
+                               return toReturn;
+                       } else {
+                               return recapPage;
+                       }
+               }
+
+               // Configure the workspace table
+               private void configureWkspTable(Table table) {
+                       table.setLinesVisible(true);
+                       table.setHeaderVisible(true);
+                       wkspViewer = new CheckboxTableViewer(table);
+
+                       // WORKSPACE COLUMNS
+                       TableViewerColumn column = ViewerUtils.createTableViewerColumn(
+                                       wkspViewer, "Source names", SWT.NONE, 250);
+                       column.setLabelProvider(new ColumnLabelProvider() {
+                               @Override
+                               public String getText(Object element) {
+                                       return ((WkspObject) element).srcName;
+                               }
+                       });
+
+                       // column = ViewerUtils.createTableViewerColumn(wkspViewer, "Size",
+                       // SWT.NONE, 250);
+                       // column.setLabelProvider(new ColumnLabelProvider() {
+                       // @Override
+                       // public String getText(Object element) {
+                       // return ((WkspObject) element).getFormattedSize();
+                       // }
+                       // });
+
+                       wkspViewer.setContentProvider(new WkspContentProvider());
+                       // A basic comparator
+                       wkspViewer.setComparator(new WkspComparator());
+               }
+       }
+
+       private class AdvancedFetchPage extends WizardPage {
+
+               private final WkspObject currentWorkspace;
+
+               private Text targetNameTxt;
+
+               protected AdvancedFetchPage(String pageName, WkspObject currentWorkspace) {
+                       super(pageName);
+                       this.currentWorkspace = currentWorkspace;
+               }
+
+               @Override
+               public void setVisible(boolean visible) {
+                       super.setVisible(visible);
+                       if (visible) {
+                               String msg = "Define advanced parameters to fetch workspace "
+                                               + currentWorkspace.srcName;
+                               setMessage(msg);
+                               targetNameTxt.setText(currentWorkspace.targetName);
+                       }
+                       // else
+                       // currentWorkspace.targetName = targetNameTxt.getText();
+               }
+
+               public void createControl(Composite parent) {
+                       Composite body = new Composite(parent, SWT.NO_FOCUS);
+                       body.setLayout(new GridLayout(2, false));
+                       new Label(body, SWT.NONE).setText("Choose a new name");
+                       targetNameTxt = new Text(body, SWT.BORDER);
+                       targetNameTxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,
+                                       true, false));
+                       setControl(body);
+               }
+
+               protected WkspObject getWorkspaceObject() {
+                       currentWorkspace.targetName = targetNameTxt.getText();
+                       return currentWorkspace;
+               }
+
+               @Override
+               public IWizardPage getNextPage() {
+                       // WARNING: page are added and never removed.
+                       // IWizardPage toReturn = null;
+                       // IWizardPage[] pages = ((Wizard) getContainer()).getPages();
+                       Object[] selected = wkspViewer.getCheckedElements();
+                       for (int i = 0; i < selected.length - 1; i++) {
+                               WkspObject curr = (WkspObject) selected[i];
+                               if (curr.equals(currentWorkspace))
+                                       return advancedPages.get((WkspObject) selected[i + 1]);
+                       }
+                       return recapPage;
+               }
+       }
+
+       private class RecapPage extends WizardPage {
+
+               private TableViewer recapViewer;
+
+               public RecapPage() {
+                       super("Validate and launch");
+                       setTitle("Validate and launch");
+               }
+
+               @Override
+               public boolean isPageComplete() {
+                       return isCurrentPage();
+               }
+
+               public IWizardPage getNextPage() {
+                       // always last....
+                       return null;
+               }
+
+               @Override
+               public void setVisible(boolean visible) {
+                       super.setVisible(visible);
+                       if (visible) {
+                               try {
+                                       String targetRepoUri = targetRepoNode.getProperty(
+                                                       ArgeoNames.ARGEO_URI).getString();
+                                       String sourceRepoUri = sourceRepoNode.getProperty(
+                                                       ArgeoNames.ARGEO_URI).getString();
+
+                                       String msg = "Fetch data from: " + sourceRepoUri
+                                                       + "\ninto target repository: " + targetRepoUri;
+                                       // + "\nDo you really want to proceed ?";
+                                       setMessage(msg);
+
+                                       // update values that will be used for the fetch
+                                       selectedWorkspaces.clear();
+
+                                       for (Object obj : wkspViewer.getCheckedElements()) {
+                                               WkspObject curr = (WkspObject) obj;
+
+                                               if (advancedBtn.getSelection()) {
+                                                       AdvancedFetchPage page = advancedPages.get(curr);
+                                                       selectedWorkspaces.add(page.getWorkspaceObject());
+                                               } else
+                                                       selectedWorkspaces.add(curr);
+                                       }
+                                       recapViewer.setInput(selectedWorkspaces);
+                                       recapViewer.refresh();
+
+                               } catch (RepositoryException re) {
+                                       throw new SlcException("Unable to get repositories URIs",
+                                                       re);
+                               }
+                       }
+               }
+
+               public void createControl(Composite parent) {
+                       Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL
+                                       | SWT.BORDER);
+                       table.setLinesVisible(true);
+                       table.setHeaderVisible(true);
+                       recapViewer = new TableViewer(table);
+
+                       // WORKSPACE COLUMNS
+                       TableViewerColumn column = ViewerUtils.createTableViewerColumn(
+                                       recapViewer, "Sources", SWT.NONE, 250);
+                       column.setLabelProvider(new ColumnLabelProvider() {
+                               @Override
+                               public String getText(Object element) {
+                                       return ((WkspObject) element).srcName;
+                               }
+                       });
+
+                       column = ViewerUtils.createTableViewerColumn(recapViewer,
+                                       "targets", SWT.NONE, 250);
+                       column.setLabelProvider(new ColumnLabelProvider() {
+                               @Override
+                               public String getText(Object element) {
+                                       return ((WkspObject) element).targetName;
+                               }
+                       });
+
+                       recapViewer.setContentProvider(new IStructuredContentProvider() {
+
+                               public void inputChanged(Viewer viewer, Object oldInput,
+                                               Object newInput) {
+                                       // TODO Auto-generated method stub
+                               }
+
+                               public void dispose() {
+                               }
+
+                               public Object[] getElements(Object inputElement) {
+                                       return selectedWorkspaces.toArray();
+                               }
+                       });
+
+                       // A basic comparator
+                       recapViewer.setComparator(new WkspComparator());
+                       setControl(table);
+               }
+       }
+
+       /**
+        * Define the privileged job that will be run asynchronously to accomplish
+        * the sync
+        */
+       private class FetchJob extends PrivilegedJob {
+               private RepoSync repoSync;
+
+               public FetchJob(RepoSync repoSync) {
+                       super("Fetch");
+                       this.repoSync = repoSync;
+               }
+
+               @Override
+               protected IStatus doRun(IProgressMonitor progressMonitor) {
+                       try {
+                               ArgeoMonitor monitor = new EclipseArgeoMonitor(progressMonitor);
+                               repoSync.setMonitor(monitor);
+                               repoSync.run();
+                       } catch (Exception e) {
+                               return new Status(IStatus.ERROR, DistPlugin.ID,
+                                               "Cannot fetch repository", e);
+                       }
+                       return Status.OK_STATUS;
+               }
+       }
+
+       // ///////////////////////
+       // Local classes
+       private class WkspObject {
+               protected final String srcName;
+               protected String targetName;
+
+               protected WkspObject(String srcName) {
+                       this.srcName = srcName;
+                       this.targetName = srcName;
+               }
+
+               @Override
+               public String toString() {
+                       return "[" + srcName + " to " + targetName + "]";
+               }
+       }
+
+       private class WkspComparator extends ViewerComparator {
+
+       }
+
+       private class WkspContentProvider implements IStructuredContentProvider {
+               // caches current repo
+               private Node currSourceNodeRepo;
+               private Repository currSourceRepo;
+               private Credentials currSourceCred;
+
+               private List<WkspObject> workspaces = new ArrayList<WkspObject>();
+
+               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+                       if (newInput != null && newInput instanceof Node) {
+                               Session session = null;
+                               try {
+                                       Node newRepoNode = (Node) newInput;
+                                       if (currSourceNodeRepo == null
+                                                       || !newRepoNode.getPath().equals(
+                                                                       currSourceNodeRepo.getPath())) {
+
+                                               // update cache
+                                               currSourceNodeRepo = newRepoNode;
+                                               currSourceRepo = RepoUtils.getRepository(
+                                                               repositoryFactory, keyring, currSourceNodeRepo);
+                                               currSourceCred = RepoUtils.getRepositoryCredentials(
+                                                               keyring, currSourceNodeRepo);
+
+                                               // reset workspace list
+                                               wkspViewer.setAllChecked(false);
+                                               workspaces.clear();
+                                               session = currSourceRepo.login(currSourceCred);
+                                               // remove unvalid elements
+                                               for (String name : session.getWorkspace()
+                                                               .getAccessibleWorkspaceNames())
+                                                       // TODO implement a cleaner way to filter
+                                                       // workspaces out
+                                                       if (name.lastIndexOf('-') > 0) {
+                                                               WkspObject currWksp = new WkspObject(name);
+                                                               // compute wkspace size
+                                                               // TODO implement this
+                                                               // Session currSession = null;
+                                                               // try {
+                                                               // currSession = currSourceRepo.login(
+                                                               // currSourceCred, name);
+                                                               // currWksp.size = JcrUtils
+                                                               // .getNodeApproxSize(currSession
+                                                               // .getNode("/"));
+                                                               //
+                                                               // } catch (RepositoryException re) {
+                                                               // log.warn(
+                                                               // "unable to compute size of workspace "
+                                                               // + name, re);
+                                                               // } finally {
+                                                               // JcrUtils.logoutQuietly(currSession);
+                                                               // }
+                                                               workspaces.add(currWksp);
+                                                       }
+                                       }
+
+                               } catch (RepositoryException e) {
+                                       throw new SlcException("Unexpected error while "
+                                                       + "initializing fetch wizard", e);
+                               } finally {
+                                       JcrUtils.logoutQuietly(session);
+                               }
+                               viewer.refresh();
+                       }
+               }
+
+               public void dispose() {
+               }
+
+               public Object[] getElements(Object obj) {
+                       return workspaces.toArray();
+               }
+       }
+
+       // ////////////////////////////
+       // // Helpers
+
+       // populate available source repo list
+       private Map<String, Node> getSourceRepoUris() {
+               try {
+                       Node repoList = currSession.getNode(UserJcrUtils.getUserHome(
+                                       currSession).getPath()
+                                       + RepoConstants.REPOSITORIES_BASE_PATH);
+
+                       String targetRepoUri = null;
+                       if (targetRepoNode != null) {
+                               targetRepoUri = targetRepoNode
+                                               .getProperty(ArgeoNames.ARGEO_URI).getString();
+                       }
+                       NodeIterator ni = repoList.getNodes();
+                       // List<String> sourceRepoNames = new ArrayList<String>();
+                       // // caches a map of the source repo nodes with their URI as a key
+                       // // to ease further processing
+                       Map<String, Node> sourceReposMap = new HashMap<String, Node>();
+                       while (ni.hasNext()) {
+                               Node currNode = ni.nextNode();
+                               if (currNode.isNodeType(ArgeoTypes.ARGEO_REMOTE_REPOSITORY)) {
+                                       String currUri = currNode.getProperty(ArgeoNames.ARGEO_URI)
+                                                       .getString();
+                                       if (targetRepoUri == null || !targetRepoUri.equals(currUri)) {
+                                               sourceReposMap.put(currUri, currNode);
+                                               // sourceRepoNames.add(currUri);
+                                       }
+                               }
+                       }
+                       return sourceReposMap;
+                       // sourceRepoNames.toArray(new String[sourceRepoNames
+                       // .size()]);
+               } catch (RepositoryException e) {
+                       throw new SlcException("Error while getting repo aliases", e);
+               }
+       }
+
+       public void setTargetRepoNode(Node targetRepoNode) {
+               this.targetRepoNode = targetRepoNode;
+       }
+
+       public void setSourceRepoNode(Node sourceRepoNode) {
+               this.sourceRepoNode = sourceRepoNode;
+       }
+}
\ No newline at end of file