Package fr.openwide.maven.artifact.notifier.web.application.administration.form

Source Code of fr.openwide.maven.artifact.notifier.web.application.administration.form.UserGroupFormPopupPanel

package fr.openwide.maven.artifact.notifier.web.application.administration.form;

import org.apache.wicket.Component;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.Session;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Check;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fr.openwide.core.commons.util.functional.Suppliers2;
import fr.openwide.core.jpa.security.business.authority.model.Authority;
import fr.openwide.core.wicket.markup.html.form.CheckGroup;
import fr.openwide.core.wicket.more.markup.html.feedback.FeedbackUtils;
import fr.openwide.core.wicket.more.markup.html.form.FormPanelMode;
import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.component.AbstractAjaxModalPopupPanel;
import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.component.DelegatedMarkupPanel;
import fr.openwide.core.wicket.more.model.BindingModel;
import fr.openwide.core.wicket.more.model.GenericEntityModel;
import fr.openwide.maven.artifact.notifier.core.business.authority.MavenArtifactNotifierAuthorityUtils;
import fr.openwide.maven.artifact.notifier.core.business.user.model.UserGroup;
import fr.openwide.maven.artifact.notifier.core.business.user.service.IUserGroupService;
import fr.openwide.maven.artifact.notifier.core.util.binding.Binding;
import fr.openwide.maven.artifact.notifier.web.application.administration.page.AdministrationUserGroupDescriptionPage;

public class UserGroupFormPopupPanel extends AbstractAjaxModalPopupPanel<UserGroup> {

  private static final long serialVersionUID = 5369095796078187845L;

  private static final Logger LOGGER = LoggerFactory.getLogger(UserGroupFormPopupPanel.class);

  @SpringBean
  private IUserGroupService userGroupService;
 
  @SpringBean
  private MavenArtifactNotifierAuthorityUtils authorityUtils;

  private Form<UserGroup> userGroupForm;

  private FormPanelMode mode;

  public UserGroupFormPopupPanel(String id, IModel<UserGroup> userGroupModel) {
    this(id, userGroupModel, FormPanelMode.EDIT);
  }

  public UserGroupFormPopupPanel(String id) {
    this(id, new GenericEntityModel<Long, UserGroup>(new UserGroup()), FormPanelMode.ADD);
  }

  protected UserGroupFormPopupPanel(String id, IModel<UserGroup> userGroupModel, FormPanelMode mode) {
    super(id, userGroupModel);
   
    this.mode = mode;
  }

  @Override
  protected Component createHeader(String wicketId) {
    if (isAddMode()) {
      return new Label(wicketId, new ResourceModel("administration.usergroup.form.addTitle"));
    } else {
      return new Label(wicketId, new StringResourceModel("administration.usergroup.form.editTitle", getModel()));
    }
  }

  @Override
  protected Component createBody(String wicketId) {
    DelegatedMarkupPanel body = new DelegatedMarkupPanel(wicketId, UserGroupFormPopupPanel.class);
   
    userGroupForm = new Form<UserGroup>("form", getModel());
    body.add(userGroupForm);
   
    TextField<String> nameField = new RequiredTextField<String>("name", BindingModel.of(userGroupForm.getModel(),
        Binding.userGroup().name()));
    nameField.setLabel(new ResourceModel("administration.usergroup.field.name"));
    userGroupForm.add(nameField);
   
    TextArea<String> descriptionField = new TextArea<String>("description", BindingModel.of(userGroupForm.getModel(),
        Binding.userGroup().description()));
    descriptionField.setLabel(new ResourceModel("administration.usergroup.field.description"));
    userGroupForm.add(descriptionField);
   
    final CheckGroup<Authority> authorityCheckGroup = new CheckGroup<Authority>("authoritiesGroup",
        BindingModel.of(userGroupForm.getModel(), Binding.userGroup().authorities()), Suppliers2.<Authority>hashSet());
    userGroupForm.add(authorityCheckGroup);
   
    ListView<Authority> authoritiesListView = new ListView<Authority>("authorities",
        Model.ofList(authorityUtils.getPublicAuthorities())) {
      private static final long serialVersionUID = -7557232825932251026L;
     
      @Override
      protected void populateItem(ListItem<Authority> item) {
        Authority authority = item.getModelObject();
       
        Check<Authority> authorityCheck = new Check<Authority>("authorityCheck",
            new GenericEntityModel<Long, Authority>(authority));
       
        authorityCheck.setLabel(new ResourceModel("administration.usergroup.authority." + authority.getName()));
       
        authorityCheckGroup.add(authorityCheck);
        item.add(authorityCheck);
      }
    };
    authorityCheckGroup.add(authoritiesListView);
   
    return body;
  }

  @Override
  protected Component createFooter(String wicketId) {
    DelegatedMarkupPanel footer = new DelegatedMarkupPanel(wicketId, UserGroupFormPopupPanel.class);
   
    // Validate button
    AjaxButton validate = new AjaxButton("save", userGroupForm) {
      private static final long serialVersionUID = 1L;
     
      @Override
      protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
        UserGroup userGroup = UserGroupFormPopupPanel.this.getModelObject();
       
        try {
          if (isAddMode()) {
            userGroupService.create(userGroup);
            Session.get().success(getString("administration.usergroup.form.add.success"));
            throw AdministrationUserGroupDescriptionPage
                .linkDescriptor(UserGroupFormPopupPanel.this.getModel())
                .newRestartResponseException();
          } else {
            userGroupService.update(userGroup);
            Session.get().success(getString("administration.usergroup.form.edit.success"));
          }
          closePopup(target);
          target.add(getPage());
        } catch (RestartResponseException e) {
          throw e;
        } catch (Exception e) {
          if (isAddMode()) {
            LOGGER.error("Error occured while creating user group", e);
            Session.get().error(getString("administration.usergroup.form.add.error"));
          } else {
            LOGGER.error("Error occured while updating user group", e);
            Session.get().error(getString("administration.usergroup.form.edit.error"));
          }
        }
        FeedbackUtils.refreshFeedback(target, getPage());
      }
     
      @Override
      protected void onError(AjaxRequestTarget target, Form<?> form) {
        FeedbackUtils.refreshFeedback(target, getPage());
      }
    };
    Label validateLabel;
    if (isAddMode()) {
      validateLabel = new Label("validateLabel", new ResourceModel("common.action.create"));
    } else {
      validateLabel = new Label("validateLabel", new ResourceModel("common.action.save"));
    }
    validate.add(validateLabel);
    footer.add(validate);
   
    // Cancer button
    AbstractLink cancel = new AbstractLink("cancel") {
      private static final long serialVersionUID = 1L;
    };
    addCancelBehavior(cancel);
    footer.add(cancel);
   
    return footer;
  }

  protected boolean isEditMode() {
    return FormPanelMode.EDIT.equals(mode);
  }

  protected boolean isAddMode() {
    return FormPanelMode.ADD.equals(mode);
  }

  @Override
  public IModel<String> getCssClassNamesModel() {
    return Model.of("modal-usergroup");
  }

  @Override
  protected void onShow(AjaxRequestTarget target) {
    super.onShow(target);
    if (isAddMode()) {
      getModel().setObject(new UserGroup());
    }
  }
}
TOP

Related Classes of fr.openwide.maven.artifact.notifier.web.application.administration.form.UserGroupFormPopupPanel

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.