diff --git a/pom.xml b/pom.xml
index 3b2dd0d..71f144e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.perales
sepomex-api
- 1.0-SNAPSHOT
+ 1.1.0-SNAPSHOT
jar
@@ -38,6 +38,16 @@
+
+ commons-fileupload
+ commons-fileupload
+ 1.4
+
+
+ commons-io
+ commons-io
+ 2.11.0
+
org.springframework.boot
spring-boot-starter-web
diff --git a/src/main/java/com/perales/sepomex/service/ArchivoService.java b/src/main/java/com/perales/sepomex/service/ArchivoService.java
index 62dccd8..81ddb35 100644
--- a/src/main/java/com/perales/sepomex/service/ArchivoService.java
+++ b/src/main/java/com/perales/sepomex/service/ArchivoService.java
@@ -4,26 +4,40 @@
import com.perales.sepomex.model.Archivo;
import com.perales.sepomex.model.Archivo;
import com.perales.sepomex.repository.ArchivoRepository;
+import io.undertow.server.handlers.form.FormData;
+import org.apache.commons.fileupload.disk.DiskFileItem;
+import org.apache.commons.io.IOUtils;
import org.apache.lucene.search.Query;
import org.hibernate.search.jpa.FullTextEntityManager;
import org.hibernate.search.jpa.Search;
import org.hibernate.search.query.dsl.QueryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ByteArrayResource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.file.Files;
import java.util.List;
import java.util.concurrent.TimeUnit;
+import org.apache.commons.fileupload.FileItem;
@Service
public class ArchivoService implements ServiceGeneric {
@Autowired
private ArchivoRepository ArchivoRepository;
+
+ @Autowired
+ private ColoniaService coloniaService;
@PersistenceContext
private EntityManager em;
@@ -55,4 +69,44 @@ public Archivo borrar(Integer id) {
ArchivoRepository.deleteById(id);
return Archivo;
}
+
+ private void descargarArchivo(String fileUrl, String destinationPath) throws Exception {
+ URL url = new URL(fileUrl);
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestMethod("GET");
+
+ try (InputStream inputStream = connection.getInputStream();
+ FileOutputStream outputStream = new FileOutputStream(destinationPath)) {
+
+ byte[] buffer = new byte[1024];
+ int bytesRead;
+ while ((bytesRead = inputStream.read(buffer)) != -1) {
+ outputStream.write(buffer, 0, bytesRead);
+ }
+ }
+ }
+
+ public Boolean procesarArchivo() {
+ try {
+ String fileUrl = "https://www.correosdemexico.gob.mx/datosabiertos/cp/cpdescarga.txt";
+ String tempFilePath = "/tmp/tempFile" + System.currentTimeMillis() + ".txt";
+ descargarArchivo(fileUrl, tempFilePath);
+ File file = new File(tempFilePath);
+ FileItem fileItem = new DiskFileItem("file", Files.probeContentType(file.toPath()),
+ false, file.getName(), (int) file.length(), file.getParentFile());
+
+ // Leer el contenido del archivo y copiarlo al FileItem
+ try (InputStream input = new FileInputStream(file);
+ OutputStream outputStream = fileItem.getOutputStream()) {
+ IOUtils.copy(input, outputStream);
+ }
+
+ MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
+ return coloniaService.actualizacionMasiva(multipartFile);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
}
diff --git a/src/main/java/com/perales/sepomex/service/ColoniaService.java b/src/main/java/com/perales/sepomex/service/ColoniaService.java
index d8c740e..425525f 100644
--- a/src/main/java/com/perales/sepomex/service/ColoniaService.java
+++ b/src/main/java/com/perales/sepomex/service/ColoniaService.java
@@ -60,6 +60,9 @@ public class ColoniaService implements ServiceGeneric {
@Autowired
private ColoniaRepository coloniaRepository;
+ @Autowired
+ private ArchivoService archivoService;
+
@Autowired
private CiudadRepository ciudadRepository;
@@ -132,9 +135,6 @@ public Colonia borrar(Long id) {
return colonia;
}
- @Autowired
- private ArchivoService archivoService;
-
public Boolean cargaMasiva(MultipartFile file) throws IOException {
EntityManager em = emf.createEntityManager();
try (BufferedReader br = new BufferedReader( new InputStreamReader( file.getInputStream() , "UTF-8") )) {
diff --git a/src/test/java/com/perales/sepomex/service/ArchivoServiceTest.java b/src/test/java/com/perales/sepomex/service/ArchivoServiceTest.java
index d8b6942..790fbf6 100644
--- a/src/test/java/com/perales/sepomex/service/ArchivoServiceTest.java
+++ b/src/test/java/com/perales/sepomex/service/ArchivoServiceTest.java
@@ -22,6 +22,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.core.IsNull.notNullValue;
+import static org.junit.Assert.assertTrue;
@SpringBootTest(classes = AppTestConfig.class)
@WebAppConfiguration
@@ -109,4 +110,11 @@ void borrar() {
NoSuchElementException exception = Assertions.assertThrows( NoSuchElementException.class, () -> archivoService.buscarPorId( archivoId ) );
assertThat("Debe lanzar la un NoSuchElementException ", exception, is( notNullValue() ) );
}
+
+ @Test
+ void procesarArchivo() {
+ boolean result = archivoService.procesarArchivo();
+ assertTrue(result);
+ }
+
}
\ No newline at end of file