1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package nl.toolforge.karma.core.vc;
20
21 import nl.toolforge.karma.core.KarmaRuntimeException;
22 import nl.toolforge.karma.core.location.Location;
23 import nl.toolforge.karma.core.vc.cvsimpl.CVSRepository;
24 import nl.toolforge.karma.core.vc.cvsimpl.CVSRunner;
25 import nl.toolforge.karma.core.vc.svnimpl.SubversionLocationImpl;
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28
29 /***
30 * Factory producing {@link Runner} instances.
31 *
32 * @author D.A. Smedes
33 * @version $Id: RunnerFactory.java,v 1.14 2004/11/10 22:25:11 hippe Exp $
34 */
35 public final class RunnerFactory {
36
37 private static Log logger = LogFactory.getLog(RunnerFactory.class);
38
39 private RunnerFactory() {}
40
41 /***
42 * A <code>Runner</code> might be required for a command to execute something on a version control system. A module
43 * can determine which implementation of a runner it requires through the
44 * {@link nl.toolforge.karma.core.module.Module#getLocation} method.
45 *
46 * @param location The location for which a runner is required.
47 * @return A version control system specific <code>Runner</code>.
48 * @throws VersionControlException
49 * @throws AuthenticationException
50 */
51 public static Runner getRunner(Location location) throws VersionControlException, AuthenticationException {
52
53 if (location == null) {
54 throw new IllegalArgumentException("Location cannot be null.");
55 }
56
57 if (location instanceof CVSRepository) {
58 return new CVSRunner(location);
59 }
60 if (location instanceof SubversionLocationImpl) {
61 throw new KarmaRuntimeException("Subversion is not possible in Karma 1.0.");
62 }
63 throw new KarmaRuntimeException("Unsupported `Location` type.");
64 }
65 }