/*
* ====================================================================
* 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.wc;
import org.tmatesoft.svn.core.ISVNCanceller;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;
import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
import org.tmatesoft.svn.core.wc.admin.SVNAdminBasicClient;
import org.tmatesoft.svn.core.wc.admin.SVNAdminClient;
import org.tmatesoft.svn.core.wc.admin.SVNLookClient;
import org.tmatesoft.svn.core.wc2.SvnOperationFactory;
import org.tmatesoft.svn.util.ISVNDebugLog;
import org.tmatesoft.svn.util.SVNDebugLog;
/**
* The <b>SVNClientManager</b> class is used to manage <b>SVN</b>*<b>Client</b>
* objects as well as for providing them to a user what makes the user's work
* easier and his code - pretty clear and flexible.
*
* <p>
* When you don't have special needs to create, keep and manage
* separate <b>SVN</b>*<b>Client</b> objects by yourself, you should
* use <b>SVNClientManager</b> that takes care of all that work for you.
* These are some of advantages of using <b>SVNClientManager</b>:
* <ol>
* <li>If you instantiate an <b>SVN</b>*<b>Client</b> object by yourself
* you need to provide a run-time configuration driver - {@link ISVNOptions} -
* as well as an authentication and network layers driver -
* {@link org.tmatesoft.svn.core.auth.ISVNAuthenticationManager}. When
* using an <b>SVNClientManager</b> you have multiple choices to provide
* and use those drivers:
* <pre class="javacode">
* <span class="javacomment">//1.default options and authentication drivers to use</span>
* SVNClientManager clientManager = SVNClientManager.newInstance();
*
* ...
*
* <span class="javacomment">//2.provided options and default authentication drivers to use</span>
* ISVNOptions myOptions;
* ...
* SVNClientManager clientManager = SVNClientManager.newInstance(myOptions);
*
* ...
*
* <span class="javacomment">//3.provided options and authentication drivers to use</span>
* ISVNOptions myOptions;
* ISVNAuthenticationManager myAuthManager;
* ...
* SVNClientManager clientManager = SVNClientManager.newInstance(myOptions, myAuthManager);
*
* ...
*
* <span class="javacomment">//4.provided options driver and user's credentials to make</span>
* <span class="javacomment">//a default authentication driver use them</span>
* ISVNOptions myOptions;
* ...
* SVNClientManager
* clientManager = SVNClientManager.newInstance(myOptions, <span class="javastring">"name"</span>, <span class="javastring">"passw"</span>);
* </pre><br />
* Having instantiated an <b>SVNClientManager</b> in one of these ways, all
* the <b>SVN</b>*<b>Client</b> objects it will provide you will share those
* drivers, so you don't need to code much to provide the same drivers to each
* <b>SVN</b>*<b>Client</b> instance by yourself.
* <li>With <b>SVNClientManager</b> you don't need to create and keep your
* <b>SVN</b>*<b>Client</b> objects by youself - <b>SVNClientManager</b> will
* do all the work for you, so this will certainly bring down your efforts
* on coding and your code will be clearer and more flexible. All you need is
* to create an <b>SVNClientManager</b> instance.
* <li>Actually every <b>SVN</b>*<b>Client</b> object is instantiated only at
* the moment of the first call to an appropriate <b>SVNClientManager</b>'s
* <code>get</code> method:
* <pre class="javacode">
* SVNClientManager clientManager;
* ...
* <span class="javacomment">//an update client will be created only at that moment when you</span>
* <span class="javacomment">//first call this method for getting your update client, but if you</span>
* <span class="javacomment">//have already called it once before, then the method will return</span>
* <span class="javacomment">//that update client object instantiated in previous... so, it's</span>
* <span class="javacomment">//quite cheap, you see..</span>
* SVNUpdateClient updateClient = clientManager.getUpdateClient();</pre><br />
* <li>You can provide a single event handler that will be used by all
* <b>SVN</b>*<b>Client</b> objects provided by <b>SVNClientManager</b>:
* <pre class="javacode">
* <span class="javakeyword">import</span> org.tmatesoft.svn.core.wc.ISVNEventHandler;
*
* ...
*
* ISVNEventHandler commonEventHandler;
* SVNClientManager clientManager = SVNClientManager.newInstance();
* ...
* <span class="javacomment">//will be used by all SVN*Client objects</span>
* <span class="javacomment">//obtained from your client manager</span>
* clientManager.setEventHandler(commonEventHandler);
* </pre>
* <li>
* </ol>
*
* @version 1.3
* @author TMate Software Ltd.
* @since 1.2
* @see ISVNEventHandler
* @see <a target="_top" href="http://svnkit.com/kb/examples/">Examples</a>
*/
public class SVNClientManager implements ISVNRepositoryPool {
private ISVNOptions myOptions;
private SVNCommitClient myCommitClient;
private SVNCopyClient myCopyClient;
private SVNDiffClient myDiffClient;
private SVNLogClient myLogClient;
private SVNMoveClient myMoveClient;
private SVNStatusClient myStatusClient;
private SVNUpdateClient myUpdateClient;
private SVNWCClient myWCClient;
private SVNChangelistClient myChangelistClient;
private SVNAdminClient myAdminClient;
private SVNLookClient myLookClient;
private ISVNEventHandler myEventHandler;
private ISVNRepositoryPool myRepositoryPool;
private ISVNDebugLog myDebugLog;
private SvnOperationFactory myOperationFactory;
private boolean myIsIgnoreExternals;
private SVNClientManager(ISVNOptions options, ISVNRepositoryPool repositoryPool) {
myOptions = options;
if (myOptions == null) {
myOptions = SVNWCUtil.createDefaultOptions(true);
}
myRepositoryPool = repositoryPool;
}
private SVNClientManager(ISVNOptions options, final ISVNAuthenticationManager authManager) {
this(options, new DefaultSVNRepositoryPool(authManager == null ? SVNWCUtil.createDefaultAuthenticationManager() : authManager, options));
}
private SVNClientManager(SvnOperationFactory of) {
myOperationFactory = of;
}
/**
* Creates a new instance of this class using default {@link ISVNOptions}
* and {@link org.tmatesoft.svn.core.auth.ISVNAuthenticationManager} drivers.
* That means this <b>SVNClientManager</b> will use the SVN's default run-time
* configuration area. Default options are obtained via a call to
* {@link SVNWCUtil#createDefaultOptions(boolean)}.
*
* @return a new <b>SVNClientManager</b> instance
*/
public static SVNClientManager newInstance() {
return new SVNClientManager(null, (ISVNAuthenticationManager) null);
}
/**
* Creates a new instance of this class using the provided {@link ISVNOptions}
* and default {@link org.tmatesoft.svn.core.auth.ISVNAuthenticationManager} drivers.
* That means this <b>SVNClientManager</b> will use the caller's configuration options
* (which correspond to options found in the default SVN's <i>config</i>
* file) and the default SVN's <i>servers</i> configuration and auth storage.
*
* <p/>
* If <code>options</code> is <span class="javakeyword">null</span>, default options are
* used which are obtained via a call to {@link SVNWCUtil#createDefaultOptions(boolean)}.
*
* @param options a config driver
* @return a new <b>SVNClientManager</b> instance
*/
public static SVNClientManager newInstance(ISVNOptions options) {
return new SVNClientManager(options, (ISVNAuthenticationManager) null);
}
/**
* Creates a new instance of this class using the provided {@link ISVNOptions}
* and {@link org.tmatesoft.svn.core.auth.ISVNAuthenticationManager} drivers.
* That means this <b>SVNClientManager</b> will use the caller's configuration options
* (which correspond to options found in the default SVN's <i>config</i>
* file) as well as authentication credentials and servers options (similar to
* options found in the default SVN's <i>servers</i>).
*
* @param options a config driver
* @param authManager an authentication driver
* @return a new <b>SVNClientManager</b> instance
*/
public static SVNClientManager newInstance(ISVNOptions options, ISVNAuthenticationManager authManager) {
return new SVNClientManager(options, authManager);
}
public static SVNClientManager newInstance(SvnOperationFactory operationFactory) {
return new SVNClientManager(operationFactory);
}
/**
* Creates a new instance of this class using the provided
* config driver and creator of of <b>SVNRepository</b> objects.
*
* @param options a config driver
* @param repositoryPool a creator of <b>SVNRepository</b> objects
* @return a new <b>SVNClientManager</b> instance
*/
public static SVNClientManager newInstance(ISVNOptions options, ISVNRepositoryPool repositoryPool) {
return new SVNClientManager(options, repositoryPool);
}
/**
* Creates a new instance of this class using the provided {@link ISVNOptions}
* driver and user's credentials to make a default implementation of
* {@link org.tmatesoft.svn.core.auth.ISVNAuthenticationManager} use them.
* That means this <b>SVNClientManager</b> will use the caller's configuration options
* (which correspond to options found in the default SVN's <i>config</i>
* file), the default SVN's <i>servers</i> configuration and the caller's
* credentials.
*
* @param options a config driver
* @param userName a user account name
* @param password a user password
* @return a new <b>SVNClientManager</b> instance
*/
public static SVNClientManager newInstance(DefaultSVNOptions options, String userName, String password) {
boolean storeAuth = options == null || options.isAuthStorageEnabled();
ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(null, userName, password, storeAuth);
return new SVNClientManager(options, authManager);
}
/**
* Creates a low-level SVN protocol driver to directly work with
* a repository.
*
* <p>
* The driver created will be set a default {@link org.tmatesoft.svn.core.auth.ISVNAuthenticationManager}
* manager.
*
* <p>
* Used by <b>SVN</b>*<b>Client</b> objects (managed by this
* <b>SVNClientManager</b>) to access a repository when needed.
*
* @param url a repository location to establish a
* connection with (will be the root directory
* for the working session)
* @param mayReuse if <span class="javakeyword">true</span> then tries
* first tries to find a reusable driver or creates a new
* reusable one
* @return a low-level API driver for direct interacting
* with a repository
* @throws SVNException
*/
public SVNRepository createRepository(SVNURL url, boolean mayReuse) throws SVNException {
if (getRepositoryPool() != null) {
return getRepositoryPool().createRepository(url, mayReuse);
}
SVNRepository repository = SVNRepositoryFactory.create(url);
repository.setAuthenticationManager(SVNWCUtil.createDefaultAuthenticationManager());
repository.setDebugLog(getDebugLog());
return repository;
}
/**
* @param shutdownAll whether to shutdown connection
* that are considered active at the moment
* @deprecated use {@link #dispose()} instead
*/
public void shutdownConnections(boolean shutdownAll) {
if (getRepositoryPool() != null) {
getRepositoryPool().dispose();
}
}
/**
* Disposes this client object.
* Call this method when you've finished working with this object. This will close
* any open network sessions.
*/
public void dispose() {
if (myOperationFactory != null) {
myOperationFactory.dispose();
} else if (myRepositoryPool != null) {
myRepositoryPool.dispose();
}
}
/**
* Returns the run-time configuration options driver
* which kept by this object.
*
* @return a run-time options driver
*/
public ISVNOptions getOptions() {
if (myOperationFactory != null) {
return myOperationFactory.getOptions();
}
return myOptions;
}
/**
* Sets an event handler to all <b>SVN</b>*<b>Client</b> objects
* created and kept by this <b>SVNClientManager</b>.
*
* <p>
* The provided event handler will be set only to only those objects
* that have been already created (<b>SVN</b>*<b>Client</b> objects are
* instantiated by an <b>SVNClientManager</b> at the moment of the
* first call to a <code>get*Client()</code> method). So, the handler
* won't be set for those ones that have never been requested. However
* as they are first requested (and thus created) the handler will be
* set to them, too, since <b>SVNClientManager</b> is still keeping the handler.
*
* @param handler an event handler
*/
public void setEventHandler(ISVNEventHandler handler) {
myEventHandler = handler;
setCanceller(handler);
if (myCommitClient != null) {
myCommitClient.setEventHandler(handler);
}
if (myCopyClient != null) {
myCopyClient.setEventHandler(handler);
}
if (myDiffClient != null) {
myDiffClient.setEventHandler(handler);
}
if (myLogClient != null) {
myLogClient.setEventHandler(handler);
}
if (myMoveClient != null) {
myMoveClient.setEventHandler(handler);
}
if (myStatusClient != null) {
myStatusClient.setEventHandler(handler);
}
if (myUpdateClient != null) {
myUpdateClient.setEventHandler(handler);
}
if (myWCClient != null) {
myWCClient.setEventHandler(handler);
}
if (myChangelistClient != null) {
myChangelistClient.setEventHandler(handler);
}
if (myAdminClient != null) {
myAdminClient.setEventHandler(handler);
}
if (myLookClient != null) {
myLookClient.setEventHandler(handler);
}
}
/**
* Sets whether externals should be ignored or not by all of the <b>SVN*Clinet</b> objects which this client
* manager will provide.
*
* @param isIgnoreExternals whether externals should be ignored or not
* @since 1.2.0
*/
public void setIgnoreExternals(boolean isIgnoreExternals) {
myIsIgnoreExternals = isIgnoreExternals;
if (myCommitClient != null) {
myCommitClient.setIgnoreExternals(myIsIgnoreExternals);
}
if (myCopyClient != null) {
myCopyClient.setIgnoreExternals(myIsIgnoreExternals);
}
if (myDiffClient != null) {
myDiffClient.setIgnoreExternals(myIsIgnoreExternals);
}
if (myLogClient != null) {
myLogClient.setIgnoreExternals(myIsIgnoreExternals);
}
if (myMoveClient != null) {
myMoveClient.setIgnoreExternals(myIsIgnoreExternals);
}
if (myStatusClient != null) {
myStatusClient.setIgnoreExternals(myIsIgnoreExternals);
}
if (myUpdateClient != null) {
myUpdateClient.setIgnoreExternals(myIsIgnoreExternals);
}
if (myWCClient != null) {
myWCClient.setIgnoreExternals(myIsIgnoreExternals);
}
if (myChangelistClient != null) {
myChangelistClient.setIgnoreExternals(myIsIgnoreExternals);
}
}
/**
* Tells wheter externals are ignored or not.
* @return <span class="javakeyword">true</span> if externals are ignored; otherwise
* <span class="javakeyword">false</span>
* @since 1.2.0
*/
public boolean isIgnoreExternals() {
return myIsIgnoreExternals;
}
/**
* Sets global run-time configuration options to all of the <b>SVN*Client</b> objects provided by this
* client manager.
*
* @param options run-time configuration options
*/
public void setOptions(ISVNOptions options) {
if (myOperationFactory != null) {
myOperationFactory.setOptions(options);
} else {
myOptions = options;
if (myCommitClient != null) {
myCommitClient.setOptions(options);
}
if (myCopyClient != null) {
myCopyClient.setOptions(options);
}
if (myDiffClient != null) {
myDiffClient.setOptions(options);
}
if (myLogClient != null) {
myLogClient.setOptions(options);
}
if (myMoveClient != null) {
myMoveClient.setOptions(options);
}
if (myStatusClient != null) {
myStatusClient.setOptions(options);
}
if (myUpdateClient != null) {
myUpdateClient.setOptions(options);
}
if (myWCClient != null) {
myWCClient.setOptions(options);
}
if (myAdminClient != null) {
myAdminClient.setOptions(options);
}
if (myLookClient != null) {
myLookClient.setOptions(options);
}
}
}
/**
* Returns an instance of the {@link SVNCommitClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNCommitClient</b> instance
*/
public SVNCommitClient getCommitClient() {
if (myCommitClient == null) {
myCommitClient = myOperationFactory != null ? new SVNCommitClient(myOperationFactory) : new SVNCommitClient(this, myOptions);
myCommitClient.setEventHandler(myEventHandler);
myCommitClient.setDebugLog(getDebugLog());
myCommitClient.setIgnoreExternals(myIsIgnoreExternals);
}
return myCommitClient;
}
/**
* Returns an instance of the {@link org.tmatesoft.svn.core.wc.admin.SVNAdminClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNAdminClient</b> instance
*/
public SVNAdminClient getAdminClient() {
if (myAdminClient == null) {
myAdminClient = myOperationFactory != null ? new SVNAdminClient(myOperationFactory) : new SVNAdminClient(this, myOptions);
initClientDefaults(myAdminClient);
}
return myAdminClient;
}
/**
* Returns an instance of the {@link org.tmatesoft.svn.core.wc.admin.SVNLookClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNLookClient</b> instance
*/
public SVNLookClient getLookClient() {
if (myLookClient == null) {
myLookClient = myOperationFactory != null ? new SVNLookClient(myOperationFactory) : new SVNLookClient(this, myOptions);
initClientDefaults(myLookClient);
}
return myLookClient;
}
/**
* Returns an instance of the {@link SVNCopyClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNCopyClient</b> instance
*/
public SVNCopyClient getCopyClient() {
if (myCopyClient == null) {
myCopyClient = myOperationFactory != null ? new SVNCopyClient(myOperationFactory) : new SVNCopyClient(this, myOptions);
initClientDefaults(myCopyClient);
}
return myCopyClient;
}
/**
* Returns an instance of the {@link SVNDiffClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNDiffClient</b> instance
*/
public SVNDiffClient getDiffClient() {
if (myDiffClient == null) {
myDiffClient = myOperationFactory != null ? new SVNDiffClient(myOperationFactory) : new SVNDiffClient(this, myOptions);
initClientDefaults(myDiffClient);
}
return myDiffClient;
}
/**
* Returns an instance of the {@link SVNLogClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNLogClient</b> instance
*/
public SVNLogClient getLogClient() {
if (myLogClient == null) {
myLogClient = myOperationFactory != null ? new SVNLogClient(myOperationFactory) : new SVNLogClient(this, myOptions);
initClientDefaults(myLogClient);
}
return myLogClient;
}
/**
* Returns an instance of the {@link SVNMoveClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNMoveClient</b> instance
*/
public SVNMoveClient getMoveClient() {
if (myMoveClient == null) {
myMoveClient = myOperationFactory != null ? new SVNMoveClient(myOperationFactory) : new SVNMoveClient(this, myOptions);
initClientDefaults(myMoveClient);
}
return myMoveClient;
}
/**
* Returns an instance of the {@link SVNStatusClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNStatusClient</b> instance
*/
public SVNStatusClient getStatusClient() {
if (myStatusClient == null) {
myStatusClient = myOperationFactory != null ? new SVNStatusClient(myOperationFactory) : new SVNStatusClient(this, myOptions);
initClientDefaults(myStatusClient);
}
return myStatusClient;
}
/**
* Returns an instance of the {@link SVNUpdateClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNUpdateClient</b> instance
*/
public SVNUpdateClient getUpdateClient() {
if (myUpdateClient == null) {
myUpdateClient = myOperationFactory != null ? new SVNUpdateClient(myOperationFactory) : new SVNUpdateClient(this, myOptions);
initClientDefaults(myUpdateClient);
}
return myUpdateClient;
}
/**
* Returns an instance of the {@link SVNWCClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNWCClient</b> instance
*/
public SVNWCClient getWCClient() {
if (myWCClient == null) {
myWCClient = myOperationFactory != null ? new SVNWCClient(myOperationFactory) : new SVNWCClient(this, myOptions);
initClientDefaults(myWCClient);
}
return myWCClient;
}
/**
* Returns an instance of the {@link SVNChangelistClient} class.
*
* <p>
* If it's the first time this method is being called the object is
* created, initialized and then returned. Further calls to this
* method will get the same object instantiated at that moment of
* the first call. <b>SVNClientManager</b> does not reinstantiate
* its <b>SVN</b>*<b>Client</b> objects.
*
* @return an <b>SVNChangelistClient</b> instance
* @since 1.2.0
*/
public SVNChangelistClient getChangelistClient() {
if (myChangelistClient == null) {
myChangelistClient = myOperationFactory != null ? new SVNChangelistClient(myOperationFactory) : new SVNChangelistClient(this, myOptions);
initClientDefaults(myChangelistClient);
}
return myChangelistClient;
}
protected void initClientDefaults(SVNBasicClient client) {
client.setEventHandler(myEventHandler);
client.setDebugLog(getDebugLog());
client.setIgnoreExternals(myIsIgnoreExternals);
}
protected void initClientDefaults(SVNAdminBasicClient client) {
client.setEventHandler(myEventHandler);
client.setDebugLog(getDebugLog());
}
/**
* Returns the debug logger currently in use.
*
* <p>
* If no debug logger has been specified by the time this call occurs,
* a default one (returned by <code>org.tmatesoft.svn.util.SVNDebugLog.getDefaultLog()</code>)
* will be created and used.
*
* @return a debug logger
*/
public ISVNDebugLog getDebugLog() {
if (myDebugLog == null) {
return SVNDebugLog.getDefaultLog();
}
return myDebugLog;
}
/**
* Sets a logger to write debug log information to. Sets this same logger
* object to all <b>SVN</b>*<b>Client</b> objects instantiated by this
* moment.
*
* @param log a debug logger
*/
public void setDebugLog(ISVNDebugLog log) {
myDebugLog = log;
if (myCommitClient != null) {
myCommitClient.setDebugLog(log);
}
if (myCopyClient != null) {
myCopyClient.setDebugLog(log);
}
if (myDiffClient != null) {
myDiffClient.setDebugLog(log);
}
if (myLogClient != null) {
myLogClient.setDebugLog(log);
}
if (myMoveClient != null) {
myMoveClient.setDebugLog(log);
}
if (myStatusClient != null) {
myStatusClient.setDebugLog(log);
}
if (myUpdateClient != null) {
myUpdateClient.setDebugLog(log);
}
if (myWCClient != null) {
myWCClient.setDebugLog(log);
}
if (myChangelistClient != null) {
myChangelistClient.setDebugLog(log);
}
if (myAdminClient != null) {
myAdminClient.setDebugLog(log);
}
if (myLookClient != null) {
myLookClient.setDebugLog(log);
}
if (myRepositoryPool != null) {
myRepositoryPool.setDebugLog(log);
}
}
/**
* Sets an authentication manager to this client manager.
* This authentication manager will be used by all the <b>SVN*Client</b> objects provided by
* this client manager for authenticating the client side against the server side when needed (on demand)
* or preliminarily (if specified).
*
* @param authManager user's implementation of the authentication manager interface
*/
public void setAuthenticationManager(ISVNAuthenticationManager authManager) {
if (myOperationFactory != null) {
myOperationFactory.setAuthenticationManager(authManager);
} else if (myRepositoryPool != null) {
myRepositoryPool.setAuthenticationManager(authManager);
}
}
/**
* Sets a canceller to this client manager.
* This canceller will be used by all the <b>SVN*Client</b> objects provided by this client manager.
*
* @param canceller user's implementation of the canceller interface
* @since 1.2.0
*/
public void setCanceller(ISVNCanceller canceller) {
if (myOperationFactory != null) {
myOperationFactory.setCanceller(canceller);
} else if (myRepositoryPool != null) {
myRepositoryPool.setCanceller(canceller);
}
}
/**
* Returns the repository pool used by this client manager.
* This pool is used to create and manage {@link SVNRepository} objects by all the <b>SVN*Client</b>
* objects provided by this client manager.
*
* @return repository pool object
* @since 1.2.0
*/
public ISVNRepositoryPool getRepositoryPool() {
if (myOperationFactory != null) {
return myOperationFactory.getRepositoryPool();
}
return myRepositoryPool;
}
public SvnOperationFactory getOperationFactory() {
return myOperationFactory;
}
}