/*
* ====================================================================
* Copyright (c) 2005-2012 sventon project. All rights reserved.
*
* This software is licensed as described in the file LICENSE, which
* you should have received as part of this distribution. The terms
* are also available at http://www.sventon.org.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.sventon.service.svnkit;
import org.sventon.model.*;
import org.sventon.model.Properties;
import org.tmatesoft.svn.core.*;
import org.tmatesoft.svn.core.io.SVNFileRevision;
import java.util.*;
/**
* Converter for SVNKit specific data structures.
*/
public class SVNKitConverter {
@SuppressWarnings({"unchecked"})
static LogEntry toLogEntry(final SVNLogEntry svnLogEntry) {
return new LogEntry(svnLogEntry.getRevision(),
convertRevisionProperties(svnLogEntry.getRevisionProperties()),
convert(svnLogEntry.getChangedPaths()));
}
static List<FileRevision> convertFileRevisions(final List<SVNFileRevision> revisions) {
final List<FileRevision> pathRevisions = new ArrayList<FileRevision>(revisions.size());
for (SVNFileRevision fileRevision : revisions) {
final FileRevision revision = new FileRevision(fileRevision.getPath(), Revision.create(fileRevision.getRevision()));
final SVNProperties svnProperties = fileRevision.getRevisionProperties();
for (Object o : svnProperties.nameSet()) {
final String revisionPropertyName = (String) o;
final String revisionPropertyValue = svnProperties.getStringValue(revisionPropertyName);
final RevisionProperty revisionProperty = RevisionProperty.byName(revisionPropertyName);
revision.addProperty(revisionProperty, revisionPropertyValue);
}
pathRevisions.add(revision);
}
return pathRevisions;
}
static Properties convertProperties(final SVNProperties svnProperties) {
final Properties props = new Properties();
for (Object o : svnProperties.asMap().keySet()) {
final String key = (String) o;
final String value = SVNPropertyValue.getPropertyAsString(svnProperties.getSVNPropertyValue(key));
props.put(new Property(key), new PropertyValue(value));
}
return props;
}
static DirEntry createDirEntry(final SVNDirEntry dirEntry, final String fullPath) {
final DirEntry.Kind kind = DirEntry.Kind.valueOf(dirEntry.getKind().toString().toUpperCase());
return new DirEntry(fullPath, dirEntry.getName(), dirEntry.getAuthor(), dirEntry.getDate(),
kind, dirEntry.getRevision(), dirEntry.getSize());
}
static List<DirEntry> convertDirEntries(final Collection<SVNDirEntry> svnEntries, final String fullPath) {
final List<DirEntry> entries = new ArrayList<DirEntry>();
for (SVNDirEntry svnEntry : svnEntries) {
entries.add(createDirEntry(svnEntry, fullPath));
}
return entries;
}
private static SortedSet<ChangedPath> convert(final Map<String, SVNLogEntryPath> changedPaths) {
final SortedSet<ChangedPath> convertedPaths = new TreeSet<ChangedPath>();
for (SVNLogEntryPath svnLogEntryPath : changedPaths.values()) {
convertedPaths.add(new ChangedPath(svnLogEntryPath.getPath(), svnLogEntryPath.getCopyPath(),
svnLogEntryPath.getCopyRevision(), ChangeType.parse(svnLogEntryPath.getType())));
}
return convertedPaths;
}
private static Map<RevisionProperty, String> convertRevisionProperties(final SVNProperties revisionProperties) {
final Map<RevisionProperty, String> properties = new HashMap<RevisionProperty, String>();
for (Object o : revisionProperties.nameSet()) {
final String revisionPropertyName = (String) o;
final String revisionPropertyValue = revisionProperties.getStringValue(revisionPropertyName);
final RevisionProperty revisionProperty = RevisionProperty.byName(revisionPropertyName);
properties.put(revisionProperty, revisionPropertyValue);
}
return properties;
}
}