1 /***
2 * Copyright (C) 2008 Jeremy Thomerson (jthomerson@users.sourceforge.net)
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 package net.sf.vcaperture.services;
18
19 import java.util.Collection;
20
21 import net.sf.vcaperture.model.AbstractRepository;
22 import net.sf.vcaperture.model.RepoFile;
23 import net.sf.vcaperture.model.RepoFileRevision;
24 import net.sf.vcaperture.model.Revision;
25
26 /***
27 * Service that provides the functionality for local storage of repositories.
28 *
29 * @author Jeremy Thomerson (jthomerson@users.sourceforge.net)
30 */
31 public interface ILocalStorageService {
32
33 /***
34 * @param repo
35 * The repo you need the revision for
36 * @return the latest revision that has been locally stored, or
37 * <tt>AbstractRepository.getNullRevisionDefault()</tt> if none has been stored.
38 * @throws StorageException
39 * if there is an error retrieving it
40 * @see AbstractRepository#getNullRevisionDefault()
41 */
42 String getLatestStoredRevision(AbstractRepository repo) throws StorageException;
43
44 /***
45 * @param repo
46 * The repo you need the revision for
47 * @param relativePath
48 * The relative path of the file you need
49 * @return the RepoFile at that path
50 * @throws StorageException
51 * if there is an error retrieving it
52 */
53 RepoFile getFile(AbstractRepository repo, String relativePath) throws StorageException;
54
55 /***
56 * Saves the revision information for this repo / revision combo.
57 * <p>
58 * <b>IMPORTANT:</b> This does NOT save the individual files that were part of this revision.
59 * You must do that separately.
60 * </p>
61 *
62 * @param repo
63 * The repo that the revision applies to
64 * @param rev
65 * The revision to save
66 * @throws StorageException
67 * if there is an error saving it
68 */
69 void saveRevision(AbstractRepository repo, Revision rev) throws StorageException;
70
71 /***
72 * Saves an actual file that was part of the revision. The <tt>RepoFileRevision</tt> passed in
73 * should already have it's revisions field updated to reflect that it was part of this
74 * revision. This method saves both the <tt>RepoFile</tt> and the contents of the
75 * <tt>RepoFileRevision</tt>.
76 *
77 * @param repo
78 * The repo that the revision applies to
79 * @param rfr
80 * The revision to save
81 * @throws StorageException
82 * if there is an error saving it
83 */
84 void saveFileRevision(AbstractRepository repo, RepoFileRevision rfr) throws StorageException;
85
86 Collection<Revision> getRevisions(AbstractRepository repo, String startingRevision, int maxRevisions);
87
88 }