View Javadoc
1   /*
2    * Copyright (C) 2008, Google Inc.
3    * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>
4    * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> and others
5    *
6    * This program and the accompanying materials are made available under the
7    * terms of the Eclipse Distribution License v. 1.0 which is available at
8    * https://www.eclipse.org/org/documents/edl-v10.php.
9    *
10   * SPDX-License-Identifier: BSD-3-Clause
11   */
12  
13  package org.eclipse.jgit.transport;
14  
15  import java.io.OutputStream;
16  import java.util.Collection;
17  import java.util.Set;
18  
19  import org.eclipse.jgit.errors.TransportException;
20  import org.eclipse.jgit.lib.ObjectId;
21  import org.eclipse.jgit.lib.ProgressMonitor;
22  import org.eclipse.jgit.lib.Ref;
23  
24  /**
25   * Base helper class for fetch connection implementations. Provides some common
26   * typical structures and methods used during fetch connection.
27   * <p>
28   * Implementors of fetch over pack-based protocols should consider using
29   * {@link BasePackFetchConnection} instead.
30   * </p>
31   */
32  abstract class BaseFetchConnection extends BaseConnection implements
33  		FetchConnection {
34  	/** {@inheritDoc} */
35  	@Override
36  	public final void fetch(final ProgressMonitor monitor,
37  			final Collection<Ref> want, final Set<ObjectId> have)
38  			throws TransportException {
39  		fetch(monitor, want, have, null);
40  	}
41  
42  	/** {@inheritDoc} */
43  	@Override
44  	public final void fetch(final ProgressMonitor monitor,
45  			final Collection<Ref> want, final Set<ObjectId> have,
46  			OutputStream out) throws TransportException {
47  		markStartedOperation();
48  		doFetch(monitor, want, have);
49  	}
50  
51  	/**
52  	 * {@inheritDoc}
53  	 *
54  	 * Default implementation of {@link FetchConnection#didFetchIncludeTags()} -
55  	 * returning false.
56  	 */
57  	@Override
58  	public boolean didFetchIncludeTags() {
59  		return false;
60  	}
61  
62  	/**
63  	 * Implementation of {@link #fetch(ProgressMonitor, Collection, Set)}
64  	 * without checking for multiple fetch.
65  	 *
66  	 * @param monitor
67  	 *            as in {@link #fetch(ProgressMonitor, Collection, Set)}
68  	 * @param want
69  	 *            as in {@link #fetch(ProgressMonitor, Collection, Set)}
70  	 * @param have
71  	 *            as in {@link #fetch(ProgressMonitor, Collection, Set)}
72  	 * @throws org.eclipse.jgit.errors.TransportException
73  	 *             as in {@link #fetch(ProgressMonitor, Collection, Set)}, but
74  	 *             implementation doesn't have to care about multiple
75  	 *             {@link #fetch(ProgressMonitor, Collection, Set)} calls, as it
76  	 *             is checked in this class.
77  	 */
78  	protected abstract void doFetch(final ProgressMonitor monitor,
79  			final Collection<Ref> want, final Set<ObjectId> have)
80  			throws TransportException;
81  }