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

Source Code of fr.openwide.maven.artifact.notifier.web.application.project.page.ProjectDescriptionPage

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

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
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.more.link.descriptor.IPageLinkDescriptor;
import fr.openwide.core.wicket.more.link.descriptor.builder.LinkDescriptorBuilder;
import fr.openwide.core.wicket.more.link.descriptor.parameter.CommonParameters;
import fr.openwide.core.wicket.more.markup.html.feedback.FeedbackUtils;
import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.behavior.AjaxModalOpenBehavior;
import fr.openwide.core.wicket.more.markup.html.template.model.BreadCrumbElement;
import fr.openwide.core.wicket.more.model.GenericEntityModel;
import fr.openwide.maven.artifact.notifier.core.business.project.model.Project;
import fr.openwide.maven.artifact.notifier.core.business.project.service.IProjectService;
import fr.openwide.maven.artifact.notifier.core.business.user.model.User;
import fr.openwide.maven.artifact.notifier.core.business.user.service.IUserService;
import fr.openwide.maven.artifact.notifier.web.application.MavenArtifactNotifierSession;
import fr.openwide.maven.artifact.notifier.web.application.common.behavior.AuthenticatedOnlyBehavior;
import fr.openwide.maven.artifact.notifier.web.application.common.component.AuthenticatedOnlyButton;
import fr.openwide.maven.artifact.notifier.web.application.common.template.MainTemplate;
import fr.openwide.maven.artifact.notifier.web.application.project.component.ProjectArtifactsPanel;
import fr.openwide.maven.artifact.notifier.web.application.project.component.ProjectDescriptionPanel;
import fr.openwide.maven.artifact.notifier.web.application.project.component.ProjectLinksPanel;
import fr.openwide.maven.artifact.notifier.web.application.project.form.ProjectFormPopupPanel;

public class ProjectDescriptionPage extends MainTemplate {

  private static final long serialVersionUID = 524541454604961458L;

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

  @SpringBean
  private IProjectService projectService;
 
  @SpringBean
  private IUserService userService;
 
  private IModel<Project> projectModel;
 
  public static IPageLinkDescriptor linkDescriptor(IModel<Project> projectModel) {
    return new LinkDescriptorBuilder()
        .page(ProjectDescriptionPage.class)
        .map(CommonParameters.NATURAL_ID, projectModel, Project.class).mandatory()
        .build();
  }
 
  public ProjectDescriptionPage(PageParameters parameters) {
    super(parameters);
   
    projectModel = new GenericEntityModel<Long, Project>(null);
   
    linkDescriptor(projectModel).extractSafely(parameters, ProjectListPage.linkDescriptor());
   
    addBreadCrumbElement(new BreadCrumbElement(new ResourceModel("project.list.pageTitle"), ProjectListPage.linkDescriptor()));
    addBreadCrumbElement(new BreadCrumbElement(new StringResourceModel("project.description.pageTitle", projectModel),
        ProjectDescriptionPage.linkDescriptor(projectModel)));
   
    add(new Label("pageTitle", new StringResourceModel("project.description.pageTitle", projectModel)));
   
    // Edit popup
    ProjectFormPopupPanel editProjectPopup = new ProjectFormPopupPanel("editProjectPopup", projectModel);
    add(editProjectPopup);
   
    // Edit button
    Button editButton = new AuthenticatedOnlyButton("editButton");
    editButton.add(new AjaxModalOpenBehavior(editProjectPopup, MouseEvent.CLICK));
    add(editButton);
   
    // Follow
    AjaxLink<Project> follow = new AjaxLink<Project>("follow", projectModel) {
      private static final long serialVersionUID = 1L;
     
      @Override
      public void onClick(AjaxRequestTarget target) {
        try {
          userService.followProject(MavenArtifactNotifierSession.get().getUser(), getModelObject());
          target.add(getPage());
        } catch (Exception e) {
          LOGGER.error("Error occured while following project", e);
          getSession().error(getString("common.error.unexpected"));
        }
        FeedbackUtils.refreshFeedback(target, getPage());
      }
     
      @Override
      protected void onConfigure() {
        super.onConfigure();
        Project project = getModelObject();
        User user = MavenArtifactNotifierSession.get().getUser();
       
        setVisible(user != null && project != null && !userService.isFollowedProject(user, project));
      }
     
      // XXX: Disabled for now
      @Override
      public boolean isVisible() {
        return false;
      }
    };
    follow.add(new AuthenticatedOnlyBehavior());
    add(follow);
   
    // Unfollow
    AjaxLink<Project> unfollow = new AjaxLink<Project>("unfollow", projectModel) {
      private static final long serialVersionUID = 1L;
     
      @Override
      public void onClick(AjaxRequestTarget target) {
        try {
          userService.unfollowProject(MavenArtifactNotifierSession.get().getUser(), getModelObject());
          target.add(getPage());
        } catch (Exception e) {
          LOGGER.error("Error occured while unfollowing project", e);
          getSession().error(getString("common.error.unexpected"));
        }
        FeedbackUtils.refreshFeedback(target, getPage());
      }
     
      @Override
      protected void onConfigure() {
        super.onConfigure();
        Project project = getModelObject();
        User user = MavenArtifactNotifierSession.get().getUser();
       
        setVisible(user != null && project != null && userService.isFollowedProject(user, project));
      }
     
      // XXX: Disabled for now
      @Override
      public boolean isVisible() {
        return false;
      }
    };
    unfollow.add(new AuthenticatedOnlyBehavior());
    add(unfollow);
   
    add(new ProjectDescriptionPanel("projectDescriptionPanel", projectModel));
    add(new ProjectArtifactsPanel("projectArtifactsPanel", projectModel));
    add(new ProjectLinksPanel("projectLinksPanel", projectModel));
  }

  @Override
  protected Class<? extends WebPage> getFirstMenuPage() {
    return ProjectListPage.class;
  }
 
  @Override
  protected void onDetach() {
    super.onDetach();
    if (projectModel != null) {
      projectModel.detach();
    }
  }
}
TOP

Related Classes of fr.openwide.maven.artifact.notifier.web.application.project.page.ProjectDescriptionPage

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.