Package com.gitblit.wicket.pages

Source Code of com.gitblit.wicket.pages.EditMilestonePage

/*
* Copyright 2014 gitblit.com.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gitblit.wicket.pages;

import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.wicket.PageParameters;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.extensions.markup.html.form.DateTextField;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

import com.gitblit.models.RepositoryModel;
import com.gitblit.models.TicketModel;
import com.gitblit.models.TicketModel.Status;
import com.gitblit.models.UserModel;
import com.gitblit.tickets.TicketMilestone;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.panels.BasePanel.JavascriptEventConfirmation;

/**
* Page for creating a new milestone.
*
* @author James Moger
*
*/
public class EditMilestonePage extends RepositoryPage {

  private final String oldName;

  private IModel<String> nameModel;

  private IModel<Date> dueModel;

  private IModel<Status> statusModel;

  private IModel<Boolean> notificationModel;

  public EditMilestonePage(PageParameters params) {
    super(params);

    RepositoryModel model = getRepositoryModel();
    if (!app().tickets().isAcceptingTicketUpdates(model)) {
      // ticket service is read-only
      throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
    }

    UserModel currentUser = GitBlitWebSession.get().getUser();
    if (currentUser == null) {
      currentUser = UserModel.ANONYMOUS;
    }

    if (!currentUser.isAuthenticated || !currentUser.canAdmin(model)) {
      // administration prohibited
      throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
    }

    oldName = WicketUtils.getObject(params);
    if (StringUtils.isEmpty(oldName)) {
      // milestone not specified
      throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
    }

    TicketMilestone tm = app().tickets().getMilestone(getRepositoryModel(), oldName);
    if (tm == null) {
      // milestone does not exist
      throw new RestartResponseException(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
    }

    setStatelessHint(false);
    setOutputMarkupId(true);

    Form<Void> form = new Form<Void>("editForm");
    add(form);

    nameModel = Model.of(tm.name);
    dueModel = Model.of(tm.due);
    statusModel = Model.of(tm.status);
    notificationModel = Model.of(true);

    form.add(new TextField<String>("name", nameModel));
    form.add(new DateTextField("due", dueModel, "yyyy-MM-dd"));
    form.add(new Label("dueFormat", "yyyy-MM-dd"));
    form.add(new CheckBox("notify", notificationModel));

    List<Status> statusChoices = Arrays.asList(Status.Open, Status.Closed);
    form.add(new DropDownChoice<TicketModel.Status>("status", statusModel, statusChoices));

    form.add(new AjaxButton("save") {

      private static final long serialVersionUID = 1L;

      @Override
      protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        String name = nameModel.getObject();
        if (StringUtils.isEmpty(name)) {
          return;
        }

        Date due = dueModel.getObject();
        Status status = statusModel.getObject();
        boolean rename = !name.equals(oldName);
        boolean notify = notificationModel.getObject();

        UserModel currentUser = GitBlitWebSession.get().getUser();
        String createdBy = currentUser.username;

        TicketMilestone tm = app().tickets().getMilestone(getRepositoryModel(), oldName);
        tm.setName(name);
        tm.setDue(due);
        tm.status = status;

        boolean success = true;
        if (rename) {
          success = app().tickets().renameMilestone(getRepositoryModel(), oldName, name, createdBy, notify);
        }

        if (success && app().tickets().updateMilestone(getRepositoryModel(), tm, createdBy)) {
          redirectTo(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
        } else {
          // TODO error
        }
      }
    });
    Button cancel = new Button("cancel") {
      private static final long serialVersionUID = 1L;

      @Override
      public void onSubmit() {
        setResponsePage(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
      }
    };
    cancel.setDefaultFormProcessing(false);
    form.add(cancel);

    Link<Void> delete = new Link<Void>("delete") {

      private static final long serialVersionUID = 1L;

      @Override
      public void onClick() {
        UserModel currentUser = GitBlitWebSession.get().getUser();
        String createdBy = currentUser.username;
        boolean notify = notificationModel.getObject();

        if (app().tickets().deleteMilestone(getRepositoryModel(), oldName, createdBy, notify)) {
          setResponsePage(TicketsPage.class, WicketUtils.newOpenTicketsParameter(repositoryName));
        } else {
          error(MessageFormat.format(getString("gb.milestoneDeleteFailed"), oldName));
        }
      }
    };

    delete.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
      getString("gb.deleteMilestone"), oldName)));

    form.add(delete);
  }

  @Override
  protected String getPageName() {
    return getString("gb.editMilestone");
  }

  @Override
  protected Class<? extends BasePage> getRepoNavPageClass() {
    return TicketsPage.class;
  }
}
TOP

Related Classes of com.gitblit.wicket.pages.EditMilestonePage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.