X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=plugins%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fviews%2FDistributionsView.java;h=09d3fa70148bd52c2c1ea6744cdd65844225821f;hb=60fc68b90de1f65a0d64fe385033e1a9e6de5eef;hp=f4d2de99d7f493e83fa6c58db2d66e4926bb1ff2;hpb=88e18bf166e46c0c411ade08ad9253faa5abe141;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/DistributionsView.java b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/DistributionsView.java index f4d2de99d..09d3fa701 100644 --- a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/DistributionsView.java +++ b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/DistributionsView.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2012 Mathieu Baudier + * 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. @@ -45,14 +45,19 @@ 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.DistImages; import org.argeo.slc.client.ui.dist.DistPlugin; import org.argeo.slc.client.ui.dist.commands.CopyWorkspace; import org.argeo.slc.client.ui.dist.commands.CreateWorkspace; import org.argeo.slc.client.ui.dist.commands.DeleteWorkspace; -import org.argeo.slc.client.ui.dist.commands.ManageWorkspaceAuth; +import org.argeo.slc.client.ui.dist.commands.Fetch; import org.argeo.slc.client.ui.dist.commands.NormalizeDistribution; +import org.argeo.slc.client.ui.dist.commands.PublishWorkspace; +import org.argeo.slc.client.ui.dist.commands.RegisterRepository; +import org.argeo.slc.client.ui.dist.commands.UnregisterRemoteRepo; import org.argeo.slc.client.ui.dist.editors.DistributionEditor; import org.argeo.slc.client.ui.dist.editors.DistributionEditorInput; +import org.argeo.slc.client.ui.dist.utils.ArtifactNamesComparator; import org.argeo.slc.client.ui.dist.utils.CommandHelpers; import org.argeo.slc.jcr.SlcNames; import org.argeo.slc.repo.RepoConstants; @@ -82,6 +87,7 @@ import org.eclipse.swt.dnd.DragSourceEvent; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.dnd.TransferData; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; @@ -110,22 +116,50 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames | SWT.FULL_SELECTION | SWT.BORDER); TreeViewerColumn col = new TreeViewerColumn(viewer, SWT.NONE); - col.getColumn().setWidth(200); + col.getColumn().setWidth(400); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { - if (element instanceof RepoElem) - return ((RepoElem) element).getLabel(); - return element.toString(); + if (element instanceof BrowserElem) + return ((BrowserElem) element).getLabel(); + else + return element.toString(); + } + + @Override + public Image getImage(Object element) { + if (element instanceof BrowserElem) { + BrowserElem bElement = (BrowserElem) element; + if (bElement instanceof RepoElem) { + if (bElement.isHomeRepo()) + return DistImages.IMG_HOME_REPO; + else if (bElement.isReadOnly) + return DistImages.IMG_REPO_READONLY; + else + return DistImages.IMG_REPO; + + } else if (bElement instanceof DistribGroupElem) { + if (bElement.isReadOnly) + return DistImages.IMG_DISTGRP_READONLY; + else + return DistImages.IMG_DISTGRP; + } + } else if (element instanceof DistributionElem) + return DistImages.IMG_WKSP; + return null; } }); - final Tree table = viewer.getTree(); - table.setHeaderVisible(false); - table.setLinesVisible(false); + final Tree tree = viewer.getTree(); + tree.setHeaderVisible(false); + tree.setLinesVisible(false); viewer.setContentProvider(new DistributionsContentProvider()); viewer.addDoubleClickListener(new DistributionsDCL()); + viewer.setComparator(new BrowserElementComparator()); + + // Enable selection retrieving from outside the view + getSite().setSelectionProvider(viewer); // Drag'n drop Transfer[] tt = new Transfer[] { TextTransfer.getInstance() }; @@ -175,68 +209,179 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames } viewer.setInput(nodeRepository); - } /** Programatically configure the context menu */ protected void contextMenuAboutToShow(IMenuManager menuManager) { IWorkbenchWindow window = DistPlugin.getDefault().getWorkbench() .getActiveWorkbenchWindow(); + // Most of the implemented commands support only one selected + // element + boolean singleElement = ((IStructuredSelection) viewer.getSelection()) + .size() == 1; // Get Current selected item : Object firstElement = ((IStructuredSelection) viewer.getSelection()) .getFirstElement(); - if (firstElement instanceof TreeParent) { - TreeParent tp = (TreeParent) firstElement; - String wsName = tp.getName(); + if (firstElement instanceof TreeParent + || firstElement instanceof BrowserElem) { + String wsName = null; + String targetRepoPath = null; - // Build conditions depending on element type (repo or distribution - // for the time being) - boolean isDistribElem = false; // , isRepoElem = false; + // Build conditions depending on element type + boolean isDistribElem = false, isRepoElem = false; + boolean isHomeRepo = false, isReadOnly = true; - // if (tp instanceof RepositoryElem){ - // isRepoElem = true; - // } else - if (tp instanceof DistributionElem) { + if (firstElement instanceof DistributionElem) { + DistributionElem de = (DistributionElem) firstElement; isDistribElem = true; + wsName = de.getName(); + isReadOnly = de.isReadOnly(); + } else if (firstElement instanceof RepoElem) { + RepoElem re = (RepoElem) firstElement; + isRepoElem = true; + targetRepoPath = re.getRepoPath(); + isHomeRepo = re.isHomeRepo(); + isReadOnly = re.isReadOnly(); } // create workspace CommandHelpers.refreshCommand(menuManager, window, CreateWorkspace.ID, CreateWorkspace.DEFAULT_LABEL, - CreateWorkspace.DEFAULT_ICON_PATH, !isDistribElem); + CreateWorkspace.DEFAULT_ICON_PATH, isRepoElem + && singleElement && !isReadOnly); + // publish workspace + CommandHelpers.refreshCommand(menuManager, window, + PublishWorkspace.ID, PublishWorkspace.DEFAULT_LABEL, + PublishWorkspace.DEFAULT_ICON_PATH, isDistribElem + && singleElement && !isReadOnly); - // Normalize workspace + // Register a remote repository + CommandHelpers.refreshCommand(menuManager, window, + RegisterRepository.ID, RegisterRepository.DEFAULT_LABEL, + RegisterRepository.DEFAULT_ICON_PATH, isRepoElem + && singleElement); + + // Unregister a remote repository Map params = new HashMap(); + params.put(UnregisterRemoteRepo.PARAM_REPO_PATH, targetRepoPath); + CommandHelpers.refreshParameterizedCommand(menuManager, window, + UnregisterRemoteRepo.ID, + UnregisterRemoteRepo.DEFAULT_LABEL, + UnregisterRemoteRepo.DEFAULT_ICON_PATH, isRepoElem + && !isHomeRepo && singleElement, params); + + // Fetch repository + params = new HashMap(); + params.put(Fetch.PARAM_TARGET_REPO, targetRepoPath); + CommandHelpers.refreshParameterizedCommand(menuManager, window, + Fetch.ID, Fetch.DEFAULT_LABEL, Fetch.DEFAULT_ICON_PATH, + !isDistribElem && singleElement && !isReadOnly, params); + + // Normalize workspace + params = new HashMap(); params.put(NormalizeDistribution.PARAM_WORKSPACE, wsName); CommandHelpers.refreshParameterizedCommand(menuManager, window, NormalizeDistribution.ID, NormalizeDistribution.DEFAULT_LABEL, - NormalizeDistribution.DEFAULT_ICON_PATH, isDistribElem, - params); + NormalizeDistribution.DEFAULT_ICON_PATH, isDistribElem + && singleElement && !isReadOnly, params); // Copy workspace params = new HashMap(); params.put(CopyWorkspace.PARAM_WORKSPACE_NAME, wsName); CommandHelpers.refreshParameterizedCommand(menuManager, window, CopyWorkspace.ID, CopyWorkspace.DEFAULT_LABEL, - CopyWorkspace.DEFAULT_ICON_PATH, isDistribElem, params); + CopyWorkspace.DEFAULT_ICON_PATH, isDistribElem + && singleElement, params); - // Delete Workspace + // Clear Workspace params = new HashMap(); params.put(DeleteWorkspace.PARAM_WORKSPACE_NAME, wsName); CommandHelpers.refreshParameterizedCommand(menuManager, window, DeleteWorkspace.ID, DeleteWorkspace.DEFAULT_LABEL, - DeleteWorkspace.DEFAULT_ICON_PATH, isDistribElem, params); + DeleteWorkspace.DEFAULT_ICON_PATH, isDistribElem + && singleElement && !isReadOnly, params); + + // // Manage workspace authorizations + // params = new HashMap(); + // params.put(ManageWorkspaceAuth.PARAM_WORKSPACE_NAME, wsName); + // CommandHelpers.refreshParameterizedCommand(menuManager, window, + // ManageWorkspaceAuth.ID, ManageWorkspaceAuth.DEFAULT_LABEL, + // ManageWorkspaceAuth.DEFAULT_ICON_PATH, isDistribElem + // && singleElement && !isReadOnly, params); + } + // } catch (RepositoryException e) { + // throw new SlcException("unexpected errror while " + // + "building context menu", e); + // } + } - // Manage workspace authorizations - params = new HashMap(); - params.put(ManageWorkspaceAuth.PARAM_WORKSPACE_NAME, wsName); - CommandHelpers.refreshParameterizedCommand(menuManager, window, - ManageWorkspaceAuth.ID, ManageWorkspaceAuth.DEFAULT_LABEL, - ManageWorkspaceAuth.DEFAULT_ICON_PATH, isDistribElem, - params); - } + /** + * Exposes some Repository and workspace information about the selected + * element without exposing the UI model + */ + public class DistributionViewSelectedElement { + public boolean isRepository = false; + public boolean isWorkspaceGroup = false; + public boolean isWorkspace = false; + public String repositoryDescription; + public Node repoNode; + public String wkspName; + public String wkspPrefix; + public Repository repository; + public Credentials credentials; + } + + /** + * Returns a {@see DistributionViewSelectedElement} if one and only one + * valid element is currently selected. + * + */ + public DistributionViewSelectedElement getSelectedElement() { + + IStructuredSelection iss = (IStructuredSelection) viewer.getSelection(); + if (iss.isEmpty() || iss.size() > 1) + return null; + + DistributionViewSelectedElement dvse = new DistributionViewSelectedElement(); + Object obj = iss.getFirstElement(); + if (obj instanceof RepoElem) { + RepoElem re = (RepoElem) obj; + dvse.isRepository = true; + dvse.repository = re.getRepository(); + dvse.repoNode = re.getRepoNode(); + dvse.credentials = re.getCredentials(); + dvse.repositoryDescription = getRepositoryDescription(re); + } else if (obj instanceof DistribGroupElem) { + DistribGroupElem dge = (DistribGroupElem) obj; + dvse.isWorkspaceGroup = true; + dvse.repository = dge.getRepoElem().getRepository(); + dvse.repoNode = dge.getRepoElem().getRepoNode(); + dvse.credentials = dge.getRepoElem().getCredentials(); + dvse.wkspPrefix = dge.getLabel(); + dvse.repositoryDescription = getRepositoryDescription(dge + .getRepoElem()); + } else if (obj instanceof DistributionElem) { + DistributionElem de = (DistributionElem) obj; + dvse.isWorkspace = true; + dvse.repository = de.getRepoElem().getRepository(); + dvse.repoNode = de.getRepoElem().getRepoNode(); + dvse.credentials = de.getRepoElem().getCredentials(); + dvse.wkspName = de.getName(); + dvse.repositoryDescription = getRepositoryDescription(de + .getRepoElem()); + } + return dvse; + } + + private String getRepositoryDescription(RepoElem repo) { + StringBuffer repoDesc = new StringBuffer(); + repoDesc.append(repo.getLabel()); + repoDesc.append(" ("); + repoDesc.append(JcrUtils.get(repo.getRepoNode(), ARGEO_URI)); + repoDesc.append(")"); + return repoDesc.toString(); } @Override @@ -244,9 +389,6 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames viewer.getTree().setFocus(); } - /* - * DEPENDENCY INJECTION - */ /** * Force refresh of the whole view */ @@ -254,18 +396,6 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames viewer.setContentProvider(new DistributionsContentProvider()); } - public void setNodeRepository(Repository repository) { - this.nodeRepository = repository; - } - - public void setRepositoryFactory(RepositoryFactory repositoryFactory) { - this.repositoryFactory = repositoryFactory; - } - - public void setKeyring(Keyring keyring) { - this.keyring = keyring; - } - /* * INTERNAL CLASSES */ @@ -287,7 +417,15 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames while (repos.hasNext()) { Node repoNode = repos.nextNode(); if (repoNode.isNodeType(ArgeoTypes.ARGEO_REMOTE_REPOSITORY)) { - repositories.add(new RepoElem(repoNode)); + if (RepoConstants.DEFAULT_JAVA_REPOSITORY_ALIAS + .equals(repoNode.getName())) + repositories + .add(new RepoElem(repoNode, true, false)); + else if (repoNode.hasNode(ARGEO_PASSWORD)) + repositories.add(new RepoElem(repoNode)); + else + repositories + .add(new RepoElem(repoNode, false, true)); } } } catch (RepositoryException e) { @@ -301,8 +439,8 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames } public Object[] getChildren(Object parentElement) { - if (parentElement instanceof RepoElem) { - return ((RepoElem) parentElement).getChildren(); + if (parentElement instanceof BrowserElem) { + return ((BrowserElem) parentElement).getChildren(); } else if (parentElement instanceof DistributionElem) { return ((DistributionElem) parentElement).getChildren(); } @@ -310,12 +448,12 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames } public Object getParent(Object element) { - // TODO register repo elem in distirbution elem? + // TODO register repo elem in distribution elem? return null; } public boolean hasChildren(Object element) { - if (element instanceof RepoElem) { + if (element instanceof BrowserElem) { return true; } else if (element instanceof DistributionElem) { return false; @@ -329,16 +467,60 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames repositories = new ArrayList(); JcrUtils.logoutQuietly(nodeSession); } + } + + private class BrowserElementComparator extends ArtifactNamesComparator { + @Override + public int category(Object element) { + // Home repository always first + if (element instanceof RepoElem + && ((RepoElem) element).isHomeRepo()) + return 2; + else + return super.category(element); + } + } + + /** Abstract class to simplify UI conditions build */ + abstract class BrowserElem { + private boolean isHomeRepo = false; + private boolean isReadOnly = false; + public BrowserElem(boolean isHomeRepo, boolean isReadOnly) { + this.isHomeRepo = isHomeRepo; + this.isReadOnly = isReadOnly; + } + + public BrowserElem() { + } + + public abstract String getLabel(); + + public abstract Object[] getChildren(); + + public void dispose() { + } + + public boolean isHomeRepo() { + return isHomeRepo; + } + + public boolean isReadOnly() { + return isReadOnly; + } } /** A software repository */ - private class RepoElem { + private class RepoElem extends BrowserElem { private Node repoNode; - private Repository repository; private Credentials credentials; + public RepoElem(Node repoNode, boolean isHomeRepo, boolean isReadOnly) { + super(isHomeRepo, isReadOnly); + this.repoNode = repoNode; + } + public RepoElem(Node repoNode) { this.repoNode = repoNode; } @@ -375,17 +557,26 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames session = repository.login(credentials); String[] workspaceNames = session.getWorkspace() .getAccessibleWorkspaceNames(); - List distributionElems = new ArrayList(); + // List distributionElems = new + // ArrayList(); + Map children = new HashMap(); for (String workspaceName : workspaceNames) { - Node workspaceNode = repoNode.hasNode(workspaceName) ? repoNode - .getNode(workspaceName) : repoNode - .addNode(workspaceName); - repoNode.getSession().save(); - distributionElems.add(new DistributionElem(this, - workspaceNode)); - // FIXME remove deleted workspaces + // filter technical workspaces + // FIXME: rely on a more robust rule than just wksp name + if (workspaceName.lastIndexOf('-') > 0) { + String prefix = workspaceName.substring(0, + workspaceName.lastIndexOf('-')); + if (!repoNode.hasNode(workspaceName)) + repoNode.addNode(workspaceName); + repoNode.getSession().save(); + if (!children.containsKey(prefix)) { + children.put(prefix, new DistribGroupElem( + RepoElem.this, prefix)); + } + // FIXME remove deleted workspaces + } } - return distributionElems.toArray(); + return children.values().toArray(); } catch (RepositoryException e) { throw new SlcException( "Cannot list workspaces for " + repoNode, e); @@ -394,13 +585,6 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames } } - public void dispose() { - } - - public Node getRepoNode() { - return repoNode; - } - public String getRepoPath() { try { return repoNode.getPath(); @@ -418,6 +602,68 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames return credentials; } + public Node getRepoNode() { + return repoNode; + } + + } + + /** + * Abstracts a group of distribution, that is a bunch of workspaces with + * same prefix. + */ + private class DistribGroupElem extends BrowserElem { + private RepoElem repoElem; + private String name; + + public DistribGroupElem(RepoElem repoElem, String prefix) { + super(repoElem.isHomeRepo(), repoElem.isReadOnly()); + this.repoElem = repoElem; + this.name = prefix; + } + + public Object[] getChildren() { + repoElem.connect(); + Session session = null; + try { + Repository repository = repoElem.getRepository(); + Node repoNode = repoElem.getRepoNode(); + session = repository.login(repoElem.getCredentials()); + + String[] workspaceNames = session.getWorkspace() + .getAccessibleWorkspaceNames(); + List distributionElems = new ArrayList(); + for (String workspaceName : workspaceNames) { + // filter technical workspaces + if (workspaceName.startsWith(name)) { + Node workspaceNode = repoNode.hasNode(workspaceName) ? repoNode + .getNode(workspaceName) : repoNode + .addNode(workspaceName); + distributionElems.add(new DistributionElem(repoElem, + workspaceNode)); + // FIXME remove deleted workspaces + } + } + return distributionElems.toArray(); + } catch (RepositoryException e) { + throw new SlcException("Cannot list workspaces for prefix " + + name, e); + } finally { + JcrUtils.logoutQuietly(session); + } + } + + public String getLabel() { + return name; + } + + public void dispose() { + } + + public RepoElem getRepoElem() { + return repoElem; + } + } /** Abstracts a distribution, that is a workspace */ @@ -464,6 +710,10 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames public Credentials getCredentials() { return repoElem.getCredentials(); } + + public boolean isReadOnly() { + return repoElem.isReadOnly(); + } } /** Listens to drag */ @@ -583,13 +833,6 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames protected IStatus run(IProgressMonitor eclipseMonitor) { long begin = System.currentTimeMillis(); try { - // Not implemented in Davex Jackrabbit v2.2 - // Query countQuery = sourceSession.getWorkspace() - // .getQueryManager() - // .createQuery("//element(*, nt:file)", Query.XPATH); - // QueryResult result = countQuery.execute(); - // Long expectedCount = result.getNodes().getSize(); - Query countQuery = sourceSession .getWorkspace() .getQueryManager() @@ -597,12 +840,6 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames Query.JCR_SQL2); QueryResult result = countQuery.execute(); Long expectedCount = result.getNodes().getSize(); - // Long expectedCount = - // result.getRows().nextRow().getValues()[0] - // .getLong(); - - // Long expectedCount = JcrUtils.countFiles(sourceSession - // .getRootNode()); if (log.isDebugEnabled()) log.debug("Will copy " + expectedCount + " files..."); @@ -642,10 +879,11 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames if (obj instanceof DistributionElem) { DistributionElem distributionElem = (DistributionElem) obj; DistributionEditorInput dei = new DistributionEditorInput( - distributionElem.getName(), distributionElem - .getRepoElem().getRepository(), - distributionElem.getWorkspaceName(), - distributionElem.getCredentials()); + distributionElem.getName(), + getRepositoryDescription(distributionElem.getRepoElem()), + distributionElem.getRepoElem().getRepository(), + distributionElem.getWorkspaceName(), distributionElem + .getCredentials()); try { DistPlugin.getDefault().getWorkbench() .getActiveWorkbenchWindow().getActivePage() @@ -658,71 +896,18 @@ public class DistributionsView extends ViewPart implements SlcNames, ArgeoNames } } - // - // try { - // nodeSession = nodeRepository.login(); - // NodeIterator repos = JcrUtils.mkdirs( - // nodeSession, - // UserJcrUtils.getUserHome(nodeSession).getPath() - // + RepoConstants.REPOSITORIES_BASE_PATH).getNodes(); - // while (repos.hasNext()) { - // Node repository = repos.nextNode(); - // String label = null; - // if (repository.isNodeType(NodeType.MIX_TITLE)) { - // label = repository.getProperty(Property.JCR_TITLE) - // .getString(); - // } - // - // if (repository.isNodeType(ArgeoTypes.ARGEO_REMOTE_REPOSITORY)) { - // String uri = repository.getProperty(ARGEO_URI).getString(); - // Credentials credentials = null; - // if (repository.hasProperty(ARGEO_USER_ID)) { - // String userId = repository.getProperty(ARGEO_USER_ID) - // .getString(); - // credentials = new SimpleCredentials(userId, - // "".toCharArray()); - // } - // Repository remoteRepository = ArgeoJcrUtils - // .getRepositoryByUri(repositoryFactory, uri); - // if (label == null) - // label = repository.getName(); - // repositories.add(new RepositoryElem(label, - // remoteRepository, credentials)); - // } - // } - // } catch (RepositoryException e) { - // throw new ArgeoException("Cannot read registered repositories", e); - // } - - // Remote - // String uri = null; - // Credentials credentials = null; - // Repository remoteRepository = null; - - // try { - // uri = "http://dev.argeo.org/org.argeo.jcr.webapp/pub/java"; - // credentials = new GuestCredentials(); - // remoteRepository = - // ArgeoJcrUtils.getRepositoryByUri(repositoryFactory, uri); - // repositories.add(new RepositoryElem("anonymous@dev.argeo.org//java", - // remoteRepository, credentials)); - // } catch (Exception e) { - // e.printStackTrace(); - // } - - // uri = "http://localhost:7070/org.argeo.jcr.webapp/pub/java"; - // credentials = new GuestCredentials(); - // remoteRepository = - // ArgeoJcrUtils.getRepositoryByUri(repositoryFactory, uri); - // repositories.add(new RepositoryElem("anonymous@localhost//java", - // remoteRepository, credentials)); - - // uri = "http://localhost:7070/org.argeo.jcr.webapp/remoting/java"; - // credentials = new SimpleCredentials(System.getProperty("user.name"), - // "".toCharArray()); - // remoteRepository = - // ArgeoJcrUtils.getRepositoryByUri(repositoryFactory, uri); - // repositories.add(new RepositoryElem("@localhost//java", - // remoteRepository, credentials)); + /* + * DEPENDENCY INJECTION + */ + public void setRepositoryFactory(RepositoryFactory repositoryFactory) { + this.repositoryFactory = repositoryFactory; + } + + public void setKeyring(Keyring keyring) { + this.keyring = keyring; + } + public void setNodeRepository(Repository repository) { + this.nodeRepository = repository; + } } \ No newline at end of file