package org.tmatesoft.svn.core.internal.wc2.remote; import java.io.File; import java.util.Collection; import java.util.Iterator; import java.util.Map; import org.tmatesoft.svn.core.SVNErrorMessage; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNLock; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.internal.util.SVNEncodingUtil; import org.tmatesoft.svn.core.internal.util.SVNHashMap; import org.tmatesoft.svn.core.internal.util.SVNHashSet; import org.tmatesoft.svn.core.internal.util.SVNURLUtil; import org.tmatesoft.svn.core.internal.wc.SVNEventFactory; import org.tmatesoft.svn.core.internal.wc2.SvnRemoteOperationRunner; import org.tmatesoft.svn.core.internal.wc2.SvnWcGeneration; import org.tmatesoft.svn.core.io.ISVNLockHandler; import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.wc.ISVNEventHandler; import org.tmatesoft.svn.core.wc.SVNEventAction; import org.tmatesoft.svn.core.wc2.SvnSetLock; import org.tmatesoft.svn.core.wc2.SvnTarget; public class SvnRemoteSetLock extends SvnRemoteOperationRunner<SVNLock, SvnSetLock> implements ISVNLockHandler { public boolean isApplicable(SvnSetLock operation, SvnWcGeneration wcGeneration) throws SVNException { return operation.hasRemoteTargets(); } @Override protected SVNLock run() throws SVNException { int i = 0; SVNURL[] urls = new SVNURL[getOperation().getTargets().size()]; for (SvnTarget target : getOperation().getTargets()) { urls[i++] = target.getURL(); } Collection<String> paths = new SVNHashSet(); SVNURL topURL = SVNURLUtil.condenceURLs(urls, paths, false); if (paths.isEmpty()) { paths.add(""); } Map<String, Long> pathsToRevisions = new SVNHashMap(); for (Iterator<String> p = paths.iterator(); p.hasNext();) { String path = (String) p.next(); path = SVNEncodingUtil.uriDecode(path); pathsToRevisions.put(path, null); } checkCancelled(); SVNRepository repository = getRepositoryAccess().createRepository(topURL, null, true); repository.lock(pathsToRevisions, getOperation().getLockMessage(), getOperation().isStealLock(), this); return getOperation().first(); } public void handleLock(String path, SVNLock lock, SVNErrorMessage error) throws SVNException { if (error != null) { handleEvent(SVNEventFactory.createLockEvent(new File(path), SVNEventAction.LOCK_FAILED, lock, error), ISVNEventHandler.UNKNOWN); } else { handleEvent(SVNEventFactory.createLockEvent(new File(path), SVNEventAction.LOCKED, lock, null), ISVNEventHandler.UNKNOWN); } } public void handleUnlock(String path, SVNLock lock, SVNErrorMessage error) throws SVNException { } }