X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Fplugins%2Forg.argeo.jcr.ui.explorer%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2Fui%2Fexplorer%2Fmodel%2FRepositoriesNode.java;h=975c87cba480d48f9414e46f647579e2e60e3ca9;hb=9ddbb2bd3c36ea4e9718cf8858edeaee418ea7e0;hp=83a1f589885a1d0d69558edd6501fb436913555b;hpb=f8040c479e5c098c9ef1809baefd05c00dccdc63;p=lgpl%2Fargeo-commons.git diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/RepositoriesNode.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/RepositoriesNode.java index 83a1f5898..975c87cba 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/RepositoriesNode.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/RepositoriesNode.java @@ -1,12 +1,38 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * 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.jcr.ui.explorer.model; +import java.util.Hashtable; import java.util.Map; +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.ArgeoException; +import org.argeo.eclipse.ui.ErrorFeedback; import org.argeo.eclipse.ui.TreeParent; +import org.argeo.jcr.ArgeoJcrConstants; +import org.argeo.jcr.ArgeoNames; +import org.argeo.jcr.JcrUtils; import org.argeo.jcr.RepositoryRegister; +import org.argeo.jcr.security.JcrKeyring; /** * UI Tree component. Implements the Argeo abstraction of a @@ -19,17 +45,23 @@ import org.argeo.jcr.RepositoryRegister; * kept here. */ -public class RepositoriesNode extends TreeParent { +public class RepositoriesNode extends TreeParent implements ArgeoNames { private final RepositoryRegister repositoryRegister; + private final RepositoryFactory repositoryFactory; + + private final JcrKeyring jcrKeyring; public RepositoriesNode(String name, RepositoryRegister repositoryRegister, - TreeParent parent) { + RepositoryFactory repositoryFactory, TreeParent parent, + JcrKeyring jcrKeyring) { super(name); this.repositoryRegister = repositoryRegister; + this.repositoryFactory = repositoryFactory; + this.jcrKeyring = jcrKeyring; } /** - * Override normal behaviour to initialize the various repositories only at + * Override normal behavior to initialize the various repositories only at * request time */ @Override @@ -44,10 +76,48 @@ public class RepositoriesNode extends TreeParent { super.addChild(new RepositoryNode(name, refRepos.get(name), this)); } + + // remote + if (jcrKeyring != null) { + try { + addRemoteRepositories(jcrKeyring); + } catch (RepositoryException e) { + throw new ArgeoException( + "Cannot browse remote repositories", e); + } + } return super.getChildren(); } } + protected void addRemoteRepositories(JcrKeyring jcrKeyring) + throws RepositoryException { + Session userSession = jcrKeyring.getSession(); + Node userHome = JcrUtils.getUserHome(userSession); + if (userHome != null && userHome.hasNode(ARGEO_REMOTE)) { + NodeIterator it = userHome.getNode(ARGEO_REMOTE).getNodes(); + while (it.hasNext()) { + Node remoteNode = it.nextNode(); + String uri = remoteNode.getProperty(ARGEO_URI).getString(); + try { + Hashtable params = new Hashtable(); + params.put(ArgeoJcrConstants.JCR_REPOSITORY_URI, uri); + params.put(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS, + remoteNode.getName()); + Repository repository = repositoryFactory + .getRepository(params); + RemoteRepositoryNode remoteRepositoryNode = new RemoteRepositoryNode( + remoteNode.getName(), repository, this, jcrKeyring, + remoteNode.getPath()); + super.addChild(remoteRepositoryNode); + } catch (Exception e) { + ErrorFeedback.show("Cannot add remote repository " + + remoteNode, e); + } + } + } + } + public void registerNewRepository(String alias, Repository repository) { // TODO: implement this // Create a new RepositoryNode Object @@ -55,7 +125,7 @@ public class RepositoriesNode extends TreeParent { // super.addChild(new RepositoriesNode(...)); } - /** Returns the {@link RepositoryRegister} wrapped by thgis object. */ + /** Returns the {@link RepositoryRegister} wrapped by this object. */ public RepositoryRegister getRepositoryRegister() { return repositoryRegister; }