001: /*
002: * ====================================================================
003: * Copyright (c) 2004-2008 TMate Software Ltd. All rights reserved.
004: *
005: * This software is licensed as described in the file COPYING, which
006: * you should have received as part of this distribution. The terms
007: * are also available at http://svnkit.com/license.html
008: * If newer versions of this license are posted there, you may use a
009: * newer version instead, at your option.
010: * ====================================================================
011: */
012: package org.tmatesoft.svn.core.io;
013:
014: /**
015: * The <b>ISVNSession</b> interface provides some extra handling operations over
016: * <b>SVNRepository</b> objects.
017: *
018: * <p>
019: * For remote accessing a repository (via <code>svn://</code> and
020: * <code>http://</code>) <b>SVNRepository</b> drivers open socket connections to
021: * write and read data from. Session objects (implementing <b>ISVNSession</b>) may
022: * enable an <b>SVNRepository</b> object to use a single socket connection during the
023: * whole runtime, or, as an alternative, to use a new socket connection per each
024: * repository access operation (this slows the speed of operation execution since
025: * the operation needs some extra time for opening and closing a socket).
026: *
027: * <p>
028: * Also <b>ISVNSession</b> allows to cache and retrieve commit messages during
029: * runtime.
030: *
031: * <p>
032: * How to set a session object for an <b>SVNRepository</b> driver:
033: * <pre class="javacode">
034: * <span class="javakeyword">import</span> org.tmatesoft.svn.core.io.ISVNSession;
035: * <span class="javakeyword">import</span> org.tmatesoft.svn.core.io.SVNRepositoryFactory;
036: * <span class="javakeyword">import</span> org.tmatesoft.svn.core.io.SVNRepository;
037: * <span class="javakeyword">import</span> org.tmatesoft.svn.core.SVNURL;
038: * ...
039: *
040: * ISVNSession session;
041: * ...
042: * SVNURL url = SVNURL.parseURIEncoded(<span class="javastring">"svn://host/path/to/repos"</span>);
043: * <span class="javakeyword">try</span>{
044: * SVNRepository repository = SVNRepositoryFactory.create(url, session);
045: * ...
046: * }<span class="javakeyword">catch</span>(SVNException svne){
047: * ...
048: * }</pre><br />
049: *
050: * @version 1.1.1
051: * @author TMate Software Ltd.
052: * @see SVNRepository
053: * @see SVNRepositoryFactory
054: */
055: public interface ISVNSession {
056: /**
057: * Says if the given <b>SVNRepository</b> object should use a single socket
058: * connection (not to open/close a new one for each operation). This will
059: * certainly improve the <b>SVNRepository</b> object's methods performance speed.
060: * <p>
061: * For examlpe, a session object may hold a number of <b>SVNRepository</b>
062: * object references knowing for everyone of them if it should keep a single
063: * connection or not.
064: *
065: * @param repository an <b>SVNRepository</b> driver
066: * @return <span class="javakeyword">true</span> if <code>repository</code>
067: * should use a single socket connection during the whole runtime,
068: * <span class="javakeyword">false</span> - to open/close a new
069: * connection for each repository access operation
070: */
071: public boolean keepConnection(SVNRepository repository);
072:
073: /**
074: * Caches a commit message for the given revision.
075: *
076: * @param repository an <b>SVNRepository</b> driver (to distinguish
077: * that repository for which this message is actual)
078: * @param revision a revision number
079: * @param message the commit message for <code>revision</code>
080: * @see #getCommitMessage(SVNRepository, long)
081: */
082: public void saveCommitMessage(SVNRepository repository,
083: long revision, String message);
084:
085: /**
086: * Retrieves the cached commit message for a particular revision.
087: * Use {@link #getCommitMessage(SVNRepository, long) getCommitMessage()} to
088: * check if there's a message in cache.
089: *
090: * @param repository an <b>SVNRepository</b> driver (to distinguish
091: * that repository for which a commit message is requested)
092: * @param revision a revision number
093: * @return the commit message for <code>revision</code>
094: * @see #saveCommitMessage(SVNRepository, long, String)
095: */
096: public String getCommitMessage(SVNRepository repository,
097: long revision);
098:
099: /**
100: * Checks if there's a commit message in cache for a particular repository
101: * and revision.
102: *
103: * @param repository an <b>SVNRepository</b> driver (to distinguish
104: * that repository for which a commit message is requested)
105: * @param revision a revision number
106: * @return <span class="javakeyword">true</span> if the cache
107: * has got a message for the given repository and revision,
108: * <span class="javakeyword">false</span> otherwise
109: */
110: public boolean hasCommitMessage(SVNRepository repository,
111: long revision);
112:
113: /**
114: * A session options implementation that simply allows to keep
115: * a single connection alive for all data i/o. This implementation
116: * does not cache commit messages.
117: */
118: public ISVNSession KEEP_ALIVE = new ISVNSession() {
119: public boolean keepConnection(SVNRepository repository) {
120: return true;
121: }
122:
123: public void saveCommitMessage(SVNRepository repository,
124: long revision, String message) {
125: }
126:
127: public String getCommitMessage(SVNRepository repository,
128: long revision) {
129: return null;
130: }
131:
132: public boolean hasCommitMessage(SVNRepository repository,
133: long revision) {
134: return false;
135: }
136: };
137:
138: /**
139: * The same as {@link #KEEP_ALIVE}. Left for backward
140: * compatibility.
141: */
142: public ISVNSession DEFAULT = KEEP_ALIVE;
143: }
|