ajermakovics
2012-09-19 eb9979971e78f2c6881128c42417b33ae1cafcde
commit | author | age
f13c4c 1 /*
JM 2  * Copyright 2011 gitblit.com.
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  */
98ce17 16 package com.gitblit.wicket.panels;
JM 17
18 import java.util.Date;
19 import java.util.List;
20 import java.util.Map;
21
5450d0 22 import org.apache.wicket.markup.html.basic.Label;
98ce17 23 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
JM 24 import org.apache.wicket.markup.repeater.Item;
25 import org.apache.wicket.markup.repeater.data.DataView;
26 import org.apache.wicket.markup.repeater.data.ListDataProvider;
27 import org.eclipse.jgit.lib.ObjectId;
28 import org.eclipse.jgit.lib.Repository;
29 import org.eclipse.jgit.revwalk.RevCommit;
30
33d8d8 31 import com.gitblit.Constants;
98ce17 32 import com.gitblit.GitBlit;
JM 33 import com.gitblit.Keys;
4ab184 34 import com.gitblit.models.RefModel;
98ce17 35 import com.gitblit.utils.JGitUtils;
f5d0ad 36 import com.gitblit.utils.StringUtils;
98ce17 37 import com.gitblit.wicket.WicketUtils;
JM 38 import com.gitblit.wicket.pages.CommitDiffPage;
39 import com.gitblit.wicket.pages.CommitPage;
4e1930 40 import com.gitblit.wicket.pages.GitSearchPage;
98ce17 41 import com.gitblit.wicket.pages.TreePage;
JM 42
43 public class SearchPanel extends BasePanel {
44
45     private static final long serialVersionUID = 1L;
46
2a7306 47     private boolean hasMore;
98ce17 48
2a7306 49     public SearchPanel(String wicketId, final String repositoryName, final String objectId,
33d8d8 50             final String value, Constants.SearchType searchType, Repository r, int limit, int pageOffset) {
98ce17 51         super(wicketId);
JM 52         boolean pageResults = limit <= 0;
2a7306 53         int itemsPerPage = GitBlit.getInteger(Keys.web.itemsPerPage, 50);
98ce17 54         if (itemsPerPage <= 1) {
JM 55             itemsPerPage = 50;
56         }
57
58         RevCommit commit = JGitUtils.getCommit(r, objectId);
59
4ab184 60         final Map<ObjectId, List<RefModel>> allRefs = JGitUtils.getAllRefs(r);
98ce17 61         List<RevCommit> commits;
JM 62         if (pageResults) {
63             // Paging result set
2a7306 64             commits = JGitUtils.searchRevlogs(r, objectId, value, searchType, pageOffset
JM 65                     * itemsPerPage, itemsPerPage);
98ce17 66         } else {
JM 67             // Fixed size result set
68             commits = JGitUtils.searchRevlogs(r, objectId, value, searchType, 0, limit);
69         }
70
71         // inaccurate way to determine if there are more commits.
72         // works unless commits.size() represents the exact end.
73         hasMore = commits.size() >= itemsPerPage;
74
75         // header
5450d0 76         add(new CommitHeaderPanel("commitHeader", repositoryName, commit));
85c2e6 77
5450d0 78         add(new Label("searchString", value));
JM 79         add(new Label("searchType", searchType.toString()));
98ce17 80
JM 81         ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
82         DataView<RevCommit> searchView = new DataView<RevCommit>("commit", dp) {
83             private static final long serialVersionUID = 1L;
2a7306 84             int counter;
98ce17 85
JM 86             public void populateItem(final Item<RevCommit> item) {
87                 final RevCommit entry = item.getModelObject();
88                 final Date date = JGitUtils.getCommitDate(entry);
89
9adf62 90                 item.add(WicketUtils.createDateLabel("commitDate", date, getTimeZone(), getTimeUtils()));
98ce17 91
JM 92                 // author search link
93                 String author = entry.getAuthorIdent().getName();
2a7306 94                 LinkPanel authorLink = new LinkPanel("commitAuthor", "list", author,
4e1930 95                         GitSearchPage.class, WicketUtils.newSearchParameter(repositoryName, objectId,
33d8d8 96                                 author, Constants.SearchType.AUTHOR));
JM 97                 setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
98ce17 98                 item.add(authorLink);
JM 99
a645ba 100                 // merge icon
JM 101                 if (entry.getParentCount() > 1) {
1e8390 102                     item.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
a645ba 103                 } else {
1e8390 104                     item.add(WicketUtils.newBlankImage("commitIcon"));
a645ba 105                 }
JM 106
98ce17 107                 String shortMessage = entry.getShortMessage();
a45caa 108                 String trimmedMessage = shortMessage;
JM 109                 if (allRefs.containsKey(entry.getId())) {
110                     trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG_REFS);
111                 } else {
112                     trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG);
113                 }
2a7306 114                 LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject",
JM 115                         trimmedMessage, CommitPage.class, WicketUtils.newObjectParameter(
116                                 repositoryName, entry.getName()));
98ce17 117                 if (!shortMessage.equals(trimmedMessage)) {
1e8390 118                     WicketUtils.setHtmlTooltip(shortlog, shortMessage);
98ce17 119                 }
JM 120                 item.add(shortlog);
121
122                 item.add(new RefsPanel("commitRefs", repositoryName, entry, allRefs));
123
2a7306 124                 item.add(new BookmarkablePageLink<Void>("commit", CommitPage.class, WicketUtils
JM 125                         .newObjectParameter(repositoryName, entry.getName())));
126                 item.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class,
127                         WicketUtils.newObjectParameter(repositoryName, entry.getName())));
128                 item.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils
129                         .newObjectParameter(repositoryName, entry.getName())));
98ce17 130
JM 131                 WicketUtils.setAlternatingBackground(item, counter);
132                 counter++;
133             }
134         };
135         add(searchView);
136     }
137
138     public boolean hasMore() {
139         return hasMore;
140     }
141 }