Просмотр исходного кода

Merge branch 'indicador-rework' of UV-APPS/UV_SAIC_DOCS into master

Mario Martínez Hernández 1 месяц назад
Родитель
Сommit
cb11075013

+ 0 - 15
src/main/java/es/uv/saic/config/SecurityConfig.java

@@ -4,12 +4,9 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.security.authentication.AuthenticationManager;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
 import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@@ -26,16 +23,11 @@ import org.springframework.security.web.authentication.session.RegisterSessionAu
 import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
 import org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy;
 import org.springframework.security.web.session.HttpSessionEventPublisher;
-import es.uv.saic.service.AuthProvider;
-
 
 @Configuration
 @EnableWebSecurity
 @EnableMethodSecurity
 public class SecurityConfig {
-
-	@Autowired
-	AuthProvider authProvider;
 	
 	@Value("${saic.actuator.validIp}")
 	private String validIp;
@@ -61,13 +53,6 @@ public class SecurityConfig {
 	
 	    return http.build();
 	}
-	    
-    @Bean
-    public AuthenticationManager authenticationManager(HttpSecurity http) throws Exception {
-        return http.getSharedObject(AuthenticationManagerBuilder.class)
-        		   .authenticationProvider(authProvider)
-        		   .build();
-    }
     
     @Bean
     public SessionRegistry sessionRegistry() {

+ 36 - 0
src/main/java/es/uv/saic/domain/EvidenciaIndicadorEnquesta.java

@@ -0,0 +1,36 @@
+package es.uv.saic.domain;
+
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.NamedQuery;
+import jakarta.persistence.Table;
+
+@Entity
+@Table(name="evidencia_indicador_enquesta")
+@NamedQuery(name="EvidenciaIndicadorEnquesta.findAll", query="SELECT n FROM EvidenciaIndicadorEnquesta n")
+public class EvidenciaIndicadorEnquesta {
+	
+	@EmbeddedId
+	private EvidenciaIndicadorEnquestaPK id;
+	
+	private String media;
+	
+	public EvidenciaIndicadorEnquesta(){}
+
+	public EvidenciaIndicadorEnquestaPK getId() {
+		return id;
+	}
+
+	public void setId(EvidenciaIndicadorEnquestaPK id) {
+		this.id = id;
+	}
+
+	public String getMedia() {
+		return media;
+	}
+
+	public void setMedia(String media) {
+		this.media = media;
+	}	
+
+}

+ 78 - 0
src/main/java/es/uv/saic/domain/EvidenciaIndicadorEnquestaPK.java

@@ -0,0 +1,78 @@
+package es.uv.saic.domain;
+
+import java.io.Serializable;
+
+public class EvidenciaIndicadorEnquestaPK  implements Serializable {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private String proces;
+	private String evidencia;
+	private String enquesta;
+	private String indicador;
+	
+	public EvidenciaIndicadorEnquestaPK() {}
+
+	public String getProces() {
+		return proces;
+	}
+
+	public void setProces(String proces) {
+		this.proces = proces;
+	}
+
+	public String getEvidencia() {
+		return evidencia;
+	}
+
+	public void setEvidencia(String evidencia) {
+		this.evidencia = evidencia;
+	}
+
+	public String getEnquesta() {
+		return enquesta;
+	}
+
+	public void setEnquesta(String enquesta) {
+		this.enquesta = enquesta;
+	}
+
+	public String getIndicador() {
+		return indicador;
+	}
+
+	public void setIndicador(String indicador) {
+		this.indicador = indicador;
+	}
+	
+	public static long getSerialversionuid() {
+		return serialVersionUID;
+	}
+	
+	public boolean equals(Object other) {
+		if (this == other) {
+			return true;
+		}
+		if (!(other instanceof EvidenciaIndicadorEnquestaPK)) {
+			return false;
+		}
+		EvidenciaIndicadorEnquestaPK castOther = (EvidenciaIndicadorEnquestaPK)other;
+		return 
+			this.proces.equals(castOther.proces)
+			&& this.evidencia.equals(castOther.evidencia)
+			&& this.enquesta.equals(castOther.enquesta)
+			&& this.indicador.equals(castOther.indicador);
+	}
+
+	public int hashCode() {
+		final int prime = 31;
+		int hash = 17;
+		hash = hash * prime + this.proces.hashCode();
+		hash = hash * prime + this.evidencia.hashCode();
+		hash = hash * prime + this.enquesta.hashCode();
+		hash = hash * prime + this.indicador.hashCode();
+		
+		return hash;
+	}
+	
+}

+ 235 - 0
src/main/java/es/uv/saic/domain/IndicadorEnquesta.java

@@ -0,0 +1,235 @@
+package es.uv.saic.domain;
+
+import java.time.LocalDateTime;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.NamedQuery;
+import jakarta.persistence.Table;
+
+@Entity
+@Table(name="indicador_enquesta")
+@NamedQuery(name="IndicadorEnquesta.findAll", query="SELECT n FROM IndicadorEnquesta n")
+public class IndicadorEnquesta {
+ 
+	@Id 
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id", updatable = false, nullable = false)
+	private Integer id;
+	private String valor;
+	private String num;
+	private Integer titulacio;
+	private Integer centre;
+	private Integer curs;
+	private String enquesta;
+	private String indicador;
+	private String ambit;
+	private String tipus;
+	private String estudi;
+	private String cursd;
+	private String cursEnquesta;
+	private String centreOrigen;
+	private String titulacioOrigen;
+	private Integer nenq;
+	private Integer ruct;
+	private LocalDateTime data;
+	
+	public IndicadorEnquesta(){}
+	
+	public Integer getId() {
+		return id;
+	}
+	
+	public void setId(Integer id) {
+		this.id = id;
+	}
+	
+	public Integer getTitulacio() {
+		return titulacio;
+	}
+
+	public void setTitulacio(Integer titulacio) {
+		this.titulacio = titulacio;
+	}
+	
+	public Integer getCentre() {
+		return centre;
+	}
+
+	public void setCentre(Integer centre) {
+		this.centre = centre;
+	}
+
+	public Integer getCurs() {
+		return curs;
+	}
+
+	public void setCurs(Integer curs) {
+		this.curs = curs;
+	}
+
+	public String getEnquesta() {
+		return enquesta;
+	}
+
+	public void setEnquesta(String enquesta) {
+		this.enquesta = enquesta;
+	}
+
+	public String getIndicador() {
+		return indicador;
+	}
+
+	public void setIndicador(String indicador) {
+		this.indicador = indicador;
+	}
+	
+	public String getValor() {
+		return valor;
+	}
+	
+	public void setValor(String valor) {
+		this.valor = valor;
+	}
+	
+	public String getNum() {
+		return num;
+	}
+	
+	public void setNum(String num) {
+		this.num = num;
+	}
+	
+	public String getAmbit() {
+		return ambit;
+	}
+	
+	public void setAmbit(String ambit) {
+		this.ambit = ambit;
+	}
+	
+	public String getTipus() {
+		return tipus;
+	}
+	
+	public void setTipus(String tipus) {
+		this.tipus = tipus;
+	}
+	
+	public String getEstudi() {
+		return estudi;
+	}
+	
+	public void setEstudi(String estudi) {
+		this.estudi = estudi;
+	}
+	
+	public String getCursd() {
+		return cursd;
+	}
+	
+	public void setCursd(String cursd) {
+		this.cursd = cursd;
+	}
+	
+	public String getCursEnquesta() {
+		return cursEnquesta;
+	}
+
+	public void setCursEnquesta(String cursEnquesta) {
+		this.cursEnquesta = cursEnquesta;
+	}
+
+	public String getCentreOrigen() {
+		return centreOrigen;
+	}
+
+	public void setCentreOrigen(String centreOrigen) {
+		this.centreOrigen = centreOrigen;
+	}
+
+	public String getTitulacioOrigen() {
+		return titulacioOrigen;
+	}
+
+	public void setTitulacioOrigen(String titulacioOrigen) {
+		this.titulacioOrigen = titulacioOrigen;
+	}
+
+	public Integer getNenq() {
+		return nenq;
+	}
+
+	public void setNenq(Integer nenq) {
+		this.nenq = nenq;
+	}
+
+	public Integer getRuct() {
+		return ruct;
+	}
+
+	public void setRuct(Integer ruct) {
+		this.ruct = ruct;
+	}
+
+	public LocalDateTime getData() {
+		return data;
+	}
+
+	public void setData(LocalDateTime data) {
+		this.data = data;
+	}
+	
+	public boolean equals(Object other) {
+		if (this == other) {
+			return true;
+		}
+		if (!(other instanceof IndicadorEnquesta)) {
+			return false;
+		}
+		IndicadorEnquesta castOther = (IndicadorEnquesta)other;
+		return 
+			this.id.equals(castOther.id) &&
+			this.valor.equals(castOther.valor) &&
+			this.num.equals(castOther.num) &&
+			this.centre.equals(castOther.centre) &&
+			this.titulacio.equals(castOther.titulacio) &&
+			this.curs.equals(castOther.curs) &&
+			this.ambit.equals(castOther.ambit) &&
+			this.enquesta.equals(castOther.enquesta) &&
+			this.indicador.equals(castOther.indicador) &&
+			this.cursd.equals(castOther.cursd) &&
+			this.cursEnquesta.equals(castOther.cursEnquesta) &&
+			this.titulacioOrigen.equals(castOther.titulacioOrigen) &&
+			this.centreOrigen.equals(castOther.centreOrigen) &&
+			this.nenq.equals(castOther.nenq) &&
+			this.ruct.equals(castOther.ruct)&&
+			this.data.equals(castOther.data);
+	}
+
+	public int hashCode() {
+		final int prime = 31;
+		int hash = 17;
+		hash = hash * prime + this.id.hashCode();
+		hash = hash * prime + this.valor.hashCode();
+		hash = hash * prime + this.num.hashCode();
+		hash = hash * prime + this.centre.hashCode();
+		hash = hash * prime + this.titulacio.hashCode();
+		hash = hash * prime + this.curs.hashCode();
+		hash = hash * prime + this.ambit.hashCode();
+		hash = hash * prime + this.enquesta.hashCode();
+		hash = hash * prime + this.indicador.hashCode();
+		hash = hash * prime + this.cursd.hashCode();
+		hash = hash * prime + this.cursEnquesta.hashCode();
+		hash = hash * prime + this.titulacioOrigen.hashCode();
+		hash = hash * prime + this.centreOrigen.hashCode();
+		hash = hash * prime + this.nenq.hashCode();
+		hash = hash * prime + this.ruct.hashCode();
+		hash = hash * prime + this.data.hashCode();
+		
+		return hash;
+	}
+}

+ 9 - 0
src/main/java/es/uv/saic/dto/IndicadorDTO.java

@@ -0,0 +1,9 @@
+package es.uv.saic.dto;
+
+public interface IndicadorDTO {
+	String getDimensio();
+	String getIndicador();
+	String getAmbit();
+	String getCurs();
+	String getValor();
+}

+ 54 - 0
src/main/java/es/uv/saic/dto/IndicadorDTOimp.java

@@ -0,0 +1,54 @@
+package es.uv.saic.dto;
+
+public class IndicadorDTOimp implements IndicadorDTO {
+    
+    private String dimensio;
+    private String indicador;
+    private String ambit;
+    private String curs;
+    private String valor;
+
+    public IndicadorDTOimp() {}
+    
+    public IndicadorDTOimp(String dimensio, String indicador, String ambit, String curs, String valor) {
+        this.dimensio = dimensio;
+        this.indicador = indicador;
+        this.ambit = ambit;
+        this.curs = curs;
+        this.valor = valor;
+    }
+
+    public IndicadorDTOimp(IndicadorDTO indicador) {
+        this.dimensio = indicador.getDimensio();
+        this.indicador = indicador.getIndicador();
+        this.ambit = indicador.getAmbit();
+        this.curs = indicador.getCurs();
+        this.valor = indicador.getValor();
+    }
+
+    @Override
+    public String getDimensio() {
+        return dimensio;
+    }
+
+    @Override
+    public String getIndicador() {
+        return indicador;
+    }
+
+    @Override
+    public String getAmbit() {
+        return ambit;
+    }
+
+    @Override
+    public String getCurs() {
+        return curs;
+    }
+
+    @Override
+    public String getValor() {
+        return valor;
+    }
+    
+}

+ 4 - 9
src/main/java/es/uv/saic/feign/CoreClient.java

@@ -10,8 +10,6 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import es.uv.saic.domain.Indicador;
-import es.uv.saic.dto.IndicadorEnquestaDTO;
-import es.uv.saic.dto.IndicadorEnquestaValorDTOImp;
 import es.uv.saic.dto.InstanciaTascaDTO;
 import es.uv.saic.dto.NomProcesOrganDTO;
 import es.uv.saic.dto.OrganDTO;
@@ -24,10 +22,7 @@ public interface CoreClient {
     //IndicadorController.java
     @GetMapping("/getFromTitulacio/{idTitulacio}/{curs}")
     public List<Indicador> getFromTitulacion(@PathVariable Integer idTitulacio, @PathVariable Integer curs);
-
-   @PostMapping("/allInds")
-    public List<IndicadorEnquestaValorDTOImp> getAllInds2(@RequestBody IndicadorEnquestaDTO indicadorEnquestaDTO);
-
+    
     //TascaController.java
     @GetMapping("/instanciatasca/{id}")
     InstanciaTascaDTO findInstanciaTascaById(@PathVariable("id") BigInteger id);
@@ -42,13 +37,13 @@ public interface CoreClient {
     TascaDTO getByProcesTascap(@PathVariable Integer idProces, @PathVariable Integer idTascap);
 
     //OrganController.java
-    @GetMapping("/organs/titulacions/{centre}/{tambit}")
+    @GetMapping("/organ/titulacions/{centre}/{tambit}")
     List<OrganDTO> getTitulacionsByCentreTambit(@PathVariable("centre") Integer lugar, @PathVariable("tambit") String tambit);
 
-    @GetMapping("/organs/find/{tlugar}/{idTitulacio}")
+    @GetMapping("/organ/find/{tlugar}/{idTitulacio}")
     OrganDTO findOrganById(@PathVariable("tlugar") String tlugar,  @PathVariable("idTitulacio") Integer idTitulacio);
 
-    @GetMapping("/organs/titulacions/type/{lugar}/{ambit}")
+    @GetMapping("/organ/titulacions/type/{lugar}/{ambit}")
     List<OrganDTO> getTitulacionsByTypeCentre(@PathVariable Integer lugar, @PathVariable Integer ambit);
 
     //ProcesController.java

+ 81 - 0
src/main/java/es/uv/saic/feign/IndicadorClient.java

@@ -0,0 +1,81 @@
+package es.uv.saic.feign;
+
+import java.util.HashMap;
+import java.util.List;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import es.uv.saic.domain.EvidenciaIndicadorEnquesta;
+import es.uv.saic.domain.Indicador;
+import es.uv.saic.domain.IndicadorEnquesta;
+import es.uv.saic.dto.IndicadorDTOimp;
+
+@FeignClient(name = "saic-data-service", contextId = "indicador-controller")
+public interface IndicadorClient {
+    @GetMapping("/indicadorEnquesta")
+    List<String> findTypes();
+
+    @DeleteMapping("/indicadorEnquesta/{enquesta}/{curs}/{ambit}/{estudi}")
+    public Integer deleteByEnquestaCursAmbitEstudi(@PathVariable("enquesta") String enquesta, @PathVariable("curs") Integer curs, 
+        @PathVariable("ambit") String ambit, @PathVariable("estudi") String estudi);
+
+    @DeleteMapping("/indicadorEnquesta/{enquesta}")
+    public Integer deleteByEnquesta(@PathVariable("enquesta") String enquesta);
+
+    @DeleteMapping("/indicadorEnquesta/current/{enquesta}")
+    public Integer deleteFromCurrent(@PathVariable("enquesta") String enquesta);
+    
+    @DeleteMapping("/indicadorEnquesta/pending/{enquesta}")
+    public Integer deleteFromPending(@PathVariable("enquesta") String enquesta);
+        
+    @DeleteMapping("/indicadorEnquesta/duplicates/{enquesta}")
+    public Integer deleteDuplicates(@PathVariable("enquesta") String enquesta);
+    
+    @PostMapping("/indicadorEnquesta/{enquesta}/{curs}/{ambit}/{estudi}")
+    public List<IndicadorEnquesta> findByEnquestaCursAmbitEstudi(@PathVariable("enquesta") String enquesta, @PathVariable("curs") Integer curs, 
+        @PathVariable("ambit") String ambit, @PathVariable("estudi") String estudi);
+
+    @PostMapping("/indicadorEnquesta/{enquesta}/{curs}/{ambit}/{estudi}/{centre}")
+    public List<IndicadorEnquesta> findByEnquestaCursAmbitEstudiCentre(@PathVariable("enquesta") String enquesta, @PathVariable("curs") Integer curs, 
+        @PathVariable("ambit") String ambit, @PathVariable("estudi") String estudi, @PathVariable("centre") String centre);
+    
+    @PostMapping("/indicadorEnquesta/{enquesta}/{curs}/{ambit}/{estudi}/{centre}/{titulacio}")
+    public List<IndicadorEnquesta> findByEnquestaCursAmbitEstudiCentreTitulacio(@PathVariable("enquesta") String enquesta, @PathVariable("curs") Integer curs, 
+        @PathVariable("ambit") String ambit, @PathVariable("estudi") String estudi, @PathVariable("centre") String centre, @PathVariable("titulacio") String titulacio);
+
+    @GetMapping("/indicadorEnquesta/getFromTitulacio/{idTitulacio}/{curs}")
+    public List<Indicador> getFromTitulacion(@PathVariable Integer idTitulacio, @PathVariable Integer curs);
+    
+    @GetMapping("/indicadorEnquesta/graph/{ruct}")
+    public List<Indicador> getGraphData(@PathVariable Integer ruct);
+
+    @PostMapping("/indicadorEnquesta/graph/centre")
+    public List<IndicadorDTOimp> getGraphData(@RequestParam Integer centre, @RequestParam String tambit, @RequestParam Integer year);
+
+    @PostMapping("/indicadorEnquesta/graph/titulacions")
+    public List<IndicadorDTOimp> getGraphData(@RequestParam List<Integer> tits, @RequestParam Integer centre, @RequestParam String tambit, @RequestParam Integer year);
+
+    @DeleteMapping("/indicadorEnquesta/{proces}/{enquesta}")
+    public void deleteByProcesEnquesta(@PathVariable String proces, @PathVariable String enquesta);
+    
+    @PostMapping("/indicadorEnquesta/save")
+    public void save(@RequestBody EvidenciaIndicadorEnquesta eie);
+
+    @GetMapping("/indicadorEnquesta/count/{enquesta}")
+    public Integer countByEnquesta(@PathVariable String enquesta);
+
+    @PostMapping("/indicadorEnquesta/templatedata")
+    public void getTemplateData(@RequestParam Integer idTitulacio, @RequestParam Integer idCentre, @RequestParam Integer curs, @RequestParam HashMap<String, String> context);
+
+    @PostMapping("/indicadorEnquesta/download/templatedata")
+    public HashMap<String, String> getTemplateData(@RequestParam Integer idTitulacio, @RequestParam Integer idCentre, @RequestParam Integer curs);
+
+    @PostMapping("/templatedata/array")
+    public HashMap<String, String> getTemplateDataArray(@RequestParam Integer idTitulacio, @RequestParam Integer idCentre, @RequestParam Integer curs);
+}

+ 0 - 160
src/main/java/es/uv/saic/service/AuthProvider.java

@@ -1,160 +0,0 @@
-package es.uv.saic.service;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.InitialDirContext;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.AuthenticationProvider;
-import org.springframework.security.authentication.AuthenticationServiceException;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
-import org.springframework.stereotype.Component;
-
-import es.uv.saic.SaicApplication;
-import es.uv.saic.domain.Usuari;
-
-@Component
-public class AuthProvider implements AuthenticationProvider {
-
-	@Autowired
-	private UsuariService us;
-	@Autowired
-    private UsuarisRolService urs;
-		
-	private static final Logger logger = LoggerFactory.getLogger(SaicApplication.class);
-	
-	@Override
-	public Authentication authenticate(Authentication auth) throws AuthenticationException {
-		String username = auth.getName().toLowerCase().trim();
-        String password = auth.getCredentials().toString(); 
-        
-        List<SimpleGrantedAuthority> authorities = new ArrayList<SimpleGrantedAuthority>();
-    	authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
-        
-        Usuari u = this.us.findByUsername(username);
-        
-        if(u != null) {
-        	u.setGranted(this.urs.isGrantedUser(u));
-            u.setAdmin(this.urs.isAdminUser(u));
-            u.setDataTest(this.urs.isDataTestUser(u));
-        	boolean vigent = this.us.hasActiveRol(u);
-        	
-	        if(!u.getLdap() && vigent) {
-	            if (u.getUsuari().equals(username) && u.getClau().equals(password)) {
-	            	logger.info("Autenticación LOCAL correcta: "+username);
-	            	if(u.isAdmin()) {
-	            		authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
-	            	}
-	            	if(u.isGranted()) {
-	            		authorities.add(new SimpleGrantedAuthority("ROLE_MANAGER"));
-	            	}
-	            	if(u.isDataTest()) {
-	            		authorities.add(new SimpleGrantedAuthority("ROLE_TESTER"));
-	            	}
-	            	UsernamePasswordAuthenticationToken authUser = new UsernamePasswordAuthenticationToken(u, password, authorities);
-	            	authUser.setDetails(u);
-	                return authUser ;
-	            } 
-	            else {
-	            	logger.info("Error de autenticación LOCAL ["+username+"]: el usuario o la contraseña no coinciden");
-	                throw new BadCredentialsException("Error de autenticación LOCAL ["+username+"]: el usuario o la contraseña no coinciden");
-	            }
-	        }
-	        else if(vigent) {
-	        	
-	        	Hashtable<String, String> env = new Hashtable<String, String>();
-
-                env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
-                env.put(Context.PROVIDER_URL, "ldap://ldap.uv.es/");
-                env.put(Context.SECURITY_AUTHENTICATION, "simple");
-                env.put(Context.SECURITY_PRINCIPAL, "uid=" + username.toLowerCase().trim() + ", dc=uv, dc=es ");
-                env.put(Context.SECURITY_CREDENTIALS, password);
-                
-                try {
-                    DirContext dc = new InitialDirContext(env);
-                    String base = "dc=uv,dc=es";
-                    String filter = "(&(uid=" + username + "))";
-                    int state = 0;
-
-                    SearchControls ctls = new SearchControls();
-                    ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-                    ctls.setReturningAttributes(new String[] { "uid" });
-
-                    NamingEnumeration<SearchResult> resultEnum = dc.search(base, filter, ctls);
-
-                    while (resultEnum.hasMore() && state < 2) {
-                        SearchResult result = resultEnum.next();
-
-                        Attributes attrs = result.getAttributes();
-                        if (attrs.size() != 1) {
-                            logger.info("Error de autenticación LDAP ["+username+"]: el usuario o la contraseña no coinciden");
-                            throw new BadCredentialsException("Error de autenticación LDAP ["+username+"]: el usuario o la contraseña no coinciden");
-                        }
-                        NamingEnumeration<?> e = attrs.getAll();
-                        while (e.hasMore()) {
-                            Attribute attr = (Attribute) e.next();
-                            if (!((String) attr.get()).equals(username)) {
-                                logger.info("Error de autenticación LDAP ["+username+"]: el usuario no coincide con el devuelto por el servidor");
-                                throw new BadCredentialsException("Error de autenticación LDAP ["+username+"]: el usuario no coincide con el devuelto por el servidor");
-                            }
-                        }
-                        state++;
-                    }
-
-                    dc.close();
-
-                    if (state < 1 || state > 1) {
-                        logger.info("Error de autenticación LDAP ["+username+"]: -> el servidor LDAP ha devuelto un estado incorrecto.");
-                        throw new BadCredentialsException("Error de autenticación LDAP ["+username+"]: -> el servidor LDAP ha devuelto un estado incorrecto.");
-                    }
-                    logger.info("Autenticación LDAP correcta: " + u.getUsuari());
-                    u.setDataUltim(LocalDateTime.now());
-                    this.us.save(u);
-	            	if(u.isAdmin()) {
-	            		authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
-	            	}
-	            	if(u.isGranted()) {
-	            		authorities.add(new SimpleGrantedAuthority("ROLE_MANAGER"));
-	            	}
-	            	if(u.isDataTest()) {
-	            		authorities.add(new SimpleGrantedAuthority("ROLE_TESTER"));
-	            	}
-	            	UsernamePasswordAuthenticationToken authUser = new UsernamePasswordAuthenticationToken(u, password, authorities);
-	            	authUser.setDetails(u);
-	                return authUser ;
-                } 
-                catch (NamingException ex) {
-                    logger.info("Error de autenticación ["+username+"]: " + ex.getMessage());
-                    throw new AuthenticationServiceException("Error de autenticación ["+username+"]: " + ex.getMessage());
-                }
-	        }
-        }
-        
-        throw new BadCredentialsException("Error general en el sistema de autenticación");
- 
-
-	}
-
-	@Override
-	public boolean supports(Class<?> auth) {
-		return auth.equals(UsernamePasswordAuthenticationToken.class);
-	}
-
-}

+ 10 - 37
src/main/java/es/uv/saic/service/PlantillaService.java

@@ -34,23 +34,22 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import es.uv.saic.domain.Indicador;
 import es.uv.saic.domain.Plantilla;
 import es.uv.saic.domain.PlantillaComentario;
 import es.uv.saic.domain.PlantillaConversation;
 import es.uv.saic.domain.PlantillaRepository;
-import es.uv.saic.dto.IndicadorEnquestaDTO;
-import es.uv.saic.dto.IndicadorEnquestaValorDTOImp;
 import es.uv.saic.dto.InstanciaTascaDTO;
 import es.uv.saic.dto.NomProcesOrganDTO;
 import es.uv.saic.dto.OrganDTO;
 import es.uv.saic.feign.CoreClient;
+import es.uv.saic.feign.IndicadorClient;
 
 @Service
 public class PlantillaService {
 
 	@Autowired
 	private PlantillaRepository r;
+	
 	@Value("${saic.data.filePath}")
 	private String filePath;
 	@Value("${saic.data.tmpPath}")
@@ -61,9 +60,13 @@ public class PlantillaService {
 	private String templatePath;
 	@Value("${saic.data.templates.logoPath}")
 	private String logoPath;
+	
 	@Autowired
 	private CoreClient core;
 	
+	@Autowired
+	private IndicadorClient ic;
+	
 	private static final DecimalFormat df = new DecimalFormat("0.00");
 	
 	public List<Plantilla> findAll(){
@@ -126,7 +129,7 @@ public class PlantillaService {
 		doc = iterateLoopAttr(idCentre, cursAvaluat, doc, context);
 		
 		/** Add template data (non iterated data)**/
-		getTemplateData(idTitulacio, idCentre, cursAvaluat, context);	
+		ic.getTemplateData(idTitulacio, idCentre, cursAvaluat, context);	
 		this.replaceValues(doc, context, header, img);
 		
 		/** Replace sections if specified in options **/
@@ -155,7 +158,7 @@ public class PlantillaService {
 		doc = iterateLoopAttr(idCentre, curs, doc, context);
 		
 		/** Add template data (non iterated data)**/
-		getTemplateData(idTitulacio, idCentre, curs, context);	
+		ic.getTemplateData(idTitulacio, idCentre, curs, context);	
 		this.replaceValues(doc, context, header, img);
 		
 		return doc.html();	
@@ -196,7 +199,7 @@ public class PlantillaService {
 			for(OrganDTO org : tits) {
 				context.clear();
 				Element e_copy = e.clone();
-				getTemplateData(org.getLugar(), org.getLugar2(), curs, context);
+				ic.getTemplateData(org.getLugar(), org.getLugar2(), curs, context);
 				context.put("titulacio_loop", org.getNomVal());
 				Elements ielements = e_copy.select("*:matchesWholeOwnText(\\{\\{([^\\}]*)\\}\\})");
 				for(Element ielem : ielements) {
@@ -243,7 +246,7 @@ public class PlantillaService {
 			for(OrganDTO t : tits) {
 				Document tabcopy = Jsoup.parse(tab.html());
 				context.clear();
-				getTemplateData(t.getLugar(), t.getLugar2(), curs, context);
+				ic.getTemplateData(t.getLugar(), t.getLugar2(), curs, context);
 				context.put("titulacio_loop", t.getNomVal());
 				tabcopy = this.replaceValuesLoop(tabcopy, context);
 				replaced += tabcopy.html()+"<p></p>";
@@ -302,36 +305,6 @@ public class PlantillaService {
 		return doc;
 	}
 	
-	private void getTemplateData(Integer idTitulacio, Integer idCentre, Integer curs, HashMap<String, String> context) {
-		
-		/*  Indicadores del data warehouse */
-		try {
-			List<Indicador> indicadores;
-			indicadores = core.getFromTitulacion(idTitulacio, curs);
-			for(Indicador i : indicadores) { 
-				context.put(i.getIndicador(), i.getValor());
-			}
-		} 
-		catch(Exception e) { }
-		
-		/*  Indicadores de encuestas y otros almacenados en BD  */
-		IndicadorEnquestaDTO indicadorEnquestaDTO = new IndicadorEnquestaDTO(idTitulacio, idCentre, curs);
-		List<IndicadorEnquestaValorDTOImp> enquestesT = core.getAllInds2(indicadorEnquestaDTO);
-				
-		for(IndicadorEnquestaValorDTOImp i : enquestesT) {
-			String indicador = i.getAmbit().toLowerCase().equals("t") ? (i.getEnquesta().toLowerCase()+"_"+i.getIndicador().toLowerCase()) : (i.getEnquesta().toLowerCase()+"_"+i.getIndicador().toLowerCase()+"_"+i.getAmbit().toLowerCase());
-			if(i.getNum() == null) {
-				indicador = i.getTipus().toLowerCase().equals("avg") ? indicador : (indicador += "_"+i.getTipus().toLowerCase());		
-				indicador = i.getCursd() == null ? indicador : (indicador += "_"+i.getCursd().toLowerCase());
-				context.put(indicador, formatValue(i.getValor()));
-			}
-			else {
-				context.put(indicador, i.getNum());
-			}
-			
-		}
-	}
-	
 	private Document replaceValuesLoop(Document doc, HashMap<String, String> context) {
 		Elements elems = doc.select("*:matchesWholeOwnText(\\{\\{([^\\}]*)\\}\\})");
 		for(Element e : elems) {

+ 54 - 111
src/main/java/es/uv/saic/web/DownloadController.java

@@ -27,6 +27,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.netflix.discovery.converters.Auto;
+
 import es.uv.saic.domain.Document;
 import es.uv.saic.domain.Indicador;
 import es.uv.saic.dto.IndicadorEnquestaDTO;
@@ -38,6 +40,7 @@ import es.uv.saic.dto.ProcesDTO;
 import es.uv.saic.dto.TascaDTO;
 import es.uv.saic.dto.TascaInformeTransferDTO;
 import es.uv.saic.feign.CoreClient;
+import es.uv.saic.feign.IndicadorClient;
 import es.uv.saic.service.DocumentService;
 import es.uv.saic.service.PlantillaService;
 import fr.opensagres.xdocreport.core.XDocReportException;
@@ -78,13 +81,17 @@ public class DownloadController {
 
 	@Autowired
 	private CoreClient core;
+	
+	@Autowired
+	private IndicadorClient ic;
 
 	/*
 	 * Download a file associated with a task instance
 	 * @param model
 	 * @param idInstanciaTasca The ID of the task instance
 	 * @param response HttpServletResponse
-	 * @return A FileSystemResource representing the file to download
+	 * @return A FileSystemResource
+	 *  representing the file to download
 	 */
 	@GetMapping(value="/downloads/{fileName}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
 	public ResponseEntity<byte[]> download(@PathVariable("fileName") BigInteger idInstanciaTasca, HttpServletResponse response) throws FileNotFoundException {		
@@ -235,15 +242,15 @@ public class DownloadController {
 			titulacions = core.getTitulacionsByTypeCentre(it.getInstancia().getLugar(), ambit);
 			List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
 			for(OrganDTO x : titulacions) {
-				HashMap<String, String> t = getTemplateDataArray(x.getLugar2(), idCentre, it.getInstancia().getCursAvaluat());
+				HashMap<String, String> t = ic.getTemplateDataArray(x.getLugar2(), idCentre, it.getInstancia().getCursAvaluat());
 				t.put("titulacio", x.getNomCas());
 				data.add(t);
 			} 
 			context.put("data", data);
-			getTemplateData(idTitulacio, idCentre, it.getInstancia().getCursAvaluat(), context);
+			addToContext(ic.getTemplateData(idTitulacio, idCentre, it.getInstancia().getCursAvaluat()), context);
 		}
 		else { // NO iterable template task
-			getTemplateData(idTitulacio, idCentre, it.getInstancia().getCursAvaluat(), context);
+			addToContext(ic.getTemplateData(idTitulacio, idCentre, it.getInstancia().getCursAvaluat()), context);
 		}	
 		
 		ByteArrayOutputStream out = new ByteArrayOutputStream();  
@@ -255,103 +262,6 @@ public class DownloadController {
 	}
 
 	/*
-	 * Populate the template data into the context
-	 * @param idTitulacio The ID of the degree
-	 * @param idCentre The ID of the center
-	 * @param curs The academic year
-	 * @param context The IContext to populate
-	 */
-	private void getTemplateData(Integer idTitulacio, Integer idCentre, Integer curs, IContext context) {
-		
-		/*  Indicadores del data warehouse */
-		try {
-			List<Indicador> indicadores;
-			indicadores = core.getFromTitulacion(idTitulacio, curs);
-			for(Indicador i : indicadores) { 
-				context.put(i.getIndicador(), i.getValor());
-			}
-		} 
-		catch(Exception e) { }
-		
-		/*  Indicadores de encuestas  */
-		List<IndicadorEnquestaValorDTOImp> enquestesT;
-		IndicadorEnquestaDTO iEnquestaDTO = new IndicadorEnquestaDTO(idTitulacio, idCentre, curs);
-		enquestesT = core.getAllInds2(iEnquestaDTO).stream()
-							.map(ind -> (IndicadorEnquestaValorDTOImp) ind)
-							.toList();
-				
-		for(IndicadorEnquestaValorDTOImp i : enquestesT) {
-			String indicador = i.getAmbit().equals("t") ? (i.getEnquesta()+"_"+i.getIndicador()) : (i.getEnquesta()+"_"+i.getIndicador()+"_"+i.getAmbit());
-			indicador = i.getTipus().equals("avg") ? indicador : (indicador += "_"+i.getTipus());		
-			indicador = i.getCursd() == null ? indicador : (indicador += "_"+i.getCursd());
-			context.put(indicador, formatValue(i.getValor()));
-		}
-	}
-
-	/*
-	 * Format a value for template insertion
-	 * @param v The value to format
-	 * @return The formatted value
-	 */
-	private String formatValue(String v) {	
-		if(v == null) return ""; 
-		if(v.equals("NP")) return "NP";
-		if(v.isEmpty() | v.isBlank()) {
-			return "";
-		}
-		
-		try{
-	        return String.format("%.2f", Float.parseFloat(v)).replace(",", ".");
-	    } 
-		catch(NumberFormatException e){ }
-		
-		try{
-	        return Integer.toString(Integer.parseInt(v));
-	    } 
-		catch(NumberFormatException e){ }
-		
-		return v;
-	}
-	
-	/*
-	 * Get template data as a HashMap
-	 * @param idTitulacio The ID of the degree
-	 * @param idCentre The ID of the center
-	 * @param curs The academic year
-	 * @return A HashMap containing the template data
-	 */
-	private HashMap<String, String> getTemplateDataArray(Integer idTitulacio, Integer idCentre, Integer curs) {
-		
-		HashMap<String, String> info = new HashMap<String, String>();
-		
-		/*  Indicadores del data warehouse */
-		try {
-			List<Indicador> indicadores;
-			indicadores = core.getFromTitulacion(idTitulacio, curs);
-			for(Indicador i : indicadores) { 
-				info.put(i.getIndicador(), i.getValor());
-			}
-		} 
-		catch(Exception e) { }
-		
-		/*  Indicadores de encuestas  */
-		List<IndicadorEnquestaValorDTOImp> enquestesT;	
-		IndicadorEnquestaDTO iEnquestaDTO = new IndicadorEnquestaDTO(idTitulacio, idCentre, curs);
-		enquestesT = core.getAllInds2(iEnquestaDTO).stream()
-										.map(ind -> (IndicadorEnquestaValorDTOImp) ind)
-										.toList();
-				
-		for(IndicadorEnquestaValorDTOImp i : enquestesT) {
-			String indicador = i.getAmbit().equals("t") ? (i.getEnquesta()+"_"+i.getIndicador()) : (i.getEnquesta()+"_"+i.getIndicador()+"_"+i.getAmbit());
-			indicador = i.getTipus().equals("avg") ? indicador : (indicador += "_"+i.getTipus());	
-			indicador = i.getCursd() == null ? indicador : (indicador += "_"+i.getCursd());
-			info.put(indicador, formatValue(i.getValor()));
-		}	
-		
-		return info;
-	}
-
-	/*
 	 * Test endpoint to generate a populated template for a given task (id of task)
 	 * @param model
 	 * @param idTitulacio The ID of the degree
@@ -363,7 +273,7 @@ public class DownloadController {
 	 */
 	@GetMapping(value="/test/template/{titulacio}/{centre}/{idProces}/{idTascap}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
 	@ResponseBody
-	public byte[] testTemplate(@PathVariable("titulacio") Integer idTitulacio, @PathVariable("centre") Integer idCentre,
+	public ResponseEntity<byte[]> testTemplate(@PathVariable("titulacio") Integer idTitulacio, @PathVariable("centre") Integer idCentre,
 			@PathVariable("idTascap") Integer idTascap, @PathVariable("idProces") Integer idProces, HttpServletResponse response) 
 					throws IOException, XDocReportException {
 		XDocReportRegistry.getRegistry().clear();
@@ -414,22 +324,22 @@ public class DownloadController {
 			titulacions = core.getTitulacionsByTypeCentre(centre.getLugar2(), ambit);
 			List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
 			for(OrganDTO x : titulacions) {
-				HashMap<String, String> t = getTemplateDataArray(x.getLugar2(), idCentre, proces.getCursAvaluat());
+				HashMap<String, String> t = ic.getTemplateDataArray(x.getLugar2(), idCentre, proces.getCursAvaluat());
 				t.put("titulacio", x.getNomCas());
 				data.add(t);
 			}
 			context.put("data", data);
-			getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat(), context);
+			addToContext(ic.getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat()), context);
 		}
 		else { // NO iterable template task
-			getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat(), context);
+			addToContext(ic.getTemplateData(idTitulacio, idCentre, proces.getCursAvaluat()), context);
 		}
 		
 		ByteArrayOutputStream out = new ByteArrayOutputStream();  
 		report.process(context, out);
 	    response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+tasca.getCodiEvidencia()+".docx\"");
 
-		return out.toByteArray();
+		return ResponseEntity.ok(out.toByteArray());
 	}
 
 	/*
@@ -445,7 +355,7 @@ public class DownloadController {
 	 */
 	@GetMapping(value="/test/template2/{titulacio}/{centre}/{evidencia}/{curs}/{tipusTasca}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
 	@ResponseBody
-	public byte[] testTemplate(Model model, @PathVariable("titulacio") Integer idTitulacio, @PathVariable("centre") Integer idCentre,
+	public ResponseEntity<byte[]> testTemplate(Model model, @PathVariable("titulacio") Integer idTitulacio, @PathVariable("centre") Integer idCentre,
 			@PathVariable("evidencia") String evidencia, @PathVariable("curs") Integer curs, @PathVariable("tipusTasca") Integer tipusTasca, 
 			HttpServletResponse response) throws IOException, XDocReportException {
 		XDocReportRegistry.getRegistry().clear();
@@ -496,22 +406,23 @@ public class DownloadController {
 			titulacions = core.getTitulacionsByTypeCentre(centre.getLugar2(), ambit);
 			List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();
 			for(OrganDTO x : titulacions) {
-				HashMap<String, String> t = getTemplateDataArray(x.getLugar2(), idCentre, curs);
+				HashMap<String, String> t = ic.getTemplateDataArray(x.getLugar2(), idCentre, curs);
 				t.put("titulacio", x.getNomCas());
 				data.add(t);
 			}
 			context.put("data", data);
-			getTemplateData(idTitulacio, idCentre, curs, context);
+			addToContext(ic.getTemplateData(idTitulacio, idCentre, curs), context);
 		}
 		else { // NO iterable template task
-			getTemplateData(idTitulacio, idCentre, curs, context);
+			addToContext(ic.getTemplateData(idTitulacio, idCentre, curs), context);
 		}
 		
 		ByteArrayOutputStream out = new ByteArrayOutputStream();  
 		report.process(context, out);
 	    response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""+evidencia+".docx\"");
+	    response.setHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
 
-		return out.toByteArray();
+		return ResponseEntity.ok(out.toByteArray());
 		
 	}
 	
@@ -546,4 +457,36 @@ public class DownloadController {
 		response.setHeader(HttpHeaders.CONTENT_TYPE, "application/pdf");	
 		return pls.toPDF(pdf.getContent(), pdf.getIdtascai());
 	}
+
+
+	private void addToContext(HashMap<String,String> templateData, IContext context) {
+		for (HashMap.Entry<String, String> entry : templateData.entrySet()) {
+		    context.put(entry.getKey(), formatValue(entry.getValue()));
+		}
+	}
+
+	/*
+	 * Format a value for template insertion
+	 * @param v The value to format
+	 * @return The formatted value
+	 */
+	private String formatValue(String v) {	
+		if(v == null) return ""; 
+		if(v.equals("NP")) return "NP";
+		if(v.isEmpty() | v.isBlank()) {
+			return "";
+		}
+		
+		try{
+	        return String.format("%.2f", Float.parseFloat(v)).replace(",", ".");
+	    } 
+		catch(NumberFormatException e){ }
+		
+		try{
+	        return Integer.toString(Integer.parseInt(v));
+	    } 
+		catch(NumberFormatException e){ }
+		
+		return v;
+	}
 }

+ 11 - 11
src/main/resources/application-local.properties

@@ -11,17 +11,17 @@ spring.datasource.url=jdbc:postgresql://saicd.uv.es:5432/saic_v2
 spring.datasource.password=docent1ia2.l6
 
 # Files and log config
-saic.data.filePath=/home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/files/
-saic.data.tmpPath=/home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/tmp/
-saic.data.docsPath=/home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/documents/
-saic.data.templates.filePath = /home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/templates/
-saic.data.templates.logoPath = /home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/templates/logos/
-saic.data.templates.fileNotFound = /home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/utils/filenotfound.pdf
-saic.data.master = /home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/databases/MasterOficial/
-saic.data.doctorado = /home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/databases/doctorat/
-saic.data.evdocente = /home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/databases/ev_docente/latest/
-logging.file.path=/home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/logs
-logging.file.name=/home/dagarcos/DATA_SYNC/UV_APPS/SAIC/DATA/saic-data/logsd/saic.log
+saic.data.filePath=/home/mariomh/Documentos/SAIC/docs/files/
+saic.data.tmpPath=/home/mariomh/Documentos/SAIC/docs/tmp/
+saic.data.docsPath=/home/mariomh/Documentos/SAIC/docs/documents/
+saic.data.templates.filePath = /home/mariomh/Documentos/SAIC/docs/templates/
+saic.data.templates.logoPath = /home/mariomh/Documentos/SAIC/docs/templates/logos/
+saic.data.templates.fileNotFound = /home/mariomh/Documentos/SAIC/docs/filenotfound.pdf
+saic.data.master = /home/mariomh/Documentos/SAIC/docs/databases/MasterOficial/
+saic.data.doctorado = /home/mariomh/Documentos/SAIC/docs/databases/doctorat/
+saic.data.evdocente = /home/mariomh/Documentos/SAIC/docs/databases/ev_docente/latest/
+logging.file.path=/home/mariomh/Documentos/SAIC/docs/logs
+logging.file.name=/home/mariomh/Documentos/SAIC/docs/logs/saic.log
 
 # Scheduler
 saic.scheduler.expired.enabled=false