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

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

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

import java.io.File;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.wicket.Session;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.StatelessForm;
import org.apache.wicket.markup.html.form.SubmitLink;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.markup.html.navigation.paging.IPageable;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.util.ListModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fr.openwide.core.spring.config.CoreConfigurer;
import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.autosize.AutosizeBehavior;
import fr.openwide.maven.artifact.notifier.core.business.search.model.PomBean;
import fr.openwide.maven.artifact.notifier.core.business.search.service.IMavenCentralSearchApiService;

public class ArtifactPomSearchPanel extends Panel {

  private static final long serialVersionUID = 6273289257800090393L;
 
  private static final Logger LOGGER = LoggerFactory.getLogger(ArtifactPomSearchPanel.class);
 
  @SpringBean
  private IMavenCentralSearchApiService mavenCentralSearchApiService;
 
  @SpringBean
  private CoreConfigurer configurer;
 
  private IModel<List<FileUpload>> fileUploadsModel;
 
  private IModel<String> pomContentModel;
 
  private IModel<PomBean> pomBeanModel;
 
  public ArtifactPomSearchPanel(String id, final List<IPageable> pageableList, final IModel<PomBean> pomBeanModel) {
    super(id);
   
    this.pomBeanModel = pomBeanModel;
    this.fileUploadsModel = new ListModel<FileUpload>();
    this.pomContentModel = Model.of();
   
    // File select form
    final FileUploadField fileSelect = new FileUploadField("fileSelectInput", this.fileUploadsModel);
    Form<Void> fileSelectForm = new StatelessForm<Void>("fileSelectForm") {
      private static final long serialVersionUID = 1L;

      @Override
      protected void onSubmit() {
        File pomFile = null;
        try {
          FileUpload fileUpload = fileSelect.getFileUpload();
         
          if (fileUpload == null) {
            getSession().error(getString("artifact.follow.pom.error.noFile"));
            return;
          }
         
          pomFile = File.createTempFile("uploaded-pom-", ".xml", configurer.getTmpDirectory());
          fileUpload.writeTo(pomFile);
         
          PomBean pomBean = mavenCentralSearchApiService.searchFromPom(pomFile);
          ArtifactPomSearchPanel.this.pomBeanModel.setObject(pomBean);
          ArtifactPomSearchPanel.this.pomContentModel.setObject(null);
        } catch (Exception e) {
          LOGGER.error("Unable to parse " + fileSelect.getFileUpload().getClientFileName() + " file", e);
         
          Session.get().error(getString("artifact.follow.pom.error"));
        } finally {
          FileUtils.deleteQuietly(pomFile);
        }
       
        // Lors de la soumission d'un formulaire de recherche, on retourne sur la première page
        for (IPageable pageable : pageableList) {
          pageable.setCurrentPage(0);
        }
      }
    };
    fileSelectForm.add(fileSelect);
   
    fileSelectForm.add(new SubmitLink("fileSelectSubmit"));
   
    add(new Label("fileSelectLabel", new ResourceModel("artifact.follow.pom.search.file")));
    add(fileSelectForm);
   
    // File content form
    Form<Void> fileContentForm = new StatelessForm<Void>("fileContentForm") {
      private static final long serialVersionUID = 1L;

      @Override
      protected void onSubmit() {
        if (ArtifactPomSearchPanel.this.pomContentModel.getObject() == null) {
          getSession().error(getString("artifact.follow.pom.error.noContent"));
          return;
        }
       
        try {
          PomBean pomBean = mavenCentralSearchApiService.searchFromPom(ArtifactPomSearchPanel.this.pomContentModel.getObject());
          ArtifactPomSearchPanel.this.pomBeanModel.setObject(pomBean);
        } catch (Exception e) {
          LOGGER.error("Unable to parse the pom content from the provided string", e);
         
          Session.get().error(getString("artifact.follow.pom.error"));
        }
       
        // Lors de la soumission d'un formulaire de recherche, on retourne sur la première page
        for (IPageable pageable : pageableList) {
          pageable.setCurrentPage(0);
        }
      }
    };
   
    final TextArea<String> fileContent = new TextArea<String>("fileContentInput", this.pomContentModel);
   
    fileContent.setOutputMarkupId(true);
    fileContent.add(new AutosizeBehavior());
    fileContentForm.add(fileContent);
   
    fileContentForm.add(new SubmitLink("fileContentSubmit"));
   
    add(new Label("fileContentLabel", new ResourceModel("artifact.follow.pom.search.content")));
    add(fileContentForm);
  }

  @Override
  protected void onDetach() {
    super.onDetach();
    if (fileUploadsModel != null) {
      this.fileUploadsModel.detach();
    }
    if (pomContentModel != null) {
      this.pomContentModel.detach();
    }
    if (pomBeanModel != null) {
      this.pomBeanModel.detach();
    }
  }
}
TOP

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

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.