package org.tmatesoft.svn.core.internal.wc2.ng;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNMergeRangeList;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.internal.wc17.SVNWCContext;
import org.tmatesoft.svn.core.internal.wc2.SvnWcGeneration;
import org.tmatesoft.svn.core.io.SVNLocationEntry;
import org.tmatesoft.svn.core.wc2.SvnOperationFactory;
import org.tmatesoft.svn.core.wc2.SvnSuggestMergeSources;
public class SvnNgSuggestMergeSources extends SvnNgOperationRunner<Collection<SVNURL>, SvnSuggestMergeSources> {
@Override
public boolean isApplicable(SvnSuggestMergeSources operation, SvnWcGeneration wcGeneration) throws SVNException {
return operation.getFirstTarget().isURL()
|| SvnOperationFactory.detectWcGeneration(operation.getFirstTarget().getFile(), true) == SvnWcGeneration.V17;
}
@Override
public SvnWcGeneration getWcGeneration() {
return SvnWcGeneration.NOT_DETECTED;
}
@Override
protected Collection<SVNURL> run(SVNWCContext context) throws SVNException {
SVNURL[] root = new SVNURL[1];
Map<String, Map<String, SVNMergeRangeList>> mergeInfoCatalog = SvnNgMergeinfoUtil.getMergeInfo(context, getRepositoryAccess(), getOperation().getFirstTarget(), false, false, root);
Map<String, SVNMergeRangeList> mergeInfo = null;
List<SVNURL> suggestions = new ArrayList<SVNURL>();
if (mergeInfoCatalog != null && !mergeInfoCatalog.isEmpty()) {
mergeInfo = mergeInfoCatalog.get(mergeInfoCatalog.keySet().iterator().next());
}
SVNLocationEntry copySource = getRepositoryAccess().getCopySource(getOperation().getFirstTarget(), getOperation().getFirstTarget().getPegRevision());
if (copySource != null && copySource.getPath() != null) {
suggestions.add(root[0].appendPath(copySource.getPath(), false));
}
if (mergeInfo != null) {
for (String path : mergeInfo.keySet()) {
SVNURL url = root[0].appendPath(path, false);
if (!suggestions.contains(url)) {
suggestions.add(url);
}
}
}
return suggestions;
}
}