James Moger
2014-09-30 02ea71c71dbf162561f0a5d4151bc436fca38373
commit | author | age
ce048e 1 /*
JM 2  * Copyright 2014 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  */
16 package com.gitblit.wicket.pages;
17
18 import java.util.Date;
19
20 import org.apache.wicket.PageParameters;
21 import org.apache.wicket.RestartResponseException;
6209dc 22 import org.apache.wicket.ajax.AjaxRequestTarget;
JM 23 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
ce048e 24 import org.apache.wicket.extensions.markup.html.form.DateTextField;
667163 25 import org.apache.wicket.markup.html.basic.Label;
ce048e 26 import org.apache.wicket.markup.html.form.Button;
JM 27 import org.apache.wicket.markup.html.form.Form;
28 import org.apache.wicket.markup.html.form.TextField;
29 import org.apache.wicket.model.IModel;
30 import org.apache.wicket.model.Model;
31
32 import com.gitblit.models.RepositoryModel;
33 import com.gitblit.models.UserModel;
34 import com.gitblit.tickets.TicketMilestone;
019958 35 import com.gitblit.utils.StringUtils;
JM 36 import com.gitblit.utils.TimeUtils;
ce048e 37 import com.gitblit.wicket.GitBlitWebSession;
JM 38 import com.gitblit.wicket.WicketUtils;
39
40 /**
41  * Page for creating a new milestone.
42  *
43  * @author James Moger
44  *
45  */
46 public class NewMilestonePage extends RepositoryPage {
47
48     private IModel<String> nameModel;
49
50     private IModel<Date> dueModel;
019958 51
ce048e 52     public NewMilestonePage(PageParameters params) {
JM 53         super(params);
54
55         RepositoryModel model = getRepositoryModel();
56         if (!app().tickets().isAcceptingTicketUpdates(model)) {
57             // ticket service is read-only
3b23dc 58             throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
ce048e 59         }
019958 60
ce048e 61         UserModel currentUser = GitBlitWebSession.get().getUser();
JM 62         if (currentUser == null) {
63             currentUser = UserModel.ANONYMOUS;
64         }
65
66         if (!currentUser.isAuthenticated || !currentUser.canAdmin(model)) {
67             // administration prohibited
3b23dc 68             throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
ce048e 69         }
JM 70
71         setStatelessHint(false);
72         setOutputMarkupId(true);
73
6209dc 74         Form<Void> form = new Form<Void>("editForm");
JM 75         add(form);
76
77         nameModel = Model.of("");
78         dueModel = Model.of(new Date(System.currentTimeMillis() + TimeUtils.ONEDAY));
79
80         form.add(new TextField<String>("name", nameModel));
81         form.add(new DateTextField("due", dueModel, "yyyy-MM-dd"));
667163 82         form.add(new Label("dueFormat", "yyyy-MM-dd"));
6209dc 83
JM 84         form.add(new AjaxButton("create") {
ce048e 85
JM 86             private static final long serialVersionUID = 1L;
87
88             @Override
6209dc 89             protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
ce048e 90                 String name = nameModel.getObject();
019958 91                 if (StringUtils.isEmpty(name)) {
667163 92                     // invalid name
JM 93                     return;
94                 }
95
96                 TicketMilestone milestone = app().tickets().getMilestone(getRepositoryModel(), name);
97                 if (milestone != null) {
98                     // milestone already exists
019958 99                     return;
JM 100                 }
101
ce048e 102                 Date due = dueModel.getObject();
JM 103
104                 UserModel currentUser = GitBlitWebSession.get().getUser();
105                 String createdBy = currentUser.username;
019958 106
667163 107                 milestone = app().tickets().createMilestone(getRepositoryModel(), name, createdBy);
ce048e 108                 if (milestone != null) {
JM 109                     milestone.due = due;
110                     app().tickets().updateMilestone(getRepositoryModel(), milestone, createdBy);
60bbdf 111                     redirectTo(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
ce048e 112                 } else {
JM 113                     // TODO error
114                 }
115             }
6209dc 116         });
ce048e 117
JM 118         Button cancel = new Button("cancel") {
119             private static final long serialVersionUID = 1L;
120
121             @Override
122             public void onSubmit() {
3b23dc 123                 setResponsePage(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
ce048e 124             }
JM 125         };
126         cancel.setDefaultFormProcessing(false);
127         form.add(cancel);
128
129     }
130
131     @Override
132     protected String getPageName() {
133         return getString("gb.newMilestone");
134     }
135
136     @Override
137     protected Class<? extends BasePage> getRepoNavPageClass() {
138         return TicketsPage.class;
139     }
140 }