James Moger
2015-12-10 63e4d9660de3f4c615a8e9444aaf3c3de128e77c
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;
667163 24 import org.apache.wicket.markup.html.basic.Label;
ce048e 25 import org.apache.wicket.markup.html.form.Button;
JM 26 import org.apache.wicket.markup.html.form.Form;
27 import org.apache.wicket.markup.html.form.TextField;
28 import org.apache.wicket.model.IModel;
29 import org.apache.wicket.model.Model;
30
31 import com.gitblit.models.RepositoryModel;
32 import com.gitblit.models.UserModel;
33 import com.gitblit.tickets.TicketMilestone;
019958 34 import com.gitblit.utils.StringUtils;
JM 35 import com.gitblit.utils.TimeUtils;
ce048e 36 import com.gitblit.wicket.GitBlitWebSession;
71a347 37 import com.gitblit.wicket.Html5DateField;
ce048e 38 import com.gitblit.wicket.WicketUtils;
JM 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));
71a347 81         form.add(new Html5DateField("due", dueModel, "yyyy-MM-dd"));
667163 82         form.add(new Label("dueFormat", "yyyy-MM-dd"));
71a347 83         addBottomScriptInline("{var e=document.createElement('input');e.type='date';if(e.type=='date'){$('[name=\"due\"]~.help-inline').hide()}}");
PM 84         addBottomScript("scripts/wicketHtml5Patch.js");
6209dc 85         form.add(new AjaxButton("create") {
ce048e 86
JM 87             private static final long serialVersionUID = 1L;
88
89             @Override
6209dc 90             protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
ce048e 91                 String name = nameModel.getObject();
019958 92                 if (StringUtils.isEmpty(name)) {
667163 93                     // invalid name
JM 94                     return;
95                 }
96
97                 TicketMilestone milestone = app().tickets().getMilestone(getRepositoryModel(), name);
98                 if (milestone != null) {
99                     // milestone already exists
019958 100                     return;
JM 101                 }
102
ce048e 103                 Date due = dueModel.getObject();
JM 104
105                 UserModel currentUser = GitBlitWebSession.get().getUser();
106                 String createdBy = currentUser.username;
019958 107
667163 108                 milestone = app().tickets().createMilestone(getRepositoryModel(), name, createdBy);
ce048e 109                 if (milestone != null) {
JM 110                     milestone.due = due;
111                     app().tickets().updateMilestone(getRepositoryModel(), milestone, createdBy);
60bbdf 112                     redirectTo(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
ce048e 113                 } else {
JM 114                     // TODO error
115                 }
116             }
6209dc 117         });
ce048e 118
JM 119         Button cancel = new Button("cancel") {
120             private static final long serialVersionUID = 1L;
121
122             @Override
123             public void onSubmit() {
3b23dc 124                 setResponsePage(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
ce048e 125             }
JM 126         };
127         cancel.setDefaultFormProcessing(false);
128         form.add(cancel);
129
130     }
131
132     @Override
133     protected String getPageName() {
134         return getString("gb.newMilestone");
135     }
136
137     @Override
138     protected Class<? extends BasePage> getRepoNavPageClass() {
139         return TicketsPage.class;
140     }
141 }