package fr.openwide.maven.artifact.notifier.web.application.console.importation.page;
import java.io.File;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Session;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.SubmitLink;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.markup.html.link.ResourceLink;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.openwide.core.commons.util.mime.MediaType;
import fr.openwide.core.wicket.more.console.template.ConsoleTemplate;
import fr.openwide.maven.artifact.notifier.core.config.application.MavenArtifactNotifierConfigurer;
import fr.openwide.maven.artifact.notifier.core.util.init.service.IProjectImportDataService;
import fr.openwide.maven.artifact.notifier.web.application.console.importation.page.resource.ProjectImportModelResourceReference;
import fr.openwide.maven.artifact.notifier.web.application.console.importation.template.ConsoleImportTemplate;
public class ConsoleImportProjectPage extends ConsoleImportTemplate {
private static final long serialVersionUID = 2614078069284835152L;
private static final Logger LOGGER = LoggerFactory.getLogger(ConsoleImportProjectPage.class);
public static final String EXCEL_CONTENT_TYPE = MediaType.APPLICATION_MS_EXCEL.mime();
private IModel<List<FileUpload>> fileUploadsModel;
@SpringBean
private IProjectImportDataService projectImportDataService;
@SpringBean
private MavenArtifactNotifierConfigurer configurer;
public ConsoleImportProjectPage(PageParameters parameters) {
super(parameters);
addHeadPageTitleKey("console.import.project");
// File select form
final FileUploadField fileSelect = new FileUploadField("fileSelectInput", this.fileUploadsModel);
fileSelect.setLabel(new ResourceModel("console.import.project.file"));
fileSelect.add(AttributeModifier.replace("accept", getAcceptAttribute()));
Form<Void> form = new Form<Void>("fileSelectForm") {
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit() {
File file = null;
try {
FileUpload fileUpload = fileSelect.getFileUpload();
if (fileUpload == null) {
getSession().error(getString("console.import.project.error.noFile"));
return;
}
file = File.createTempFile("uploaded-", ".xls", configurer.getTmpDirectory());
fileUpload.writeTo(file);
projectImportDataService.importProjects(file);
Session.get().success(getString("console.import.project.success"));
} catch (Exception e) {
LOGGER.error("Unable to parse " + fileSelect.getFileUpload().getClientFileName() + " file", e);
Session.get().error(getString("console.import.project.error"));
} finally {
FileUtils.deleteQuietly(file);
}
}
};
form.add(fileSelect);
// Example excel file download link
form.add(new ResourceLink<Void>("downloadTemplate", ProjectImportModelResourceReference.get()));
form.add(new SubmitLink("importButton"));
add(form);
}
protected IModel<String> getAcceptAttribute() {
return Model.of(MediaType.APPLICATION_OPENXML_EXCEL.mime() + "," + MediaType.APPLICATION_MS_EXCEL.mime());
}
@Override
protected Class<? extends ConsoleTemplate> getMenuItemPageClass() {
return ConsoleImportProjectPage.class;
}
}