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

Source Code of fr.openwide.maven.artifact.notifier.web.application.artifact.component.ArtifactVersionLinksPanel$ArtifactVersionAdditionalInformationModel

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

import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.spring.injection.annot.SpringBean;

import fr.openwide.core.wicket.markup.html.basic.HideableExternalLink;
import fr.openwide.core.wicket.markup.html.panel.GenericPanel;
import fr.openwide.core.wicket.more.model.BindingModel;
import fr.openwide.maven.artifact.notifier.core.business.artifact.model.ArtifactVersion;
import fr.openwide.maven.artifact.notifier.core.business.artifact.service.IArtifactService;
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.common.model.EitherModel;

public class ArtifactVersionLinksPanel extends GenericPanel<ArtifactVersion> {

  private static final long serialVersionUID = 6624055534980328744L;
 
  @SpringBean
  private IMavenCentralSearchUrlService mavenCentralSearchUrlService;
 
  @SpringBean
  private IArtifactService artifactService;

  public ArtifactVersionLinksPanel(String id, IModel<? extends ArtifactVersion> model) {
    super(id, model);
   
    // Changelog link
    IModel<String> versionChangelogUrlModel = new ArtifactVersionAdditionalInformationModel<String>(
        BindingModel.of(getModel(), Binding.artifactVersion().additionalInformation().changelogUrl().url()),
        BindingModel.of(getModel(), Binding.artifactVersion().projectVersion().additionalInformation().changelogUrl().url()));
    IModel<String> changelogUrlModel = new ArtifactVersionAdditionalInformationModel<String>(
        versionChangelogUrlModel,
        BindingModel.of(getModel(), Binding.artifactVersion().projectVersion().project().additionalInformation().changelogUrl().url()));
    add(new HideableExternalLink("changelogLink", changelogUrlModel));
   
    // Release notes link
    IModel<String> releaseNotesUrlModel = new ArtifactVersionAdditionalInformationModel<String>(
        BindingModel.of(getModel(), Binding.artifactVersion().additionalInformation().releaseNotesUrl().url()),
        BindingModel.of(getModel(), Binding.artifactVersion().projectVersion().additionalInformation().releaseNotesUrl().url()));
    add(new HideableExternalLink("releaseNotesLink", releaseNotesUrlModel));

    // Announce link
    IModel<String> announceUrlModel = new ArtifactVersionAdditionalInformationModel<String>(
        BindingModel.of(getModel(), Binding.artifactVersion().additionalInformation().announceUrl().url()),
        BindingModel.of(getModel(), Binding.artifactVersion().projectVersion().additionalInformation().announceUrl().url()));
    add(new HideableExternalLink("announceLink", announceUrlModel));
   
    // Maven central link
    add(new ExternalLink("mavenCentralLink", new LoadableDetachableModel<String>() {
      private static final long serialVersionUID = 1L;

      @Override
      protected String load() {
        ArtifactVersion artifactVersion = getModelObject();
        return artifactVersion != null ? mavenCentralSearchUrlService.getVersionUrl(artifactVersion) : null;
      }
    }));
  }

  private class ArtifactVersionAdditionalInformationModel<T> extends EitherModel<T> {

    private static final long serialVersionUID = 8116743900640164832L;
   
    private IModel<? extends T> artifactVersionAdditionalInformationModel;

    public ArtifactVersionAdditionalInformationModel(IModel<? extends T> artifactVersionAdditionalInformationModel,
        IModel<? extends T> projectVersionAdditionalInformationModel) {
      super(artifactVersionAdditionalInformationModel, projectVersionAdditionalInformationModel);
      this.artifactVersionAdditionalInformationModel = artifactVersionAdditionalInformationModel;
    }
   
    @Override
    protected boolean shouldGetFirstModel() {
      ArtifactVersion artifactVersion = ArtifactVersionLinksPanel.this.getModelObject();
      return artifactVersion != null ? !artifactService.hasProject(artifactVersion.getArtifact()) ||
          artifactVersionAdditionalInformationModel.getObject() != null : true;
    }
  }
}
TOP

Related Classes of fr.openwide.maven.artifact.notifier.web.application.artifact.component.ArtifactVersionLinksPanel$ArtifactVersionAdditionalInformationModel

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.