[dna-commits] DNA SVN: r925 - trunk/extensions/dna-connector-svn/src/main/java/org/jboss/dna/connector/svn.

dna-commits at lists.jboss.org dna-commits at lists.jboss.org
Fri May 22 09:14:08 EDT 2009


Author: spagop
Date: 2009-05-22 09:14:08 -0400 (Fri, 22 May 2009)
New Revision: 925

Added:
   trunk/extensions/dna-connector-svn/src/main/java/org/jboss/dna/connector/svn/SVNRepositoryUtil.java
Log:
svn repos connector util class

Added: trunk/extensions/dna-connector-svn/src/main/java/org/jboss/dna/connector/svn/SVNRepositoryUtil.java
===================================================================
--- trunk/extensions/dna-connector-svn/src/main/java/org/jboss/dna/connector/svn/SVNRepositoryUtil.java	                        (rev 0)
+++ trunk/extensions/dna-connector-svn/src/main/java/org/jboss/dna/connector/svn/SVNRepositoryUtil.java	2009-05-22 13:14:08 UTC (rev 925)
@@ -0,0 +1,213 @@
+package org.jboss.dna.connector.svn;
+
+import java.util.Collection;
+import org.jboss.dna.graph.connector.RepositorySourceException;
+import org.jboss.dna.graph.request.InvalidWorkspaceException;
+import org.tmatesoft.svn.core.SVNDirEntry;
+import org.tmatesoft.svn.core.SVNException;
+import org.tmatesoft.svn.core.SVNNodeKind;
+import org.tmatesoft.svn.core.SVNURL;
+import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
+import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
+import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
+import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
+import org.tmatesoft.svn.core.io.SVNRepository;
+import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
+import org.tmatesoft.svn.core.wc.SVNWCUtil;
+
+/**
+ * 
+ * @author Serge Pagop
+ *
+ */
+public class SVNRepositoryUtil {
+
+    /**
+     * @param url
+     * @param sourceName
+     * @return SVNURL
+     */
+    public static SVNURL createSVNURL( String url,
+                                       String sourceName ) {
+
+        SVNURL theUrl;
+        try {
+            theUrl = SVNURL.parseURIDecoded(url);
+        } catch (SVNException e) {
+            // protocol not supported by this connector
+            throw new RepositorySourceException(sourceName,
+                                                "Protocol is not supported by this connector or there is problem in the svn url");
+        }
+        return theUrl;
+    }
+
+    public static void setNewSVNRepositoryLocation( SVNRepository oldRespository,
+                                                    String url,
+                                                    boolean forceReconnect,
+                                                    String sourceName ) {
+        try {
+            oldRespository.setLocation(createSVNURL(url, sourceName), forceReconnect);
+        } catch (SVNException e) {
+            throw new RepositorySourceException(sourceName, "the old url and a new one has got different protocols");
+        }
+    }
+
+    /**
+     * @param repository
+     * @param path
+     * @param revisionNumber
+     * @param sourceName
+     * @return SVNNodeKind
+     */
+    public static SVNNodeKind checkThePath( SVNRepository repository,
+                                            String path,
+                                            long revisionNumber,
+                                            String sourceName ) {
+        SVNNodeKind kind;
+        try {
+            kind = repository.checkPath(path, revisionNumber);
+
+        } catch (SVNException e) {
+            throw new RepositorySourceException(sourceName, e.getMessage());
+        }
+        return kind;
+    }
+
+
+    /**
+     * Create a {@link SVNRepository} from a http protocol.
+     * 
+     * @param url - the url of the repository.
+     * @param username - username credential.
+     * @param password - password credential
+     * @return {@link SVNRepository}.
+     */
+    public static SVNRepository createRepository( String url,
+                                                  String username,
+                                                  String password
+                                                  ) {
+        // for DAV (over http and https)
+        DAVRepositoryFactory.setup();
+        // For File
+        FSRepositoryFactory.setup();
+        // for SVN (over svn and svn+ssh)
+        SVNRepositoryFactoryImpl.setup();
+
+        // The factory knows how to create a DAVRepository
+        SVNRepository repository;
+        try {
+            repository = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(url));
+
+            ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(username, password);
+            repository.setAuthenticationManager(authManager);
+        } catch (SVNException e) {
+            throw new InvalidWorkspaceException(SVNRepositoryConnectorI18n.workspaceDoesNotExist.text(e.getMessage()));
+        }
+        return repository;
+    }
+
+    /**
+     * Util to get the last segment from a path.
+     * 
+     * @param repository
+     * @return last segment.
+     */
+    public static String getRepositoryWorspaceName( SVNRepository repository ) {
+        String[] segments = repository.getLocation().getPath().split("/");
+        return segments[segments.length - 1];
+    }
+
+    private SVNRepositoryUtil() {
+        // prvent construction
+    }
+
+    /**
+     * Check if the repository path exist.
+     * 
+     * @param repos
+     * @return true if repository exist and false otherwise.
+     */
+    public static boolean exist( SVNRepository repos ) {
+        try {
+            SVNNodeKind kind = repos.checkPath("", -1);
+            if (kind == SVNNodeKind.NONE) {
+                return false;
+            }
+            return true;
+
+        } catch (SVNException e) {
+            return false;
+        }
+    }
+
+    /**
+     * Check if repository path is a directory.
+     * 
+     * @param repos
+     * @param path
+     * @return true if repository path is a directory and false otherwise.
+     */
+    public static boolean isDirectory( SVNRepository repos,
+                                       String path ) {
+        try {
+            SVNNodeKind kind = repos.checkPath(path, -1);
+            if (kind == SVNNodeKind.DIR) {
+                return true;
+            }
+        } catch (SVNException e) {
+            return false;
+        }
+        return false;
+    }
+
+    /**
+     * @param repos
+     * @param path
+     * @return a collect of entry from directory path.
+     */
+    @SuppressWarnings( "unchecked" )
+    public static Collection<SVNDirEntry> getDir( SVNRepository repos,
+                                                  String path ) {
+        Collection<SVNDirEntry> entries = null;
+        try {
+            return repos.getDir(path, -1, null, (Collection<SVNDirEntry>)null);
+        } catch (SVNException e) {
+            return entries;
+        }
+    }
+
+    /**
+     * Check if the path is a file.
+     * 
+     * @param repos
+     * @param path
+     * @return true if the path is a file and false otherwise.
+     */
+    public static boolean isFile( SVNRepository repos,
+                                  String path ) {
+        try {
+            SVNNodeKind kind = repos.checkPath(path, -1);
+            if (kind == SVNNodeKind.FILE) {
+                return true;
+            }
+        } catch (SVNException e) {
+            return false;
+        }
+        return false;
+    }
+
+    
+    public static boolean exists( SVNRepository repository,
+                                  String path ) {
+        try {
+            if (repository.checkPath(path, -1) == SVNNodeKind.NONE) {
+                return false;
+            } else if (repository.checkPath(path, -1) == SVNNodeKind.UNKNOWN) {
+                return false;
+            }
+        } catch (SVNException e) {
+            return false;
+        }
+        return true;
+    }
+}




More information about the dna-commits mailing list