
com.somospnt.loaderlib.service.LoaderService Maven / Gradle / Ivy
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package com.somospnt.loaderlib.service;
import com.somospnt.loaderlib.exception.LoaderException;
import com.somospnt.loaderlib.factory.LineMapperFactory;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.nio.charset.Charset;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.item.file.LineMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
@Transactional
public class LoaderService {
private final JpaRepository jpaRepository;
private final LineMapper lineMapper;
private final Logger log = LoggerFactory.getLogger(LoaderService.class);
public LoaderService(
JpaRepository jpaRepository,
Class clase,
String... nombresCampos) {
this.jpaRepository = jpaRepository;
this.lineMapper = LineMapperFactory.crear(clase, nombresCampos);
}
@Value("${loader.charset.encoding:windows-1252}")
private Charset charsetEncoding;
/**
* Carga un inputStream en una tabla.
*
*/
@PreAuthorize(value = "hasAuthority('EJECUTAR_LOADER')")
public void cargar(InputStream inputStream) {
log.info("*********** COMIENZO LOADER ******************");
jpaRepository.deleteAllInBatch();
LineNumberReader reader = new LineNumberReader(new InputStreamReader(inputStream, charsetEncoding));
reader.lines().forEach(linea -> {
this.cargarLinea(linea, reader.getLineNumber());
});
log.info(" Cantidad de lineas insertadas: {}", reader.getLineNumber());
log.info("*********** FIN LOADER ***********************\n");
}
private void cargarLinea(String linea, int numeroLinea) {
try {
jpaRepository.save(lineMapper.mapLine(linea, 0));
} catch (Exception ex) {
throw new LoaderException(ex, numeroLinea);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy