Răsfoiți Sursa

Solving importing problems

Drowsito 4 zile în urmă
părinte
comite
bc7035f0f1

+ 30 - 15
src/main/java/es/uv/saic/dto/ImportDTO.java

@@ -1,26 +1,26 @@
 package es.uv.saic.dto;
 
+import java.io.IOException;
 import java.util.List;
 
 import org.springframework.web.multipart.MultipartFile;
 
-import es.uv.saic.domain.Usuari;
-
 public class ImportDTO {
     // Campos comunes
     String tipus;
-    Usuari principal;
+    String principal;
     String enquesta;
     String ambit;
     String estudi;
     String locale;
     String clau;
     List<String> ignoredColumns;
-    
+
     // Campos específicos para importación desde archivo
-    MultipartFile file;
+    byte[] fileContent;
+    String fileName;
     String delim;
-    
+
     // Campos específicos para importación desde base de datos
     Integer dbOrigen;
     String vista;
@@ -28,10 +28,17 @@ public class ImportDTO {
     Integer dstCurs;
 
     // Constructor completo para todos los campos
-    public ImportDTO(MultipartFile file, String tipus, Usuari principal, String enquesta, String ambit, String estudi,
-            String locale, String delim, String clau, List<String> ignoredColumns, Integer dbOrigen, String vista, 
+    public ImportDTO(MultipartFile file, String tipus, String principal, String enquesta, String ambit, String estudi,
+            String locale, String delim, String clau, List<String> ignoredColumns, Integer dbOrigen, String vista,
             Integer curs, Integer dstCurs) {
-        this.file = file;
+        if (file != null) {
+            try {
+                this.fileContent = file.getBytes();
+                this.fileName = file.getOriginalFilename();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
         this.tipus = tipus;
         this.principal = principal;
         this.enquesta = enquesta;
@@ -47,12 +54,20 @@ public class ImportDTO {
         this.dstCurs = dstCurs;
     }
 
-    public MultipartFile getFile() {
-        return file;
+    public byte[] getFileContent() {
+        return fileContent;
+    }
+
+    public void setFileContent(byte[] fileContent) {
+        this.fileContent = fileContent;
+    }
+
+    public String getFileName() {
+        return fileName;
     }
 
-    public void setFile(MultipartFile file) {
-        this.file = file;
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
     }
 
     // Getters y Setters
@@ -64,11 +79,11 @@ public class ImportDTO {
         this.tipus = tipus;
     }
 
-    public Usuari getPrincipal() {
+    public String getPrincipal() {
         return principal;
     }
 
-    public void setPrincipal(Usuari principal) {
+    public void setPrincipal(String principal) {
         this.principal = principal;
     }
 

+ 14 - 15
src/main/java/es/uv/saic/service/DataService.java

@@ -2,11 +2,6 @@ package es.uv.saic.service;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
@@ -48,6 +43,8 @@ public class DataService {
 	
 	@Autowired
 	private DatasourceService dss;
+	@Autowired
+	private UsuariService us;
 
 	@Autowired
 	private CoreClient cc;
@@ -64,7 +61,7 @@ public class DataService {
 		centresMap.put("EDOC", "62");
 	}
 
-	public String doImport(InputStreamReader in, Usuari usuari, String enquesta, String ambit, String estudi, 
+	public String doImport(InputStreamReader in, String usuari, String enquesta, String ambit, String estudi, 
 						   String locale, String delim, String clau, List<String> ignoredColumns) throws IOException, MessagingException {
 		
 		CSVFormat format =  CSVFormat.DEFAULT.builder()
@@ -167,7 +164,7 @@ public class DataService {
 	        	ie.setNum(null);
 	        	ie.setCursd(cursd);
 	        	ie.setTipus(type);
-	        	ie.setUsuari(usuari.getUsuari());
+	        	ie.setUsuari(usuari);
 	        	ie.setData(new Timestamp(System.currentTimeMillis()));
 	        	ie.setCursEnquesta(cursEnquesta);
 	        	ie.setTitulacioOrigen(titulacioOrigen);
@@ -190,15 +187,16 @@ public class DataService {
 
 		/*  5) Notificar administradores y usuario implicado  */
 		this.sendNotificacion(usuari, enquesta, ambit, estudi);
-		if(!usuari.isAdmin()){
-			this.sendConfirmation(usuari.getUsuari(), enquesta, ambit, estudi);
+		Usuari usuario = us.findByUsername(usuari);
+		if(!usuario.isAdmin()){
+			this.sendConfirmation(usuari, enquesta, ambit, estudi);
 		}
 
 		errors.append("[INFO] " + (locale.equals("es") ? ("Se han importado "+numRecords.toString()+" nuevos registros para un total de "+numTuples.toString()+" titulaciones") : ("[INFO] S'han importat "+numRecords.toString()+" nous registres per a un total de "+numTuples.toString()+" titulacions")));
 		return errors.toString();
 	}
 
-	public String doDbImport(Integer dbOrigen, String vista, Integer srcCurs, Integer dstCurs, Usuari usuari, String enquesta, String ambit, 
+	public String doDbImport(Integer dbOrigen, String vista, Integer srcCurs, Integer dstCurs, String usuari, String enquesta, String ambit, 
 							 String estudi, String locale, String clau, List<String> ignoredColumns) throws SQLException, ClassNotFoundException {
 
 		StringBuilder errors = new StringBuilder();
@@ -312,7 +310,7 @@ public class DataService {
 						ie.setNum(null);
 						ie.setCursd(cursd);
 						ie.setTipus(tipus);
-						ie.setUsuari(usuari.getUsuari());
+						ie.setUsuari(usuari);
 						ie.setData(new Timestamp(System.currentTimeMillis()));
 						ie.setCursEnquesta(cursEnquesta);
 						ie.setTitulacioOrigen(titulacioOrigen);
@@ -337,8 +335,9 @@ public class DataService {
 
 		/*  5) Notificar administradores y usuario implicado  */
 		this.sendNotificacion(usuari, enquesta, ambit, estudi);
-		if(!usuari.isAdmin()){
-			this.sendConfirmation(usuari.getUsuari(), enquesta, ambit, estudi);
+		Usuari usuario = us.findByUsername(usuari);
+		if(!usuario.isAdmin()){
+			this.sendConfirmation(usuari, enquesta, ambit, estudi);
 		}
 		errors.append("[INFO] " + (locale.equals("es") ? ("Se han importado "+numRecords.toString()+" nuevos registros para un total de "+numTuples.toString()+" titulaciones") : ("[INFO] S'han importat "+numRecords.toString()+" nous registres per a un total de "+numTuples.toString()+" titulacions")));
 		return errors.toString();
@@ -482,10 +481,10 @@ public class DataService {
 		return isvalid;
 	}
 
-	private void sendNotificacion(Usuari usuari, String enquesta, String ambit, String estudi) {
+	private void sendNotificacion(String usuari, String enquesta, String ambit, String estudi) {
 		sendMail("saic@uv.es", "[SYS] Datos pendientes de consolidar", "Estimado/a administrador: \n"
 				+ "\n"
-				+ "El usuario "+usuari.getUsuari()+" ha importado nuevos datos referentes a: \n"
+				+ "El usuario "+usuari+" ha importado nuevos datos referentes a: \n"
 				+ "Origen: "+enquesta+"\n"
 				+ "Ámbito: "+ambit+"\n"
 				+ "Tipo titulación: "+estudi+"\n"

+ 4 - 1
src/main/java/es/uv/saic/web/DataController.java

@@ -1,5 +1,6 @@
 package es.uv.saic.web;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.sql.SQLException;
@@ -45,7 +46,9 @@ public class DataController {
 	public String uploadFile(@RequestBody ImportDTO importDTO) throws IOException, MessagingException, ClassNotFoundException, SQLException { 
 		String retval = "";
 		if(importDTO.getTipus().equals("file")){
-			InputStreamReader in = new InputStreamReader(importDTO.getFile().getInputStream());
+			byte[] fileBytes = importDTO.getFileContent();
+			ByteArrayInputStream bais = new ByteArrayInputStream(fileBytes);
+			InputStreamReader in = new InputStreamReader(bais);
 			retval = ips.doImport(in, importDTO.getPrincipal(), importDTO.getEnquesta(), importDTO.getAmbit(), importDTO.getEstudi(), importDTO.getLocale(),
 								importDTO.getDelim(), importDTO.getClau(), importDTO.getIgnoredColumns());
 		}