1   /*
2    * Copyright 2017 LINE Corporation
3    *
4    * LINE Corporation licenses this file to you under the Apache License,
5    * version 2.0 (the "License"); you may not use this file except in compliance
6    * with the License. You may obtain a copy of the License at:
7    *
8    *   https://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, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations
14   * under the License.
15   */
16  
17  package com.linecorp.centraldogma.server.internal.storage.repository;
18  
19  import static java.util.Objects.requireNonNull;
20  
21  import java.util.List;
22  import java.util.Map;
23  import java.util.concurrent.CompletableFuture;
24  
25  import com.linecorp.centraldogma.common.Author;
26  import com.linecorp.centraldogma.common.Change;
27  import com.linecorp.centraldogma.common.Commit;
28  import com.linecorp.centraldogma.common.Entry;
29  import com.linecorp.centraldogma.common.Markup;
30  import com.linecorp.centraldogma.common.MergeQuery;
31  import com.linecorp.centraldogma.common.MergedEntry;
32  import com.linecorp.centraldogma.common.Query;
33  import com.linecorp.centraldogma.common.Revision;
34  import com.linecorp.centraldogma.common.RevisionRange;
35  import com.linecorp.centraldogma.internal.Util;
36  import com.linecorp.centraldogma.server.command.CommitResult;
37  import com.linecorp.centraldogma.server.storage.project.Project;
38  import com.linecorp.centraldogma.server.storage.repository.FindOption;
39  import com.linecorp.centraldogma.server.storage.repository.Repository;
40  
41  public class RepositoryWrapper implements Repository {
42  
43      private final Repository repo;
44  
45      protected RepositoryWrapper(Repository repo) {
46          this.repo = requireNonNull(repo, "repo");
47      }
48  
49      @SuppressWarnings("unchecked")
50      public final <T extends Repository> T unwrap() {
51          return (T) repo;
52      }
53  
54      @Override
55      public Project parent() {
56          return unwrap().parent();
57      }
58  
59      @Override
60      public String name() {
61          return unwrap().name();
62      }
63  
64      @Override
65      public long creationTimeMillis() {
66          return unwrap().creationTimeMillis();
67      }
68  
69      @Override
70      public Author author() {
71          return unwrap().author();
72      }
73  
74      @Override
75      public Revision normalizeNow(Revision revision) {
76          return unwrap().normalizeNow(revision);
77      }
78  
79      @Override
80      public RevisionRange normalizeNow(Revision from, Revision to) {
81          return unwrap().normalizeNow(from, to);
82      }
83  
84      @Override
85      public CompletableFuture<Boolean> exists(Revision revision, String path) {
86          return unwrap().exists(revision, path);
87      }
88  
89      @Override
90      public CompletableFuture<Entry<?>> get(Revision revision, String path) {
91          return unwrap().get(revision, path);
92      }
93  
94      @Override
95      public <T> CompletableFuture<Entry<T>> get(Revision revision, Query<T> query) {
96          return unwrap().get(revision, query);
97      }
98  
99      @Override
100     public CompletableFuture<Entry<?>> getOrNull(Revision revision, String path) {
101         return unwrap().getOrNull(revision, path);
102     }
103 
104     @Override
105     public <T> CompletableFuture<Entry<T>> getOrNull(Revision revision, Query<T> query) {
106         return unwrap().getOrNull(revision, query);
107     }
108 
109     @Override
110     public CompletableFuture<Map<String, Entry<?>>> find(Revision revision, String pathPattern) {
111         return unwrap().find(revision, pathPattern);
112     }
113 
114     @Override
115     public CompletableFuture<Map<String, Entry<?>>> find(Revision revision, String pathPattern,
116                                                          Map<FindOption<?>, ?> options) {
117         return unwrap().find(revision, pathPattern, options);
118     }
119 
120     @Override
121     public CompletableFuture<List<Commit>> history(Revision from, Revision to, String pathPattern) {
122         return unwrap().history(from, to, pathPattern);
123     }
124 
125     @Override
126     public CompletableFuture<List<Commit>> history(Revision from, Revision to,
127                                                    String pathPattern, int maxCommits) {
128         return unwrap().history(from, to, pathPattern, maxCommits);
129     }
130 
131     @Override
132     public CompletableFuture<Change<?>> diff(Revision from, Revision to, Query<?> query) {
133         return unwrap().diff(from, to, query);
134     }
135 
136     @Override
137     public CompletableFuture<Map<String, Change<?>>> diff(Revision from, Revision to, String pathPattern) {
138         return unwrap().diff(from, to, pathPattern);
139     }
140 
141     @Override
142     public CompletableFuture<Map<String, Change<?>>> previewDiff(Revision baseRevision,
143                                                                  Iterable<Change<?>> changes) {
144         return unwrap().previewDiff(baseRevision, changes);
145     }
146 
147     @Override
148     public CompletableFuture<Map<String, Change<?>>> previewDiff(Revision baseRevision, Change<?>... changes) {
149         return unwrap().previewDiff(baseRevision, changes);
150     }
151 
152     @Override
153     public CompletableFuture<CommitResult> commit(Revision baseRevision, long commitTimeMillis,
154                                                   Author author, String summary, Iterable<Change<?>> changes) {
155         return unwrap().commit(baseRevision, commitTimeMillis, author, summary, changes);
156     }
157 
158     @Override
159     public CompletableFuture<CommitResult> commit(Revision baseRevision, long commitTimeMillis,
160                                                   Author author, String summary, Change<?>... changes) {
161         return unwrap().commit(baseRevision, commitTimeMillis, author, summary, changes);
162     }
163 
164     @Override
165     public CompletableFuture<CommitResult> commit(Revision baseRevision, long commitTimeMillis,
166                                                   Author author, String summary, String detail, Markup markup,
167                                                   Iterable<Change<?>> changes, boolean normalizing) {
168         return unwrap().commit(baseRevision, commitTimeMillis, author, summary, detail, markup, changes,
169                                normalizing);
170     }
171 
172     @Override
173     public CompletableFuture<CommitResult> commit(Revision baseRevision, long commitTimeMillis,
174                                                   Author author, String summary, String detail, Markup markup,
175                                                   Change<?>... changes) {
176         return unwrap().commit(baseRevision, commitTimeMillis, author, summary, detail, markup, changes);
177     }
178 
179     @Override
180     public CompletableFuture<Revision> findLatestRevision(Revision lastKnownRevision, String pathPattern,
181                                                           boolean errorOnEntryNotFound) {
182         return unwrap().findLatestRevision(lastKnownRevision, pathPattern, errorOnEntryNotFound);
183     }
184 
185     @Override
186     public CompletableFuture<Revision> watch(Revision lastKnownRevision, String pathPattern,
187                                              boolean errorOnEntryNotFound) {
188         return unwrap().watch(lastKnownRevision, pathPattern, errorOnEntryNotFound);
189     }
190 
191     @Override
192     public <T> CompletableFuture<Entry<T>> watch(Revision lastKnownRevision, Query<T> query,
193                                                  boolean errorOnEntryNotFound) {
194         return unwrap().watch(lastKnownRevision, query, errorOnEntryNotFound);
195     }
196 
197     @Override
198     public <T> CompletableFuture<MergedEntry<T>> mergeFiles(Revision revision, MergeQuery<T> query) {
199         return unwrap().mergeFiles(revision, query);
200     }
201 
202     @Override
203     public String toString() {
204         return Util.simpleTypeName(this) + '(' + unwrap() + ')';
205     }
206 }