/*
- * 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.
import javax.jcr.RepositoryFactory;
import javax.jcr.Session;
import javax.jcr.nodetype.NodeType;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryResult;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.DistUiUtils;
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.utils.CommandHelpers;
import org.argeo.slc.jcr.SlcNames;
import org.argeo.slc.repo.RepoConstants;
+import org.argeo.slc.repo.RepoUtils;
import org.argeo.util.security.Keyring;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
TreeViewerColumn col = new TreeViewerColumn(viewer, SWT.NONE);
col.getColumn().setWidth(200);
- // col.getColumn().setText("Workspace");
col.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
if (!repos.hasNode(alias)) {
Node repoNode = repos.addNode(alias,
ArgeoTypes.ARGEO_REMOTE_REPOSITORY);
- repoNode.setProperty(ARGEO_URI, alias);
+ repoNode.setProperty(ARGEO_URI, "vm:///" + alias);
repoNode.addMixin(NodeType.MIX_TITLE);
- repoNode.setProperty(Property.JCR_TITLE, "vm://" + alias);
+ repoNode.setProperty(Property.JCR_TITLE, "Internal "
+ + alias + " repository");
nodeSession.save();
}
}
Object firstElement = ((IStructuredSelection) viewer.getSelection())
.getFirstElement();
- if (firstElement instanceof TreeParent) {
- TreeParent tp = (TreeParent) firstElement;
- String wsName = tp.getName();
+ if (firstElement instanceof TreeParent
+ || firstElement instanceof RepoElem) {
+ String wsName = null;
// Build conditions depending on element type (repo or distribution
// for the time being)
boolean isDistribElem = false; // , isRepoElem = false;
- // if (tp instanceof RepositoryElem){
- // isRepoElem = true;
- // } else
- if (tp instanceof DistributionElem) {
+ if (firstElement instanceof DistributionElem) {
isDistribElem = true;
+ wsName = ((DistributionElem) firstElement).getName();
}
// create workspace
protected void connect() {
if (repository != null)
return;
- repository = DistUiUtils.getRepository(repositoryFactory, keyring,
- repoNode);
- credentials = DistUiUtils.getRepositoryCredentials(keyring,
+ repository = RepoUtils.getRepository(repositoryFactory, keyring,
repoNode);
+ credentials = RepoUtils.getRepositoryCredentials(keyring, repoNode);
}
public String getLabel() {
String[] workspaceNames = session.getWorkspace()
.getAccessibleWorkspaceNames();
List<DistributionElem> distributionElems = new ArrayList<DistributionElem>();
- for (String workspace : workspaceNames)
- distributionElems.add(new DistributionElem(this, workspace,
- credentials));
- // FIXME remove deleted workspaces
+ 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
+ }
return distributionElems.toArray();
} catch (RepositoryException e) {
throw new SlcException(
connect();
return repository;
}
+
+ public Credentials getCredentials() {
+ return credentials;
+ }
+
}
/** Abstracts a distribution, that is a workspace */
private static class DistributionElem extends TreeParent {
private final RepoElem repoElem;
private final Node workspaceNode;
- private final String workspaceName;
- private final Credentials credentials;
- public DistributionElem(RepoElem repoElem, String workspaceName,
- Credentials credentials) {
- super(workspaceName);
+ public DistributionElem(RepoElem repoElem, Node workspaceNode) {
+ super(JcrUtils.getNameQuietly(workspaceNode));
this.repoElem = repoElem;
- try {
- // TODO move it to repo elem
- this.workspaceNode = repoElem.getRepoNode().hasNode(
- workspaceName) ? repoElem.getRepoNode().getNode(
- workspaceName) : repoElem.getRepoNode().addNode(
- workspaceName);
- repoElem.getRepoNode().getSession().save();
- } catch (RepositoryException e) {
- throw new SlcException("Cannot get or add workspace node "
- + workspaceName, e);
- }
- this.workspaceName = workspaceName;
- this.credentials = credentials;
+ this.workspaceNode = workspaceNode;
}
public Node getWorkspaceNode() {
}
public String getWorkspaceName() {
- return workspaceName;
+ return JcrUtils.getNameQuietly(workspaceNode);
}
public String getWorkspacePath() {
return workspaceNode.getPath();
} catch (RepositoryException e) {
throw new SlcException("Cannot get or add workspace path "
- + workspaceName, e);
+ + getWorkspaceName(), e);
}
}
return workspaceNode.getParent().getPath();
} catch (RepositoryException e) {
throw new SlcException("Cannot get or add workspace path "
- + workspaceName, e);
+ + getWorkspaceName(), e);
}
}
}
public Credentials getCredentials() {
- return credentials;
+ return repoElem.getCredentials();
}
}
/** Listens to drag */
class ViewDragListener extends DragSourceAdapter {
public void dragSetData(DragSourceEvent event) {
- if (log.isDebugEnabled())
- log.debug("Drag started: " + event);
IStructuredSelection selection = (IStructuredSelection) viewer
.getSelection();
if (selection.getFirstElement() instanceof DistributionElem) {
.getFirstElement();
if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
event.data = de.getWorkspacePath();
- if (log.isDebugEnabled())
- log.debug("Distribution drag for " + event.data);
}
}
}
try {
String sourceWorkspace = sourceDist.getWorkspaceName();
- Repository sourceRepository = DistUiUtils.getRepository(
+ Repository sourceRepository = RepoUtils.getRepository(
repositoryFactory, keyring, sourceDist
.getWorkspaceNode().getParent());
- Credentials sourceCredentials = DistUiUtils
+ Credentials sourceCredentials = RepoUtils
.getRepositoryCredentials(keyring, sourceDist
.getWorkspaceNode().getParent());
String targetWorkspace = sourceWorkspace;
- Repository targetRepository = DistUiUtils.getRepository(
+ Repository targetRepository = RepoUtils.getRepository(
repositoryFactory, keyring, targetRepo.getRepoNode());
- Credentials targetCredentials = DistUiUtils
+ Credentials targetCredentials = RepoUtils
.getRepositoryCredentials(keyring,
targetRepo.getRepoNode());
targetWorkspace);
}
- new WorkspaceMergeJob(sourceSession, targetSession).schedule();
+ Job workspaceMergeJob = new WorkspaceMergeJob(sourceSession,
+ targetSession);
+ workspaceMergeJob.setUser(true);
+ workspaceMergeJob.schedule();
return true;
} catch (RepositoryException e) {
throw new SlcException("Cannot process drop from " + sourceDist
}
@Override
- protected IStatus run(IProgressMonitor monitor) {
+ protected IStatus run(IProgressMonitor eclipseMonitor) {
long begin = System.currentTimeMillis();
try {
- // Not implemented in Davex Jackrabbit v2.2
- // Long fileCount = sourceSession
- // .getWorkspace()
- // .getQueryManager()
- // .createQuery("select count(*) from [nt:file]",
- // Query.JCR_SQL2).execute().getRows().nextRow()
- // .getValues()[0].getLong();
+ Query countQuery = sourceSession
+ .getWorkspace()
+ .getQueryManager()
+ .createQuery("select file from [nt:file] as file",
+ Query.JCR_SQL2);
+ QueryResult result = countQuery.execute();
+ Long expectedCount = result.getNodes().getSize();
+ if (log.isDebugEnabled())
+ log.debug("Will copy " + expectedCount + " files...");
- ArgeoMonitor argeoMonitor = new EclipseArgeoMonitor(monitor);
- monitor.beginTask("Copy files", ArgeoMonitor.UNKNOWN);
+ ArgeoMonitor monitor = new EclipseArgeoMonitor(eclipseMonitor);
+ eclipseMonitor
+ .beginTask("Copy files", expectedCount.intValue());
Long count = JcrUtils.copyFiles(sourceSession.getRootNode(),
- targetSession.getRootNode(), true, argeoMonitor);
+ targetSession.getRootNode(), true, monitor);
+ monitor.done();
long duration = (System.currentTimeMillis() - begin) / 1000;// in
// s
if (log.isDebugEnabled())
} catch (RepositoryException e) {
return new Status(IStatus.ERROR, DistPlugin.ID, "Cannot merge",
e);
+ } finally {
+ JcrUtils.logoutQuietly(sourceSession);
+ JcrUtils.logoutQuietly(targetSession);
}
}
}
}
}
}
-
- //
- // 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));
-
}
\ No newline at end of file