Package fr.openwide.maven.artifact.notifier.web.application.project.component

Source Code of fr.openwide.maven.artifact.notifier.web.application.project.component.ProjectDescriptionPanel

package fr.openwide.maven.artifact.notifier.web.application.project.component;

import java.util.Set;

import org.apache.wicket.Session;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Button;
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.LoadableDetachableModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.odlabs.wiquery.core.events.MouseEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fr.openwide.core.wicket.markup.html.basic.HideableExternalLink;
import fr.openwide.core.wicket.markup.html.panel.GenericPanel;
import fr.openwide.core.wicket.more.markup.html.basic.DateLabel;
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.image.BooleanIcon;
import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.confirm.component.AjaxConfirmLink;
import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.behavior.AjaxModalOpenBehavior;
import fr.openwide.core.wicket.more.model.BindingModel;
import fr.openwide.core.wicket.more.model.CollectionToListWrapperModel;
import fr.openwide.core.wicket.more.util.DatePattern;
import fr.openwide.maven.artifact.notifier.core.business.project.model.Project;
import fr.openwide.maven.artifact.notifier.core.business.project.model.ProjectVersion;
import fr.openwide.maven.artifact.notifier.core.business.project.model.ProjectVersionStatus;
import fr.openwide.maven.artifact.notifier.core.business.project.service.IProjectService;
import fr.openwide.maven.artifact.notifier.core.business.search.service.IMavenCentralSearchUrlService;
import fr.openwide.maven.artifact.notifier.core.util.binding.Binding;
import fr.openwide.maven.artifact.notifier.web.application.MavenArtifactNotifierSession;
import fr.openwide.maven.artifact.notifier.web.application.artifact.component.ArtifactVersionTagPanel;
import fr.openwide.maven.artifact.notifier.web.application.common.component.AuthenticatedOnlyButton;
import fr.openwide.maven.artifact.notifier.web.application.project.form.ProjectVersionFormPopupPanel;

public class ProjectDescriptionPanel extends GenericPanel<Project> {

  private static final long serialVersionUID = 7757299234352613717L;
 
  private static final Logger LOGGER = LoggerFactory.getLogger(ProjectDescriptionPanel.class);

  @SpringBean
  private IMavenCentralSearchUrlService mavenCentralSearchUrlService;
 
  @SpringBean
  private IProjectService projectService;
 
  private ProjectVersionFormPopupPanel projectVersionAddPopup;
 
  private ProjectVersionFormPopupPanel projectVersionEditPopup;
 
  public ProjectDescriptionPanel(String id, IModel<? extends Project> projectModel) {
    super(id, projectModel);

    // Project version popups
    projectVersionAddPopup = new ProjectVersionFormPopupPanel("projectVersionAddPopup", FormPanelMode.ADD) {
      private static final long serialVersionUID = 1L;

      @Override
      protected Project getProject() {
        return ProjectDescriptionPanel.this.getModelObject();
      }
    };
    add(projectVersionAddPopup);
   
    projectVersionEditPopup = new ProjectVersionFormPopupPanel("projectVersionEditPopup", FormPanelMode.EDIT);
    add(projectVersionEditPopup);
   
    // Add action
    Button addButton = new AuthenticatedOnlyButton("add") {
      private static final long serialVersionUID = 1L;
     
      @Override
      protected void onConfigure() {
        super.onConfigure();
        setVisible(MavenArtifactNotifierSession.get().hasRoleAdmin());
      }
    };
    addButton.add(new AjaxModalOpenBehavior(projectVersionAddPopup, MouseEvent.CLICK));
    add(addButton);
   
    // Versions
    IModel<Set<ProjectVersion>> setModel = BindingModel.of(getModel(), Binding.project().versions());
    add(new ListView<ProjectVersion>("projectVersions", CollectionToListWrapperModel.of(setModel)) {
      private static final long serialVersionUID = 1L;

      @Override
      protected void populateItem(final ListItem<ProjectVersion> item) {
        item.add(new ArtifactVersionTagPanel("version", BindingModel.of(item.getModel(), Binding.projectVersion().version())));
        item.add(new DateLabel("lastUpdateDate", BindingModel.of(item.getModel(), Binding.projectVersion().lastUpdateDate()),
            DatePattern.SHORT_DATE));
       
        // Changelog link
        item.add(new HideableExternalLink("changelogLink",
            BindingModel.of(item.getModel(), Binding.projectVersion().additionalInformation().changelogUrl().url())));
       
        // Release notes link
        item.add(new HideableExternalLink("releaseNotesLink",
            BindingModel.of(item.getModel(), Binding.projectVersion().additionalInformation().releaseNotesUrl().url())));

        // Announce link
        item.add(new HideableExternalLink("announceLink",
            BindingModel.of(item.getModel(), Binding.projectVersion().additionalInformation().announceUrl().url())));
       
        // Status
        item.add(new BooleanIcon("centralAvailability", new LoadableDetachableModel<Boolean>() {
          private static final long serialVersionUID = 1L;

          @Override
          protected Boolean load() {
            IModel<ProjectVersionStatus> statusModel = BindingModel.of(item.getModel(), Binding.projectVersion().status());
            return ProjectVersionStatus.PUBLISHED_ON_MAVEN_CENTRAL.equals(statusModel.getObject());
          }
        }));
       
        // Edit action
        Button editButton = new AuthenticatedOnlyButton("edit");
        editButton.add(new AjaxModalOpenBehavior(projectVersionEditPopup, MouseEvent.CLICK) {
          private static final long serialVersionUID = 1L;

          @Override
          protected void onShow(AjaxRequestTarget target) {
            super.onShow(target);
            projectVersionEditPopup.getModel().setObject(item.getModelObject());
          }
        });
        item.add(editButton);
       
        // Delete action
        IModel<String> confirmationTextModel = new StringResourceModel("project.version.delete.confirmation.text", item.getModel());
        item.add(new AjaxConfirmLink<ProjectVersion>("delete", item.getModel(),
            new ResourceModel("project.version.delete.confirmation.title"),
            confirmationTextModel,
            new ResourceModel("common.confirm"),
            new ResourceModel("common.cancel"), null, false) {
          private static final long serialVersionUID = 1L;

          @Override
          public void onClick(AjaxRequestTarget target) {
            try {
              Project project = ProjectDescriptionPanel.this.getModelObject();
              ProjectVersion projectVersion = getModelObject();
             
              projectService.deleteProjectVersion(project, projectVersion);
              Session.get().success(getString("project.version.delete.success"));
            } catch (Exception e) {
              LOGGER.error("Error occured while removing artifact", e);
              Session.get().error(getString("project.version.delete.error"));
            }
            target.add(getPage());
            FeedbackUtils.refreshFeedback(target, getPage());
          }
         
          @Override
          protected void onConfigure() {
            super.onConfigure();
            setVisible(MavenArtifactNotifierSession.get().hasRoleAdmin());
          }
        });
      }
     
      @Override
      protected void onConfigure() {
        super.onConfigure();
        setVisible(!getModelObject().isEmpty());
      }
    });
   
    add(new WebMarkupContainer("emptyList") {
      private static final long serialVersionUID = 1L;

      @Override
      public void onConfigure() {
        super.onConfigure();
        setVisible(getModelObject().getVersions().isEmpty());
      }
    });
  }
}
TOP

Related Classes of fr.openwide.maven.artifact.notifier.web.application.project.component.ProjectDescriptionPanel

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.