From c5dfd60d174a9841e64e4097cecab5aea5c422d0 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sat, 12 Apr 2014 12:26:17 -0400 Subject: [PATCH] Documentation --- src/main/java/com/gitblit/wicket/pages/EditTicketPage.java | 82 ++++++++++++++++++++++++++++++++++------ 1 files changed, 69 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java b/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java index 5446dde..00cd47d 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java @@ -31,7 +31,9 @@ import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; +import org.eclipse.jgit.lib.Repository; +import com.gitblit.Constants; import com.gitblit.Constants.AccessPermission; import com.gitblit.models.RegistrantAccessPermission; import com.gitblit.models.TicketModel; @@ -68,6 +70,10 @@ private IModel<String> topicModel; + private IModel<String> mergeToModel; + + private IModel<Status> statusModel; + private IModel<TicketResponsible> responsibleModel; private IModel<TicketMilestone> milestoneModel; @@ -82,11 +88,6 @@ currentUser = UserModel.ANONYMOUS; } - if (!currentUser.isAuthenticated || !app().tickets().isAcceptingTicketUpdates(getRepositoryModel())) { - // tickets prohibited - setResponsePage(TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)); - } - long ticketId = 0L; try { String h = WicketUtils.getObject(params); @@ -96,8 +97,10 @@ } TicketModel ticket = app().tickets().getTicket(getRepositoryModel(), ticketId); - if (ticket == null) { - setResponsePage(TicketsPage.class, WicketUtils.newRepositoryParameter(repositoryName)); + if (ticket == null + || !currentUser.canEdit(ticket, getRepositoryModel()) + || !app().tickets().isAcceptingTicketUpdates(getRepositoryModel())) { + setResponsePage(TicketsPage.class, WicketUtils.newObjectParameter(repositoryName, "" + ticketId)); } typeModel = Model.of(ticket.type); @@ -105,6 +108,8 @@ topicModel = Model.of(ticket.topic == null ? "" : ticket.topic); responsibleModel = Model.of(); milestoneModel = Model.of(); + mergeToModel = Model.of(ticket.mergeTo == null ? getRepositoryModel().mergeTo : ticket.mergeTo); + statusModel = Model.of(ticket.status); setStatelessHint(false); setOutputMarkupId(true); @@ -129,15 +134,22 @@ Change change = new Change(createdBy); String title = titleModel.getObject(); - if (!ticket.title.equals(title)) { + if (!StringUtils.isEmpty(title) && !ticket.title.equals(title)) { // title change change.setField(Field.title, title); } String description = descriptionEditor.getText(); - if (!ticket.body.equals(description)) { + if ((StringUtils.isEmpty(ticket.body) && !StringUtils.isEmpty(description)) + || (!StringUtils.isEmpty(ticket.body) && !ticket.body.equals(description))) { // description change change.setField(Field.body, description); + } + + Status status = statusModel.getObject(); + if (!ticket.status.equals(status)) { + // status change + change.setField(Field.status, status); } Type type = typeModel.getObject(); @@ -174,6 +186,13 @@ } } + String mergeTo = mergeToModel.getObject(); + if ((StringUtils.isEmpty(ticket.mergeTo) && !StringUtils.isEmpty(mergeTo)) + || (!StringUtils.isEmpty(mergeTo) && !mergeTo.equals(ticket.mergeTo))) { + // integration branch change + change.setField(Field.mergeTo, mergeTo); + } + if (change.hasFieldChanges()) { if (!ticket.isWatching(createdBy)) { change.watch(createdBy); @@ -201,6 +220,7 @@ typeChoices = Arrays.asList(TicketModel.Type.choices()); } form.add(new DropDownChoice<TicketModel.Type>("type", typeModel, typeChoices)); + form.add(new TextField<String>("title", titleModel)); form.add(new TextField<String>("topic", topicModel)); @@ -215,7 +235,22 @@ descriptionEditor.setText(ticket.body); form.add(descriptionEditor); - if (currentUser != null && currentUser.isAuthenticated && currentUser.canPush(getRepositoryModel())) { + // status + List<Status> statusChoices; + if (ticket.isClosed()) { + statusChoices = Arrays.asList(ticket.status, Status.Open); + } else if (ticket.isProposal()) { + statusChoices = Arrays.asList(TicketModel.Status.proposalWorkflow); + } else if (ticket.isBug()) { + statusChoices = Arrays.asList(TicketModel.Status.bugWorkflow); + } else { + statusChoices = Arrays.asList(TicketModel.Status.requestWorkflow); + } + Fragment status = new Fragment("status", "statusFragment", this); + status.add(new DropDownChoice<TicketModel.Status>("status", statusModel, statusChoices)); + form.add(status); + + if (currentUser.canAdmin(ticket, getRepositoryModel())) { // responsible Set<String> userlist = new TreeSet<String>(ticket.getParticipants()); @@ -250,6 +285,13 @@ break; } } + if (milestoneModel.getObject() == null && !StringUtils.isEmpty(ticket.milestone)) { + // ensure that this unrecognized milestone is listed + // so that we get the <nil> selection. + TicketMilestone tms = new TicketMilestone(ticket.milestone); + milestones.add(tms); + milestoneModel.setObject(tms); + } if (!milestones.isEmpty()) { milestones.add(new TicketMilestone(NIL)); } @@ -258,12 +300,27 @@ milestone.add(new DropDownChoice<TicketMilestone>("milestone", milestoneModel, milestones)); form.add(milestone.setVisible(!milestones.isEmpty())); + + // mergeTo (integration branch) + List<String> branches = new ArrayList<String>(); + for (String branch : getRepositoryModel().getLocalBranches()) { + // exclude ticket branches + if (!branch.startsWith(Constants.R_TICKET)) { + branches.add(Repository.shortenRefName(branch)); + } + } + branches.remove(Repository.shortenRefName(getRepositoryModel().mergeTo)); + branches.add(0, Repository.shortenRefName(getRepositoryModel().mergeTo)); + + Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this); + mergeto.add(new DropDownChoice<String>("mergeto", mergeToModel, branches)); + form.add(mergeto.setVisible(!branches.isEmpty())); } else { - // user does not have permission to assign milestone or responsible + // user can not admin this ticket form.add(new Label("responsible").setVisible(false)); form.add(new Label("milestone").setVisible(false)); + form.add(new Label("mergeto").setVisible(false)); } - form.add(new Button("update")); Button cancel = new Button("cancel") { private static final long serialVersionUID = 1L; @@ -275,7 +332,6 @@ }; cancel.setDefaultFormProcessing(false); form.add(cancel); - } @Override -- Gitblit v1.9.1