James Moger
2011-04-23 f5d0ad7e706f1743b01dcc71f42112d533de89c2
commit | author | age
5fe7df 1 package com.gitblit.wicket.panels;
JM 2
bc10f9 3 import java.text.MessageFormat;
7ba0ec 4 import java.util.ArrayList;
7203a4 5 import java.util.Arrays;
1e47ab 6 import java.util.HashMap;
7ba0ec 7 import java.util.List;
1e47ab 8 import java.util.Map;
7ba0ec 9
1e47ab 10 import org.apache.wicket.Component;
5fe7df 11 import org.apache.wicket.markup.html.basic.Label;
7203a4 12 import org.apache.wicket.markup.html.form.DropDownChoice;
JM 13 import org.apache.wicket.markup.html.form.StatelessForm;
14 import org.apache.wicket.markup.html.form.TextField;
1e47ab 15 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
698678 16 import org.apache.wicket.markup.html.panel.Panel;
7ba0ec 17 import org.apache.wicket.markup.repeater.Item;
JM 18 import org.apache.wicket.markup.repeater.data.DataView;
19 import org.apache.wicket.markup.repeater.data.ListDataProvider;
7203a4 20 import org.apache.wicket.model.IModel;
JM 21 import org.apache.wicket.model.Model;
7ba0ec 22 import org.eclipse.jgit.lib.Repository;
5fe7df 23
87cc1e 24 import com.gitblit.GitBlit;
JM 25 import com.gitblit.Keys;
7ba0ec 26 import com.gitblit.utils.JGitUtils;
7203a4 27 import com.gitblit.utils.JGitUtils.SearchType;
5fe7df 28 import com.gitblit.wicket.LinkPanel;
698678 29 import com.gitblit.wicket.WicketUtils;
232890 30 import com.gitblit.wicket.pages.BranchesPage;
698678 31 import com.gitblit.wicket.pages.LogPage;
7203a4 32 import com.gitblit.wicket.pages.SearchPage;
5fe7df 33 import com.gitblit.wicket.pages.SummaryPage;
fb01c9 34 import com.gitblit.wicket.pages.TagsPage;
9802a7 35 import com.gitblit.wicket.pages.TicketsPage;
5fe7df 36 import com.gitblit.wicket.pages.TreePage;
JM 37
698678 38 public class PageLinksPanel extends Panel {
5fe7df 39
JM 40     private static final long serialVersionUID = 1L;
1e47ab 41
JM 42     private final Map<String, String> knownPages = new HashMap<String, String>() {
43
44         private static final long serialVersionUID = 1L;
45
46         {
47             put("summary", "gb.summary");
698678 48             put("log", "gb.log");
1e47ab 49             put("branches", "gb.branches");
JM 50             put("tags", "gb.tags");
51             put("tree", "gb.tree");
9802a7 52             put("tickets", "gb.tickets");
1e47ab 53         }
JM 54     };
5fe7df 55
7ba0ec 56     public PageLinksPanel(String id, Repository r, final String repositoryName, String pageName) {
5fe7df 57         super(id);
7ba0ec 58
5fe7df 59         // summary
698678 60         add(new BookmarkablePageLink<Void>("summary", SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
JM 61         add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
62         add(new BookmarkablePageLink<Void>("branches", BranchesPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
63         add(new BookmarkablePageLink<Void>("tags", TagsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
64         add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils.newRepositoryParameter(repositoryName)));
7ba0ec 65
9802a7 66         // Get the repository tickets setting
JM 67         boolean checkTicgit = GitBlit.self().settings().getBoolean(Keys.tickets.global, false);
68         checkTicgit |= GitBlit.self().settings().getBoolean(MessageFormat.format(Keys.tickets._ROOT + ".{0}", repositoryName), false);
155bf7 69
7ba0ec 70         // Add dynamic repository extras
JM 71         List<String> extras = new ArrayList<String>();
9802a7 72         if (checkTicgit && JGitUtils.getTicketsBranch(r) != null) {
JM 73             extras.add("tickets");
7ba0ec 74         }
JM 75
76         ListDataProvider<String> extrasDp = new ListDataProvider<String>(extras);
77         DataView<String> extrasView = new DataView<String>("extra", extrasDp) {
78             private static final long serialVersionUID = 1L;
79
80             public void populateItem(final Item<String> item) {
81                 String extra = item.getModelObject();
9802a7 82                 if (extra.equals("tickets")) {
7ba0ec 83                     item.add(new Label("extraSeparator", " | "));
9802a7 84                     item.add(new LinkPanel("extraLink", null, "tickets", TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
7ba0ec 85                 }
JM 86             }
87         };
88         add(extrasView);
7203a4 89
JM 90         add(new SearchForm("searchForm", repositoryName));
5fe7df 91     }
1e47ab 92
JM 93     public void disablePageLink(String pageName) {
94         for (String wicketId : knownPages.keySet()) {
95             String key = knownPages.get(wicketId);
96             String linkName = getString(key);
97             if (linkName.equals(pageName)) {
155bf7 98                 Component c = get(wicketId);
698678 99                 if (c != null) {
JM 100                     c.setEnabled(false);
101                 }
1e47ab 102                 break;
JM 103             }
104         }
105     }
7203a4 106
JM 107     class SearchForm extends StatelessForm<Void> {
108         private static final long serialVersionUID = 1L;
109
110         private final String repositoryName;
111
112         private final IModel<String> searchBoxModel = new Model<String>("");
113         
114         private final IModel<SearchType> searchTypeModel = new Model<SearchType>(SearchType.COMMIT);
115
116         public SearchForm(String id, String repositoryName) {
117             super(id);
118             this.repositoryName = repositoryName;
119             DropDownChoice<SearchType> searchType = new DropDownChoice<SearchType>("searchType", Arrays.asList(SearchType.values()));
120             searchType.setModel(searchTypeModel);
121             add(searchType);
122             add(new TextField<String>("searchBox", searchBoxModel));
123         }
124
125         @Override
126         public void onSubmit() {
127             SearchType searchType = searchTypeModel.getObject();
128             String searchString = searchBoxModel.getObject();
129             setResponsePage(SearchPage.class, WicketUtils.newSearchParameter(repositoryName, null, searchString, searchType));
130         }
131     }
5fe7df 132 }