|
15 | 15 | */
|
16 | 16 | package com.gitblit.wicket.pages;
|
17 | 17 |
|
| 18 | +import java.io.OutputStream; |
| 19 | +import java.sql.Blob; |
18 | 20 | import java.util.ArrayList;
|
19 | 21 | import java.util.Arrays;
|
20 | 22 | import java.util.List;
|
| 23 | +import java.util.concurrent.Callable; |
21 | 24 |
|
22 | 25 | import org.apache.wicket.PageParameters;
|
| 26 | +import org.apache.wicket.behavior.SimpleAttributeModifier; |
23 | 27 | import org.apache.wicket.markup.html.basic.Label;
|
24 | 28 | import org.apache.wicket.markup.html.link.BookmarkablePageLink;
|
| 29 | +import org.apache.wicket.markup.html.link.DownloadLink; |
25 | 30 | import org.apache.wicket.markup.html.link.ExternalLink;
|
| 31 | +import org.apache.wicket.markup.html.link.Link; |
| 32 | +import org.apache.wicket.markup.html.link.ResourceLink; |
26 | 33 | import org.apache.wicket.markup.repeater.Item;
|
27 | 34 | import org.apache.wicket.markup.repeater.data.DataView;
|
28 | 35 | import org.apache.wicket.markup.repeater.data.ListDataProvider;
|
| 36 | +import org.apache.wicket.model.AbstractReadOnlyModel; |
| 37 | +import org.apache.wicket.model.IModel; |
29 | 38 | import org.apache.wicket.model.StringResourceModel;
|
| 39 | +import org.apache.wicket.request.target.basic.RedirectRequestTarget; |
| 40 | +import org.apache.wicket.request.target.resource.ResourceStreamRequestTarget; |
| 41 | +import org.apache.wicket.util.resource.AbstractResourceStream; |
| 42 | +import org.apache.wicket.util.resource.AbstractResourceStreamWriter; |
| 43 | +import org.apache.wicket.util.resource.IResourceStream; |
| 44 | +import org.bouncycastle.jcajce.provider.symmetric.Threefish; |
30 | 45 | import org.eclipse.jgit.diff.DiffEntry.ChangeType;
|
31 | 46 | import org.eclipse.jgit.lib.Repository;
|
32 | 47 | import org.eclipse.jgit.revwalk.RevCommit;
|
33 | 48 |
|
34 | 49 | import com.gitblit.Constants;
|
| 50 | +import com.gitblit.GitBlit; |
| 51 | +import com.gitblit.manager.FilestoreManager; |
| 52 | +import com.gitblit.manager.GitblitManager; |
| 53 | +import com.gitblit.models.FilestoreModel; |
35 | 54 | import com.gitblit.models.GitNote;
|
| 55 | +import com.gitblit.models.RepositoryModel; |
36 | 56 | import com.gitblit.models.PathModel.PathChangeModel;
|
37 | 57 | import com.gitblit.models.SubmoduleModel;
|
| 58 | +import com.gitblit.models.UserModel; |
38 | 59 | import com.gitblit.servlet.RawServlet;
|
39 | 60 | import com.gitblit.utils.JGitUtils;
|
40 | 61 | import com.gitblit.wicket.CacheControl;
|
| 62 | +import com.gitblit.wicket.GitBlitWebSession; |
41 | 63 | import com.gitblit.wicket.CacheControl.LastModified;
|
42 | 64 | import com.gitblit.wicket.WicketUtils;
|
43 | 65 | import com.gitblit.wicket.panels.CommitHeaderPanel;
|
@@ -198,7 +220,31 @@ public void populateItem(final Item<PathChangeModel> item) {
|
198 | 220 | }
|
199 | 221 |
|
200 | 222 | if (entry.isFilestoreItem()) {
|
201 |
| - item.add(new LinkPanel("pathName", "list", entry.path, filestoreItemUrl)); |
| 223 | + item.add(new LinkPanel("pathName", "list", entry.path, new Link<Object>("link", null) { |
| 224 | + |
| 225 | + private static final long serialVersionUID = 1L; |
| 226 | + |
| 227 | + @Override |
| 228 | + public void onClick() { |
| 229 | + |
| 230 | + IResourceStream resourceStream = new AbstractResourceStreamWriter() { |
| 231 | + |
| 232 | + private static final long serialVersionUID = 1L; |
| 233 | + |
| 234 | + @Override |
| 235 | + public void write(OutputStream output) { |
| 236 | + UserModel user = GitBlitWebSession.get().getUser(); |
| 237 | + user = user == null ? UserModel.ANONYMOUS : user; |
| 238 | + |
| 239 | + app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output); |
| 240 | + } |
| 241 | + }; |
| 242 | + |
| 243 | + |
| 244 | + getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); |
| 245 | + }})); |
| 246 | + |
| 247 | + |
202 | 248 | } else {
|
203 | 249 | item.add(new LinkPanel("pathName", "list", displayPath, BlobPage.class,
|
204 | 250 | WicketUtils.newPathParameter(repositoryName, entry.commitId, path)));
|
@@ -232,8 +278,56 @@ public void populateItem(final Item<PathChangeModel> item) {
|
232 | 278 | if (entry.isFilestoreItem()) {
|
233 | 279 | item.add(new Label("filestore", getString("gb.filestore")).setVisible(true));
|
234 | 280 |
|
235 |
| - item.add(new ExternalLink("view", filestoreItemUrl)); |
236 |
| - item.add(new ExternalLink("raw", filestoreItemUrl)); |
| 281 | + |
| 282 | + |
| 283 | + item.add(new Link<Object>("view", null) { |
| 284 | + |
| 285 | + private static final long serialVersionUID = 1L; |
| 286 | + |
| 287 | + @Override |
| 288 | + public void onClick() { |
| 289 | + |
| 290 | + IResourceStream resourceStream = new AbstractResourceStreamWriter() { |
| 291 | + |
| 292 | + private static final long serialVersionUID = 1L; |
| 293 | + |
| 294 | + @Override |
| 295 | + public void write(OutputStream output) { |
| 296 | + UserModel user = GitBlitWebSession.get().getUser(); |
| 297 | + user = user == null ? UserModel.ANONYMOUS : user; |
| 298 | + |
| 299 | + app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output); |
| 300 | + } |
| 301 | + }; |
| 302 | + |
| 303 | + |
| 304 | + getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); |
| 305 | + }}); |
| 306 | + |
| 307 | + item.add(new Link<Object>("raw", null) { |
| 308 | + |
| 309 | + private static final long serialVersionUID = 1L; |
| 310 | + |
| 311 | + @Override |
| 312 | + public void onClick() { |
| 313 | + |
| 314 | + IResourceStream resourceStream = new AbstractResourceStreamWriter() { |
| 315 | + |
| 316 | + private static final long serialVersionUID = 1L; |
| 317 | + |
| 318 | + @Override |
| 319 | + public void write(OutputStream output) { |
| 320 | + UserModel user = GitBlitWebSession.get().getUser(); |
| 321 | + user = user == null ? UserModel.ANONYMOUS : user; |
| 322 | + |
| 323 | + app().filestore().downloadBlob(entry.getFilestoreOid(), user, getRepositoryModel(), output); |
| 324 | + } |
| 325 | + }; |
| 326 | + |
| 327 | + |
| 328 | + getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(resourceStream, entry.path)); |
| 329 | + }}); |
| 330 | + |
237 | 331 | } else {
|
238 | 332 | item.add(new Label("filestore", getString("gb.filestore")).setVisible(false));
|
239 | 333 |
|
|
0 commit comments