James Moger
2011-11-18 309c55b5a9670e7c327ad8d4e5d94b8af840d00f
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  */
698678 16 package com.gitblit.wicket.panels;
JM 17
18 import java.util.List;
19
20 import org.apache.wicket.markup.html.basic.Label;
21 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
98ce17 22 import org.apache.wicket.markup.html.panel.Fragment;
698678 23 import org.apache.wicket.markup.repeater.Item;
JM 24 import org.apache.wicket.markup.repeater.data.DataView;
25 import org.apache.wicket.markup.repeater.data.ListDataProvider;
26 import org.apache.wicket.model.StringResourceModel;
4ab184 27 import org.eclipse.jgit.lib.Constants;
698678 28 import org.eclipse.jgit.lib.Repository;
JM 29
1f9dae 30 import com.gitblit.models.RefModel;
698678 31 import com.gitblit.utils.JGitUtils;
87cc1e 32 import com.gitblit.utils.StringUtils;
698678 33 import com.gitblit.wicket.WicketUtils;
4ab184 34 import com.gitblit.wicket.pages.BlobPage;
698678 35 import com.gitblit.wicket.pages.CommitPage;
JM 36 import com.gitblit.wicket.pages.LogPage;
4ab184 37 import com.gitblit.wicket.pages.RawPage;
JM 38 import com.gitblit.wicket.pages.RepositoryPage;
698678 39 import com.gitblit.wicket.pages.SummaryPage;
JM 40 import com.gitblit.wicket.pages.TagPage;
41 import com.gitblit.wicket.pages.TagsPage;
4ab184 42 import com.gitblit.wicket.pages.TreePage;
698678 43
bc10f9 44 public class TagsPanel extends BasePanel {
698678 45
JM 46     private static final long serialVersionUID = 1L;
008322 47
1fa5e8 48     private final boolean hasTags;
698678 49
JM 50     public TagsPanel(String wicketId, final String repositoryName, Repository r, final int maxCount) {
51         super(wicketId);
52
53         // header
5cc4f2 54         List<RefModel> tags = JGitUtils.getTags(r, false, maxCount);
698678 55         if (maxCount > 0) {
JM 56             // summary page
57             // show tags page link
2a7306 58             add(new LinkPanel("header", "title", new StringResourceModel("gb.tags", this, null),
JM 59                     TagsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
698678 60         } else {
JM 61             // tags page
62             // show repository summary page link
2a7306 63             add(new LinkPanel("header", "title", repositoryName, SummaryPage.class,
JM 64                     WicketUtils.newRepositoryParameter(repositoryName)));
698678 65         }
JM 66
67         ListDataProvider<RefModel> tagsDp = new ListDataProvider<RefModel>(tags);
68         DataView<RefModel> tagView = new DataView<RefModel>("tag", tagsDp) {
69             private static final long serialVersionUID = 1L;
2a7306 70             int counter;
698678 71
JM 72             public void populateItem(final Item<RefModel> item) {
73                 RefModel entry = item.getModelObject();
74
bc10f9 75                 item.add(WicketUtils.createDateLabel("tagDate", entry.getDate(), getTimeZone()));
698678 76
4ab184 77                 Class<? extends RepositoryPage> linkClass;
JM 78                 switch (entry.getReferencedObjectType()) {
79                 case Constants.OBJ_BLOB:
80                     linkClass = BlobPage.class;
81                     break;
82                 case Constants.OBJ_TREE:
83                     linkClass = TreePage.class;
84                     break;
85                 case Constants.OBJ_COMMIT:
86                 default:
87                     linkClass = CommitPage.class;
88                     break;
f5d0ad 89                 }
4ab184 90                 item.add(new LinkPanel("tagName", "list name", entry.displayName, linkClass,
JM 91                         WicketUtils.newObjectParameter(repositoryName, entry
92                                 .getReferencedObjectId().getName())));
88598b 93
85c2e6 94                 // workaround for RevTag returning a lengthy shortlog. :(
JM 95                 String message = StringUtils.trimShortLog(entry.getShortMessage());
96
4ab184 97                 if (linkClass.equals(BlobPage.class)) {
JM 98                     // Blob Tag Object
99                     item.add(WicketUtils.newImage("tagIcon", "file_16x16.png"));
2a7306 100                     item.add(new LinkPanel("tagDescription", "list", message, TagPage.class,
JM 101                             WicketUtils.newObjectParameter(repositoryName, entry.getObjectId()
102                                     .getName())));
4ab184 103
JM 104                     Fragment fragment = new Fragment("tagLinks", "blobLinks", this);
105                     fragment.add(new BookmarkablePageLink<Void>("tag", TagPage.class, WicketUtils
2a7306 106                             .newObjectParameter(repositoryName, entry.getObjectId().getName()))
JM 107                             .setEnabled(entry.isAnnotatedTag()));
4ab184 108
JM 109                     fragment.add(new BookmarkablePageLink<Void>("blob", linkClass, WicketUtils
110                             .newObjectParameter(repositoryName, entry.getReferencedObjectId()
2a7306 111                                     .getName())));
4ab184 112
JM 113                     fragment.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils
114                             .newObjectParameter(repositoryName, entry.getReferencedObjectId()
115                                     .getName())));
98ce17 116                     item.add(fragment);
698678 117                 } else {
4ab184 118                     // TODO Tree Tag Object
JM 119                     // Standard Tag Object
120                     if (entry.isAnnotatedTag()) {
121                         item.add(WicketUtils.newImage("tagIcon", "tag_16x16.png"));
122                         item.add(new LinkPanel("tagDescription", "list", message, TagPage.class,
123                                 WicketUtils.newObjectParameter(repositoryName, entry.getObjectId()
124                                         .getName())));
125
126                         Fragment fragment = new Fragment("tagLinks", "annotatedLinks", this);
127                         fragment.add(new BookmarkablePageLink<Void>("tag", TagPage.class,
128                                 WicketUtils.newObjectParameter(repositoryName, entry.getObjectId()
129                                         .getName())).setEnabled(entry.isAnnotatedTag()));
130
131                         fragment.add(new BookmarkablePageLink<Void>("commit", linkClass,
132                                 WicketUtils.newObjectParameter(repositoryName, entry
133                                         .getReferencedObjectId().getName())));
134
135                         fragment.add(new BookmarkablePageLink<Void>("log", LogPage.class,
136                                 WicketUtils.newObjectParameter(repositoryName, entry.getName())));
137                         item.add(fragment);
138                     } else {
139                         item.add(WicketUtils.newBlankImage("tagIcon"));
140                         item.add(new LinkPanel("tagDescription", "list", message, CommitPage.class,
141                                 WicketUtils.newObjectParameter(repositoryName, entry.getObjectId()
142                                         .getName())));
143                         Fragment fragment = new Fragment("tagLinks", "lightweightLinks", this);
144                         fragment.add(new BookmarkablePageLink<Void>("commit", CommitPage.class,
145                                 WicketUtils.newObjectParameter(repositoryName, entry
146                                         .getReferencedObjectId().getName())));
147                         fragment.add(new BookmarkablePageLink<Void>("log", LogPage.class,
148                                 WicketUtils.newObjectParameter(repositoryName, entry.getName())));
149                         item.add(fragment);
150                     }
698678 151                 }
JM 152
153                 WicketUtils.setAlternatingBackground(item, counter);
154                 counter++;
155             }
156         };
157         add(tagView);
158         if (tags.size() < maxCount || maxCount <= 0) {
159             add(new Label("allTags", "").setVisible(false));
160         } else {
2a7306 161             add(new LinkPanel("allTags", "link", new StringResourceModel("gb.allTags", this, null),
JM 162                     TagsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
698678 163         }
008322 164
1fa5e8 165         hasTags = tags.size() > 0;
JM 166     }
008322 167
1fa5e8 168     public TagsPanel hideIfEmpty() {
JM 169         setVisible(hasTags);
170         return this;
698678 171     }
JM 172 }