/* * This is eMonocot, a global online biodiversity information resource. * * Copyright © 2011–2015 The Board of Trustees of the Royal Botanic Gardens, Kew and The University of Oxford * * eMonocot is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * eMonocot is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * The complete text of the GNU Affero General Public License is in the source repository as the file * ‘COPYING’. It is also available from <http://www.gnu.org/licenses/>. */ package org.emonocot.job.dwc; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.params.ModifiableSolrParams; import org.emonocot.api.job.DarwinCorePropertyMap; import org.emonocot.model.Taxon; import org.emonocot.persistence.hibernate.SolrIndexingListener; import org.gbif.dwc.terms.Term; import org.gbif.dwc.terms.DwcTerm; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobParameter; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.configuration.JobLocator; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author jk00kg * */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "/META-INF/spring/batch/jobs/flatFileCreator.xml", "/META-INF/spring/applicationContext-integration.xml", "/META-INF/spring/applicationContext-test.xml" }) @DirtiesContext(classMode = ClassMode.AFTER_CLASS) public class FlatFileCreatorIntegrationTest { @Autowired private JobLocator jobLocator; @Autowired @Qualifier("jobLauncher") private JobLauncher jobLauncher; @Autowired private SessionFactory sessionFactory; @Autowired SolrServer solrServer; @Autowired SolrIndexingListener solrIndexingListener; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { ModifiableSolrParams params = new ModifiableSolrParams(); params.add("q","*:*"); params.add("rows",new Integer(Integer.MAX_VALUE).toString()); params.add("df","id"); QueryResponse queryResponse = solrServer.query(params); SolrDocumentList solrDocumentList = queryResponse.getResults(); List<String> documentsToDelete = new ArrayList<String>(); for(int i = 0; i < solrDocumentList.size(); i++) { documentsToDelete.add(solrDocumentList.get(i).getFirstValue("id").toString()); } if(!documentsToDelete.isEmpty()) { solrServer.deleteById(documentsToDelete); solrServer.commit(true,true); } Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); List<Taxon> taxa = session.createQuery("from Taxon as taxon").list(); solrIndexingListener.indexObjects(taxa); tx.commit(); } /** * @throws java.lang.Exception */ @After public void tearDown() throws Exception { } /** * @throws Exception */ @Test public void testWriteTaxonFile() throws Exception { Map<String, JobParameter> parameters = new HashMap<String, JobParameter>(); parameters.put("query", new JobParameter("")); parameters.put("selected.facets", new JobParameter("taxon.family_ss=Araceae")); parameters.put("download.taxon", new JobParameter(toParameter(DarwinCorePropertyMap.getConceptTerms(DwcTerm.Taxon)))); parameters.put("download.file", new JobParameter(UUID.randomUUID().toString() + ".txt")); parameters.put("download.limit", new JobParameter(new Integer(Integer.MAX_VALUE).toString())); parameters.put("download.fieldsTerminatedBy", new JobParameter("\t")); parameters.put("download.fieldsEnclosedBy", new JobParameter("\"")); parameters.put("download.format", new JobParameter("taxon")); JobParameters jobParameters = new JobParameters(parameters); Job archiveCreatorJob = jobLocator.getJob("FlatFileCreation"); assertNotNull("flatFileCreatorJob must exist", archiveCreatorJob); JobExecution jobExecution = jobLauncher.run(archiveCreatorJob, jobParameters); assertEquals("The Job should be sucessful", ExitStatus.COMPLETED, jobExecution.getExitStatus()); } @Test public void testWriteChecklistPdf() throws Exception { Map<String, JobParameter> parameters = new HashMap<String, JobParameter>(); parameters.put("query", new JobParameter("")); parameters.put("selected.facets", new JobParameter("taxon.family_ss=Araceae")); parameters.put("download.taxon", new JobParameter(toParameter(DarwinCorePropertyMap.getConceptTerms(DwcTerm.Taxon)))); parameters.put("download.file", new JobParameter(UUID.randomUUID().toString() + ".pdf")); parameters.put("download.limit", new JobParameter(new Integer(Integer.MAX_VALUE).toString())); parameters.put("download.fieldsTerminatedBy", new JobParameter("\t")); parameters.put("download.fieldsEnclosedBy", new JobParameter("\"")); parameters.put("download.sort", new JobParameter("searchable.label_sort_asc")); parameters.put("download.format", new JobParameter("hierarchicalChecklist")); parameters.put("download.template.filepath", new JobParameter("org/emonocot/job/download/reports/name_report1.jrxml")); JobParameters jobParameters = new JobParameters(parameters); Job archiveCreatorJob = jobLocator.getJob("FlatFileCreation"); assertNotNull("flatFileCreator Job must exist", archiveCreatorJob); JobExecution jobExecution = jobLauncher.run(archiveCreatorJob, jobParameters); assertEquals("The Job should be sucessful", ExitStatus.COMPLETED, jobExecution.getExitStatus()); } private String toParameter(Collection<Term> terms) { StringBuffer stringBuffer = new StringBuffer(); if (terms != null && !terms.isEmpty()) { boolean isFirst = true; for (Term term : terms) { if(!isFirst) { stringBuffer.append(","); } else { isFirst = false; } stringBuffer.append(term.simpleName()); } } return stringBuffer.toString(); } }