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