/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.io;
/**
* The <b>ISVNSession</b> interface provides some extra handling operations over
* <b>SVNRepository</b> objects.
*
* <p>
* For remote accessing a repository (via <code>svn://</code> and
* <code>http://</code>) <b>SVNRepository</b> drivers open socket connections to
* write and read data from. Session objects (implementing <b>ISVNSession</b>) may
* enable an <b>SVNRepository</b> object to use a single socket connection during the
* whole runtime, or, as an alternative, to use a new socket connection per each
* repository access operation (this slows the speed of operation execution since
* the operation needs some extra time for opening and closing a socket).
*
* <p>
* Also <b>ISVNSession</b> allows to cache and retrieve commit messages during
* runtime.
*
* <p>
* How to set a session object for an <b>SVNRepository</b> driver:
* <pre class="javacode">
* <span class="javakeyword">import</span> org.tmatesoft.svn.core.io.ISVNSession;
* <span class="javakeyword">import</span> org.tmatesoft.svn.core.io.SVNRepositoryFactory;
* <span class="javakeyword">import</span> org.tmatesoft.svn.core.io.SVNRepository;
* <span class="javakeyword">import</span> org.tmatesoft.svn.core.SVNURL;
* ...
*
* ISVNSession session;
* ...
* SVNURL url = SVNURL.parseURIEncoded(<span class="javastring">"svn://host/path/to/repos"</span>);
* <span class="javakeyword">try</span>{
* SVNRepository repository = SVNRepositoryFactory.create(url, session);
* ...
* }<span class="javakeyword">catch</span>(SVNException svne){
* ...
* }</pre><br />
*
* @version 1.3
* @author TMate Software Ltd.
* @since 1.2
* @see SVNRepository
* @see SVNRepositoryFactory
*/
public interface ISVNSession {
/**
* Says if the given <b>SVNRepository</b> object should use a single socket
* connection (not to open/close a new one for each operation). This will
* certainly improve the <b>SVNRepository</b> object's methods performance speed.
* <p>
* For examlpe, a session object may hold a number of <b>SVNRepository</b>
* object references knowing for everyone of them if it should keep a single
* connection or not.
*
* @param repository an <b>SVNRepository</b> driver
* @return <span class="javakeyword">true</span> if <code>repository</code>
* should use a single socket connection during the whole runtime,
* <span class="javakeyword">false</span> - to open/close a new
* connection for each repository access operation
*/
public boolean keepConnection(SVNRepository repository);
/**
* Caches a commit message for the given revision.
*
* @param repository an <b>SVNRepository</b> driver (to distinguish
* that repository for which this message is actual)
* @param revision a revision number
* @param message the commit message for <code>revision</code>
* @see #getCommitMessage(SVNRepository, long)
*/
public void saveCommitMessage(SVNRepository repository, long revision, String message);
/**
* Retrieves the cached commit message for a particular revision.
* Use {@link #getCommitMessage(SVNRepository, long) getCommitMessage()} to
* check if there's a message in cache.
*
* @param repository an <b>SVNRepository</b> driver (to distinguish
* that repository for which a commit message is requested)
* @param revision a revision number
* @return the commit message for <code>revision</code>
* @see #saveCommitMessage(SVNRepository, long, String)
*/
public String getCommitMessage(SVNRepository repository, long revision);
/**
* Checks if there's a commit message in cache for a particular repository
* and revision.
*
* @param repository an <b>SVNRepository</b> driver (to distinguish
* that repository for which a commit message is requested)
* @param revision a revision number
* @return <span class="javakeyword">true</span> if the cache
* has got a message for the given repository and revision,
* <span class="javakeyword">false</span> otherwise
*/
public boolean hasCommitMessage(SVNRepository repository, long revision);
/**
* A session options implementation that simply allows to keep
* a single connection alive for all data i/o. This implementation
* does not cache commit messages.
*/
public ISVNSession KEEP_ALIVE = new ISVNSession() {
public boolean keepConnection(SVNRepository repository) {
return true;
}
public void saveCommitMessage(SVNRepository repository, long revision, String message) {
}
public String getCommitMessage(SVNRepository repository, long revision) {
return null;
}
public boolean hasCommitMessage(SVNRepository repository, long revision) {
return false;
}
};
/**
* The same as {@link #KEEP_ALIVE}. Left for backward
* compatibility.
*/
public ISVNSession DEFAULT = KEEP_ALIVE;
}