From 49ba88dc25e65244f11297fcce3f804a720948f8 Mon Sep 17 00:00:00 2001 From: Aris Mamo Date: Thu, 21 Nov 2024 09:58:22 +0100 Subject: [PATCH] - Added default dataFromDate parameter to load by default old data as they were actual data - Updated to Spring boot 3.3.5 --- gecoregistration/pom.xml | 54 ++--- .../GecoRegistrationSpringApplication.java | 3 - .../config/CorsConfigurationConfig.java | 42 ---- .../it/enea/cruise/config/CorsFilter.java | 29 ++- .../config/ElasticSearchConfiguration.java | 51 +++++ .../it/enea/cruise/config/SecurityConfig.java | 96 +++++++++ .../enea/cruise/config/SpringFoxConfig.java | 3 +- .../cruise/controller/DataController.java | 27 +-- .../controller/ExceptionController.java | 2 +- .../cruise/controller/MailController.java | 20 +- .../cruise/controller/QueryController.java | 6 +- .../controller/StructureController.java | 14 +- .../cruise/controller/UserController.java | 186 +++++++----------- .../enea/cruise/controller/idpController.java | 10 +- .../it/enea/cruise/data/InputParameters.java | 167 ++++++++-------- .../main/java/it/enea/cruise/dto/FlowDTO.java | 2 +- .../java/it/enea/cruise/model/Cluster.java | 6 +- .../it/enea/cruise/model/ClusterGroup.java | 8 +- .../cruise/model/data/DataConsumption.java | 6 +- .../cruise/model/structure/ForeignKey.java | 8 +- .../model/structure/VwTableMetadata.java | 2 +- .../model/user/AdmittedQueryValues.java | 2 +- .../it/enea/cruise/model/user/Community.java | 2 +- .../it/enea/cruise/model/user/Device.java | 5 +- .../java/it/enea/cruise/model/user/Flow.java | 2 +- .../enea/cruise/model/user/FlowCommunity.java | 10 +- .../cruise/model/user/FlowCommunityId.java | 6 +- .../model/user/LocalQueryParameter.java | 2 +- .../it/enea/cruise/model/user/OldUser.java | 20 +- .../cruise/model/user/ParametricQuery.java | 2 +- .../java/it/enea/cruise/model/user/Role.java | 2 +- .../java/it/enea/cruise/model/user/User.java | 2 +- .../enea/cruise/model/user/UserCommunity.java | 24 +-- .../cruise/model/user/UserCommunityId.java | 6 +- .../it/enea/cruise/model/user/UserRole.java | 27 ++- .../it/enea/cruise/model/user/UserRoleId.java | 6 +- .../enea/cruise/service/data/DataService.java | 24 +-- .../service/es/DataIndexingService.java | 129 ++++++++++++ .../service/idp/AESEncryptionManager.java | 2 +- .../enea/cruise/service/idp/EneaProvider.java | 2 +- .../service/idp/RSAEncryptionManager.java | 2 +- .../ParametricQueryManager.java | 19 +- .../FreeMarkerUtils.java | 2 +- .../src/main/resources/application.properties | 29 ++- .../it/enea/cruise/DataRepositoryTest.java | 2 +- .../src/test/resources/application.properties | 4 +- 46 files changed, 655 insertions(+), 420 deletions(-) delete mode 100644 gecoregistration/src/main/java/it/enea/cruise/config/CorsConfigurationConfig.java create mode 100644 gecoregistration/src/main/java/it/enea/cruise/config/ElasticSearchConfiguration.java create mode 100644 gecoregistration/src/main/java/it/enea/cruise/config/SecurityConfig.java create mode 100644 gecoregistration/src/main/java/it/enea/cruise/service/es/DataIndexingService.java rename gecoregistration/src/main/java/it/enea/cruise/{controller => utils}/FreeMarkerUtils.java (98%) diff --git a/gecoregistration/pom.xml b/gecoregistration/pom.xml index 2b8f7b0..3184299 100644 --- a/gecoregistration/pom.xml +++ b/gecoregistration/pom.xml @@ -5,19 +5,21 @@ org.springframework.boot spring-boot-starter-parent - 2.5.7 + 3.3.5 it.enea.cruise GECO - 0.0.1-SNAPSHOT + 0.0.2-SNAPSHOT war GECO GECO Project - 11 - 11 - 11 + 17 + UTF-8 + UTF-8 + 4.6.2.Final @@ -57,11 +59,11 @@ test - + org.springframework.boot spring-boot-starter-jersey @@ -92,16 +94,9 @@ org.springdoc - springdoc-openapi - 1.5.8 - pom + springdoc-openapi-starter-webmvc-ui + 2.3.0 - - org.projectlombok lombok @@ -137,11 +132,6 @@ scp-idp-sdk 1.0.6 - org.apache.httpcomponents.client5 httpclient5 @@ -164,7 +154,7 @@ org.glassfish.jersey.ext - jersey-spring5 + jersey-spring6 org.glassfish.jersey.core @@ -212,6 +202,26 @@ test + + + + + jakarta.json + jakarta.json-api + 2.1.3 + diff --git a/gecoregistration/src/main/java/it/enea/cruise/GecoRegistrationSpringApplication.java b/gecoregistration/src/main/java/it/enea/cruise/GecoRegistrationSpringApplication.java index c8902ab..319f447 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/GecoRegistrationSpringApplication.java +++ b/gecoregistration/src/main/java/it/enea/cruise/GecoRegistrationSpringApplication.java @@ -4,9 +4,6 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -@EnableSwagger2 @EnableCaching @SpringBootApplication public class GecoRegistrationSpringApplication { diff --git a/gecoregistration/src/main/java/it/enea/cruise/config/CorsConfigurationConfig.java b/gecoregistration/src/main/java/it/enea/cruise/config/CorsConfigurationConfig.java deleted file mode 100644 index 649653a..0000000 --- a/gecoregistration/src/main/java/it/enea/cruise/config/CorsConfigurationConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package it.enea.cruise.config; - -import java.util.Arrays; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.CorsConfigurationSource; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; - -@Configuration -public class CorsConfigurationConfig extends WebSecurityConfigurerAdapter{ - - @Bean - CorsConfigurationSource corsConfigurationSource() { - CorsConfiguration configuration = new CorsConfiguration(); - configuration.addAllowedOrigin("*"); - configuration.setAllowedMethods(Arrays.asList("POST, PUT, GET, OPTIONS, DELETE, PATCH")); - configuration.addAllowedHeader("*"); - configuration.addAllowedMethod("*"); - - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", configuration); - return source; - } - @Override - protected void configure(HttpSecurity http) throws Exception { - - http - .authorizeRequests().anyRequest().permitAll().and() - .csrf().disable() - .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and() - .httpBasic(); - http.cors(); - - } - -} diff --git a/gecoregistration/src/main/java/it/enea/cruise/config/CorsFilter.java b/gecoregistration/src/main/java/it/enea/cruise/config/CorsFilter.java index 693ecf0..02d9a74 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/config/CorsFilter.java +++ b/gecoregistration/src/main/java/it/enea/cruise/config/CorsFilter.java @@ -1,20 +1,18 @@ package it.enea.cruise.config; +/* import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import org.apache.http.HttpStatus; import org.springframework.web.filter.OncePerRequestFilter; public class CorsFilter extends OncePerRequestFilter { - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { + */ +/*@Override + protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS"); response.setHeader("Access-Control-Allow-Headers", "Content-Type, Origin,Authorization" ); @@ -25,5 +23,20 @@ public class CorsFilter extends OncePerRequestFilter { } else { chain.doFilter(request, response); } + }*//* + + + @Override + protected void doFilterInternal(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, jakarta.servlet.FilterChain filterChain) throws jakarta.servlet.ServletException, IOException { + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS"); + response.setHeader("Access-Control-Allow-Headers", "Content-Type, Origin,Authorization" ); + response.setHeader("Access-Control-Expose-Headers", "Content-Length, Origin,Authorization"); + if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { + System.out.println("Filtering OPTIONS request"); + response.setStatus(HttpStatus.SC_OK); + } else { + filterChain.doFilter(request, response); + } } -} \ No newline at end of file +}*/ diff --git a/gecoregistration/src/main/java/it/enea/cruise/config/ElasticSearchConfiguration.java b/gecoregistration/src/main/java/it/enea/cruise/config/ElasticSearchConfiguration.java new file mode 100644 index 0000000..47c6b12 --- /dev/null +++ b/gecoregistration/src/main/java/it/enea/cruise/config/ElasticSearchConfiguration.java @@ -0,0 +1,51 @@ +/* +package it.enea.cruise.config; + +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.json.jackson.JacksonJsonpMapper; +import co.elastic.clients.transport.ElasticsearchTransport; +import co.elastic.clients.transport.rest_client.RestClientTransport; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestClientBuilder; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties("es") +public class ElasticSearchConfiguration { + @Value("${es.username}") + protected String username; + + @Value("${es.password}") + protected String password; + + @Value("${es.host}") + protected String host; + + @Value("${es.port}") + protected Integer port; + + @Bean + public ElasticsearchClient getElasticSearchClient() { + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, + new UsernamePasswordCredentials(username, password)); + RestClientBuilder builder = RestClient.builder(new HttpHost(host, port)) + .setHttpClientConfigCallback(httpClientBuilder -> + httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); + // Create the low-level client + RestClient restClient = builder.build(); + // Create the transport with a Jackson mapper + ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper()); + // And create the API client + return new ElasticsearchClient(transport); + } +} +*/ diff --git a/gecoregistration/src/main/java/it/enea/cruise/config/SecurityConfig.java b/gecoregistration/src/main/java/it/enea/cruise/config/SecurityConfig.java new file mode 100644 index 0000000..ba7587c --- /dev/null +++ b/gecoregistration/src/main/java/it/enea/cruise/config/SecurityConfig.java @@ -0,0 +1,96 @@ +package it.enea.cruise.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.List; + +@Configuration +public class SecurityConfig { + @Bean + public SecurityFilterChain configure(HttpSecurity http) throws Exception { + return http + .cors(AbstractHttpConfigurer::disable) + .csrf(AbstractHttpConfigurer::disable) + .httpBasic(AbstractHttpConfigurer::disable) + .headers(headers -> headers.cacheControl(HeadersConfigurer.CacheControlConfig::disable)) + .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + .authorizeHttpRequests(requests -> requests.requestMatchers("/**").permitAll()) + .build(); + } + + @Bean + public WebMvcConfigurer corsConfigurer() { + return new WebMvcConfigurer() { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry + .addMapping("/**") + .allowedMethods("HEAD", "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"); + } + }; + } + + @Bean + CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + corsConfiguration.setAllowedOriginPatterns(List.of("*")); + corsConfiguration.setAllowedMethods(List.of("*")); + corsConfiguration.setAllowedHeaders(List.of("*")); + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", corsConfiguration); + return source; + } +} +/* + +import java.util.Arrays; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +@Configuration +public class CorsConfigurationConfig extends WebSecurityConfigurerAdapter { + + @Bean + CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); + configuration.addAllowedOrigin("*"); + configuration.setAllowedMethods(Arrays.asList("POST, PUT, GET, OPTIONS, DELETE, PATCH")); + configuration.addAllowedHeader("*"); + configuration.addAllowedMethod("*"); + + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } + @Override + protected void configure(HttpSecurity http) throws Exception { + + http + .authorizeRequests().anyRequest().permitAll().and() + .csrf().disable() + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) + .and() + .httpBasic(); + http.cors(); + + } + +} +*/ diff --git a/gecoregistration/src/main/java/it/enea/cruise/config/SpringFoxConfig.java b/gecoregistration/src/main/java/it/enea/cruise/config/SpringFoxConfig.java index 7c320ae..d6b2176 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/config/SpringFoxConfig.java +++ b/gecoregistration/src/main/java/it/enea/cruise/config/SpringFoxConfig.java @@ -1,3 +1,4 @@ +/* package it.enea.cruise.config; import java.util.ArrayList; @@ -56,4 +57,4 @@ public class SpringFoxConfig { "http://www.apache.org/licenses/LICENSE-2.0", new ArrayList<>()); } -} \ No newline at end of file +}*/ diff --git a/gecoregistration/src/main/java/it/enea/cruise/controller/DataController.java b/gecoregistration/src/main/java/it/enea/cruise/controller/DataController.java index 9e5bfef..0912847 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/controller/DataController.java +++ b/gecoregistration/src/main/java/it/enea/cruise/controller/DataController.java @@ -28,7 +28,10 @@ import java.util.SortedSet; import java.util.TreeSet; import javax.imageio.ImageIO; -import javax.ws.rs.POST; + +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.ws.rs.POST; import org.apache.commons.io.IOUtils; import org.apache.hc.core5.annotation.Obsolete; @@ -63,8 +66,6 @@ import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.databind.ObjectMapper; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiParam; import it.enea.cruise.data.ElectricMeterReading; import it.enea.cruise.data.ElectricMeterReading.Line; import it.enea.cruise.data.ElectricMeterReading.Period; @@ -89,7 +90,7 @@ import it.enea.cruise.repositories.user.UserRepository; import lombok.extern.log4j.Log4j2; @RestController -@Api(value = "DataController") +@Tag(name = "Dati") @EnableTransactionManagement @Transactional @Log4j2 @@ -354,16 +355,16 @@ public class DataController { @POST @PostMapping("/data/getConsumptionInAPeriod") public ResponseEntity getConsumptionInAPeriod( - @ApiParam(name = "token", type = "String", value = "The user's token", example = "", required = true) @RequestParam String token, - @ApiParam(name = "startDate", type = "String", value = "Initial date of a period", example = "2021-03-01 00:00:00", required = true) @RequestParam String startDate, - @ApiParam(name = "endDate", type = "String", value = "Final date of a period", example = "2021-03-06 23:59:59", required = true) @RequestParam String endDate) + @Parameter(name = "token", example = "", required = true) @RequestParam String token, + @Parameter(name = "startDate", example = "2021-03-01 00:00:00", required = true) @RequestParam String startDate, + @Parameter(name = "endDate", example = "2021-03-06 23:59:59", required = true) @RequestParam String endDate) throws NumberFormatException, ParseException { /* * Questa funzione dovrebbe restituire i dati compresi tra un'ora di inizio e * una di fine. Se la data di fine (non e' determinata, prendo i dati entro una * settimana a partire da oggi). */ - Long userid = new Long(137); // to be modified when data from token will be available; + Long userid = 137L; // to be modified when data from token will be available; Integer communityid = 4; // to be modified Date start = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(startDate); Date end = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(endDate); @@ -429,19 +430,19 @@ public class DataController { LocalTime rt = LocalTime.of((key.getHours()), key.getMinutes()); if (rt.isBefore(LocalTime.of(7, 0))) { - dataset.addValue(new Long(values[8]), "low", localDate); + dataset.addValue(Long.valueOf(values[8]), "low", localDate); colors[i] = Color.green; } else if (rt.isBefore(LocalTime.of(8, 0))) { - dataset.addValue(new Long(values[8]), "middle", localDate); + dataset.addValue(Long.valueOf(values[8]), "middle", localDate); colors[i] = Color.yellow; } else if (rt.isBefore(LocalTime.of(19, 0))) { - dataset.addValue(new Long(values[8]), "high", localDate); + dataset.addValue(Long.valueOf(values[8]), "high", localDate); colors[i] = Color.red; } else if (rt.isBefore(LocalTime.of(23, 00))) { - dataset.addValue(new Long(values[8]), "middle", localDate); + dataset.addValue(Long.valueOf(values[8]), "middle", localDate); colors[i] = Color.yellow; } else if (rt.isBefore(LocalTime.of(23, 59))) { - dataset.addValue(new Long(values[8]), "low", localDate); + dataset.addValue(Long.valueOf(values[8]), "low", localDate); colors[i] = Color.green; } i++; diff --git a/gecoregistration/src/main/java/it/enea/cruise/controller/ExceptionController.java b/gecoregistration/src/main/java/it/enea/cruise/controller/ExceptionController.java index 15cd2cc..cdcb04c 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/controller/ExceptionController.java +++ b/gecoregistration/src/main/java/it/enea/cruise/controller/ExceptionController.java @@ -5,7 +5,7 @@ import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.context.request.WebRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; @ControllerAdvice public class ExceptionController { diff --git a/gecoregistration/src/main/java/it/enea/cruise/controller/MailController.java b/gecoregistration/src/main/java/it/enea/cruise/controller/MailController.java index 328d430..523549b 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/controller/MailController.java +++ b/gecoregistration/src/main/java/it/enea/cruise/controller/MailController.java @@ -4,9 +4,11 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import javax.mail.MessagingException; -import javax.mail.internet.MimeMessage; -import javax.ws.rs.POST; +import io.swagger.v3.oas.annotations.tags.Tag; +import it.enea.cruise.utils.FreeMarkerUtils; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; +import jakarta.ws.rs.POST; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -18,7 +20,6 @@ import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RestController; import freemarker.template.TemplateException; -import io.swagger.annotations.Api; import it.enea.cruise.dto.LocalUserDTO; import it.enea.cruise.model.user.User; import it.enea.cruise.service.idp.IdpProvider; @@ -30,7 +31,7 @@ import lombok.Setter; import lombok.extern.log4j.Log4j2; @RestController -@Api(value = "UserController") +@Tag(name = "Metodi utente") @Log4j2 @RequiredArgsConstructor @Getter @@ -43,14 +44,8 @@ public class MailController { @Autowired IdpProvider idpClientManager; - //@Autowired - //private FreeMarkerConfigurer freemarkerConfigurer; - @NonNull UserRepository userInterface; - - //@NonNull - //IEncryptionManager encryptionManager; @Value("${activationLink}") private String activationLink; @@ -79,8 +74,7 @@ public class MailController { @PostMapping("/user/sendEmptyMailMassage") public void sendEmptyMessage( @RequestHeader(name = "Authorization", required=true) String token, - String destination) - throws IOException, TemplateException, MessagingException { + String destination) { if (idpClientManager.isValid(token)) { Map templateModel1 = new HashMap(); diff --git a/gecoregistration/src/main/java/it/enea/cruise/controller/QueryController.java b/gecoregistration/src/main/java/it/enea/cruise/controller/QueryController.java index 3fe4511..a86fc8b 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/controller/QueryController.java +++ b/gecoregistration/src/main/java/it/enea/cruise/controller/QueryController.java @@ -3,7 +3,8 @@ package it.enea.cruise.controller; import java.util.List; import java.util.ArrayList; -import javax.ws.rs.POST; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.ws.rs.POST; import it.enea.cruise.service.idp.IdpProvider; import org.springframework.beans.factory.annotation.Autowired; @@ -17,7 +18,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RestController; -import io.swagger.annotations.Api; import it.enea.cruise.dto.ParametricQueryDTO; import it.enea.cruise.dto.QueryParameterDTO; import it.enea.cruise.model.user.ParametricQuery; @@ -30,7 +30,7 @@ import it.enea.cruise.model.user.LocalQueryParameter; import lombok.extern.log4j.Log4j2; @RestController -@Api(value = "QueryController") +@Tag(name = "Metodi delle query") @EnableTransactionManagement /*@Transactional("dataTransactionManagerIDP")*/ @Log4j2 diff --git a/gecoregistration/src/main/java/it/enea/cruise/controller/StructureController.java b/gecoregistration/src/main/java/it/enea/cruise/controller/StructureController.java index 85e08e9..44990de 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/controller/StructureController.java +++ b/gecoregistration/src/main/java/it/enea/cruise/controller/StructureController.java @@ -8,12 +8,12 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.persistence.Entity; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Table; -import javax.ws.rs.GET; -import javax.ws.rs.POST; +import jakarta.persistence.Entity; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Table; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; import org.reflections.Reflections; import static org.reflections.scanners.Scanners.*; @@ -317,7 +317,7 @@ public class StructureController { log.info(user.getUserid().toString()); if (setUserMethod != null) setUserMethod.invoke(entity, user); Method setUserIdMethod = entity.getClass().getMethod("setUserid", Integer.class); - Integer userID = new Integer(user.getUserid().intValue()); + Integer userID = user.getUserid().intValue(); if (setUserIdMethod != null) setUserIdMethod.invoke(entity, userID); } log.info(entity.toString()); diff --git a/gecoregistration/src/main/java/it/enea/cruise/controller/UserController.java b/gecoregistration/src/main/java/it/enea/cruise/controller/UserController.java index eadd131..df15ce9 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/controller/UserController.java +++ b/gecoregistration/src/main/java/it/enea/cruise/controller/UserController.java @@ -10,7 +10,12 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.mail.MessagingException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.mail.MessagingException; import ch.qos.logback.core.util.StringCollectionUtil; import it.enea.scp.idp.sdk.model.UserDto; @@ -33,11 +38,6 @@ import org.springframework.web.bind.annotation.RestController; import org.json.JSONObject; import freemarker.template.TemplateException; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponses; -import io.swagger.annotations.ApiResponse; import it.enea.cruise.dto.CommunityDTO; import it.enea.cruise.dto.LocalUserDTO; import it.enea.cruise.model.user.Community; @@ -75,7 +75,7 @@ import lombok.extern.log4j.Log4j2; */ @RestController -@Api(value = "UserController") +@Tag(name = "Metodi utente", description = "GECO - Metodi per la gestione dell'utente") @Transactional @Log4j2 public class UserController { @@ -281,10 +281,10 @@ public class UserController { } */ - @ApiOperation(value = "Return a list of users from their email", response = User.class, tags = "") + @Operation(description = "Return a list of users from their email") @GetMapping("/userFromEmail") public ResponseEntity getUserDTOFromEmail( - @ApiParam(name = "email", type = "String", value = "Subject string", example = "", required = true) @RequestParam("email") String email) { + @Parameter(name = "email", example = "", required = true) @RequestParam("email") String email) { UserDto user = idpClientManager.getUserByEmail(email); return new ResponseEntity(user, @@ -303,10 +303,10 @@ public class UserController { * @return: The user if found * @return: NotFound if the user does not exist on DB */ - @ApiOperation(value = "Return a list of users from their subject code", response = User.class, tags = "") + @Operation(description = "Return a list of users from their subject code", tags = "") @GetMapping("/userFromSubject") public ResponseEntity getUserDTOFromSubject( - @ApiParam(name = "subject", type = "String", value = "Subject string", example = "", required = true) @RequestParam("subject") String subject) { + @Parameter(name = "subject", example = "", required = true) @RequestParam("subject") String subject) { User user; LocalUserDTO lUserDTO = new LocalUserDTO(); try { @@ -359,7 +359,7 @@ public class UserController { @PostMapping("/user/register") public ResponseEntity registerFromForm( - @ApiParam(name = "user", type = "User", value = "User representation from theinput form", example = "", required = true) + @Parameter(name = "user", example = "", required = true) @RequestBody LocalUserDTO user) { /* * Controllo che ci sia almeno la mail. @@ -417,7 +417,7 @@ public class UserController { uc1.setSubscriptiondate(new Date(System.currentTimeMillis())); uc1.setActive(true); tmpUser.setSingleUsercommunity(uc1); - Role tmpRole = roleInterface.getById(new Long(2)); + Role tmpRole = roleInterface.getById(2L); UserRole ur = new UserRole(); ur.setCommunity(c); ur.setUser(tmpUser); @@ -460,10 +460,10 @@ public class UserController { * @return: The number of participants, if the user is and admin * @return: A forbidden message otherwise */ - @ApiOperation(value = "Get the number of users in a community from the administrator's token", response = User.class, tags = "") + @Operation(description = "Get the number of users in a community from the administrator's token", tags = "") @PostMapping("/getNumberOfParticipants") ResponseEntity getNumberOfParticipants( - @ApiParam(name = "token", type = "String", value = "The administrator's token", example = "", required = true) @RequestParam String token) { + @Parameter(name = "token", example = "", required = true) @RequestParam String token) { User u = new User(); @@ -495,11 +495,11 @@ public class UserController { * @return: The user, if the if the token belongs to an admin * @return: A forbidden message otherwise */ - @ApiOperation(value = "Get a user in a community from the wallet(s)", response = User.class, tags = "") + @Operation(description = "Get a user in a community from the wallet(s)", tags = "") @PostMapping("/getUserFromWallet") ResponseEntity getUserFromWallet( @RequestBody List wallets, - @ApiParam(name = "token", type = "String", value = "The administrator's token", example = "", required = true) @RequestParam String token) { + @Parameter(name = "token", description = "The administrator's token", example = "", required = true) @RequestParam String token) { LocalUserDTO lUserDTO = new LocalUserDTO(); User u = new User(); @@ -563,10 +563,10 @@ public class UserController { * @return: Forbidden if the token is not valid * @return: Forbidden if the user is not an administrator */ - @ApiOperation(value = "Get all users in a community from the administrator's token", response = User.class, tags = "") + @Operation(description = "Get all users in a community from the administrator's token", tags = "") @PostMapping("/getusercommunities") ResponseEntity> getUserCommunities( - @ApiParam(name = "token", type = "String", value = "The administrator's token", example = "", required = true) @RequestParam String token) { + @Parameter(name = "token", description = "The administrator's token", example = "", required = true) @RequestParam String token) { User u = new User(); @@ -613,23 +613,22 @@ public class UserController { } - @ApiOperation(value = "Generate subject", response = String.class, tags = "") + @Operation(description = "Generate subject", tags = "") @PostMapping("/generateSubject") @Deprecated ResponseEntity generateSubject( - @ApiParam(name = "mail", type = "String", value = "The user's email", example = "", required = false) + @Parameter(name = "mail", description = "The user's email", example = "String") @RequestBody String email) { //String subject = encryptionManager.encrypt(email); - return new ResponseEntity("", HttpStatus.OK); } - @ApiOperation(value = "Generate email", response = String.class, tags = "") + @Operation(description = "Generate email", tags = "") @PostMapping("/returnEmail") @Deprecated ResponseEntity generateEmail( - @ApiParam(name = "Subject", type = "String", value = "The user's subject", example = "", required = false) + @Parameter(name = "Subject", description = "The user's subject", example = "String") @RequestBody String subject) { //String email = encryptionManager.decrypt(subject); @@ -647,11 +646,11 @@ public class UserController { * @return: Forbidden if the user is not an administrator */ - @ApiOperation(value = "Get all users if the requester is a platform admin", response = User.class, tags = "") + @Operation(description = "Get all users if the requester is a platform admin", tags = "") @PostMapping("/getusers") ResponseEntity> getUsers( - @ApiParam(name = "token", type = "String", value = "The administrator's token", example = "", required = false) @RequestParam(required = false) String token, - @ApiParam(name = "Authorization", type = "String", value = "The administrator's token", example = "", required = false) @RequestHeader(name = "Authorization", required = false) String tokenAuth) { + @Parameter(name = "token", example = "String", description = "The administrator's token") @RequestParam(required = false) String token, + @Parameter(name = "Authorization", example = "String", description = "The administrator's token") @RequestHeader(name = "Authorization", required = false) String tokenAuth) { List users = new ArrayList(); List resultList = new ArrayList(); Boolean isValid = false; @@ -739,13 +738,13 @@ public class UserController { * @param: User: the user to be deleted * @return: True if cancellation is complete */ - @ApiOperation(value = "Delete the user.", response = Boolean.class, tags = "") + @Operation(description = "Delete the user.", tags = "") @DeleteMapping("/user/delete") - @ApiResponses(value = {@ApiResponse(code = 200, message = "Success"), - @ApiResponse(code = 403, message = "Token is null or not valid"), - @ApiResponse(code = 500, message = "User cannot delete from DBs"),}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "403", description = "Token is null or not valid"), + @ApiResponse(responseCode = "500", description = "User cannot delete from DBs"),}) public ResponseEntity deleteUser( - @ApiParam(name = "userToken", type = "String", value = "The user's IDP token or email", example = "", required = true) @RequestBody String userToken) { + @Parameter(name = "userToken", example = "String", description = "The user's IDP token or email", required = true) @RequestBody String userToken) { // log.info("Deleting user with token = {} ", userToken); if (userToken == null || userToken == "") { @@ -808,13 +807,13 @@ public class UserController { * if not. */ - @ApiOperation(value = "Login the user. Returns Http.OK and User object if username and password are valid, Http.Forbidden otherwise", response = User.class, tags = "") + @Operation(description = "Login the user. Returns Http.OK and User object if username and password are valid, Http.Forbidden otherwise", tags = "") @PostMapping("/user/login") - @ApiResponses(value = {@ApiResponse(code = 200, message = "Success"), - @ApiResponse(code = 403, message = "Username or password are invalid")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "403", description = "Username or password are invalid")}) ResponseEntity login( - @ApiParam(name = "username", type = "String", value = "The username", example = "", required = true) @RequestParam String username, - @ApiParam(name = "password", type = "String", value = "The password", example = "", required = true) @RequestParam String password) { + @Parameter(name = "username", example = "String", description = "The username", required = true) @RequestParam String username, + @Parameter(name = "password", example = "String", description = "The password", required = true) @RequestParam String password) { if (StringUtils.isBlank(username) || StringUtils.isBlank(username)) { log.info("Username or password are empty"); return new ResponseEntity<>(new LocalUserDTO(), HttpStatus.FORBIDDEN); @@ -858,12 +857,12 @@ public class UserController { * @param: User Token * @return: True if the user is correctly logged out, false otherwise */ - @ApiOperation(value = "Logout the user. Returns Http.OK and User object if username and password are valid, Http.Forbidden otherwise", response = Boolean.class, tags = "") + @Operation(description = "Logout the user. Returns Http.OK and User object if username and password are valid, Http.Forbidden otherwise", tags = "") @PostMapping("/user/logout") - @ApiResponses(value = {@ApiResponse(code = 200, message = "Success"), - @ApiResponse(code = 500, message = "Logout has failed for unknown causes")}) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "500", description = "Logout has failed for unknown causes")}) ResponseEntity logout( - @ApiParam(name = "token", type = "String", value = "The user's token", example = "", required = true) @RequestParam String token, + @Parameter(name = "token", example = "String", description = "The user's token", required = true) @RequestParam String token, @RequestHeader(name = "Authorization", required = false) String tokenAuth) { if (StringUtils.isBlank(token)) { if (StringUtils.isBlank(tokenAuth)) { @@ -889,14 +888,15 @@ public class UserController { * @param: User Token * @return: True if the user is the token is valid, false otherwise */ - @ApiOperation(value = "Check if the token is valid and return a boolean", response = Boolean.class, tags = "") + @Operation(description = "Check if the token is valid and return a boolean", tags = "") @PostMapping("/user/isTokenValid") - @ApiResponses(value = {@ApiResponse(code = 200, message = "Success"), - @ApiResponse(code = 403, message = "Token not valid"), - @ApiResponse(code = 500, message = "Token is null")}) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "403", description = "Token not valid"), + @ApiResponse(responseCode = "500", description = "Token is null")}) ResponseEntity checkToken( @RequestHeader(name = "Authorization", required = false) String token, - @ApiParam(name = "token", type = "String", value = "The user's token", example = "", required = false) + @Parameter(name = "token", example = "String",description = "The user's token") @RequestParam(name = "token", required = false) String token2) { token = StringUtils.isNotBlank(token) ? token : token2; if (!StringUtils.isNotBlank(token)) { @@ -919,10 +919,12 @@ public class UserController { * @return: A list of Roles */ - @ApiOperation(value = "Return the list of the roles active on the platform", response = Role.class, tags = "") + @Operation(description = "Return the list of the roles active on the platform", tags = "") @GetMapping("/role/listRoles") - @ApiResponses(value = {@ApiResponse(code = 200, message = "Success"), - @ApiResponse(code = 500, message = "Internal error")}) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "500", description = "Internal error") + }) ResponseEntity> getRoles() { List result = roleInterface.findAll(); if (result != null) { @@ -962,17 +964,19 @@ public class UserController { * @param: User Token * @return: the user's details if the token is valid, an error otherwise */ - @ApiOperation(value = "Check if the token is valid and return the user", response = Boolean.class, tags = "") - @ApiResponses(value = {@ApiResponse(code = 200, message = "Success"), - @ApiResponse(code = 403, message = "Token not valid or access forbidden"), - @ApiResponse(code = 500, message = "Token is null")}) + @Operation(description = "Check if the token is valid and return the user", tags = "") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "403", description = "Token not valid or access forbidden"), + @ApiResponse(responseCode = "500", description = "Token is null") + }) @PostMapping("/user/getUserFromToken") ResponseEntity getUserFromToken( - @ApiParam(name = "token", type = "String", value = "The user's ID-Provider token", example = "", required = true) + @Parameter(name = "token", example = "String", description = "The user's ID-Provider token", required = true) @RequestParam String token ) { - if (token == null || token == "") { + if (token == null || token.isEmpty()) { log.info("GetUserFromToken: Token is empty"); return new ResponseEntity<>(new LocalUserDTO(), HttpStatus.BAD_REQUEST); } @@ -1021,13 +1025,15 @@ public class UserController { * @param: User Token * @return: the user's details if the token is valid, an error otherwise */ - @ApiOperation(value = "Check if the token is valid and return the user's id", response = Boolean.class, tags = "") - @ApiResponses(value = {@ApiResponse(code = 200, message = "Success"), - @ApiResponse(code = 403, message = "Token not valid or access forbidden"), - @ApiResponse(code = 500, message = "Token is null")}) + @Operation(description = "Check if the token is valid and return the user's id", tags = "") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "403", description = "Token not valid or access forbidden"), + @ApiResponse(responseCode = "500", description = "Token is null") + }) @PostMapping("/user/getUserIdFromToken") ResponseEntity getUserFromIdToken( - @ApiParam(name = "Authorization", type = "String", value = "The user's ID-Provider token", example = "", required = true) @RequestHeader(name = "Authorization", required = true) String token) { + @Parameter(name = "Authorization", example = "String", description = "The user's ID-Provider token", required = true) @RequestHeader(name = "Authorization", required = true) String token) { User result = new User(); if (token == null || token == "") { @@ -1059,7 +1065,7 @@ public class UserController { */ @PostMapping("/user/updatepassword") public ResponseEntity updatePassword( - @ApiParam(name = "Password", type = "Password", value = "User's new pasword", example = "", required = true) + @Parameter(name = "Password", example = "Password", description = "User's new pasword", required = true) @RequestBody LocalUserDTO userDTO, @RequestHeader(name = "Authorization", required = false) String token) { @@ -1109,7 +1115,7 @@ public class UserController { uc1.setSubscriptiondate(new Date(System.currentTimeMillis())); uc1.setActive(true); tmpUser.setSingleUsercommunity(uc1); - Role tmpRole = roleInterface.getById(new Long(2)); + Role tmpRole = roleInterface.getById(2L); UserRole ur = new UserRole(); ur.setCommunity(c); ur.setUser(tmpUser); @@ -1137,13 +1143,15 @@ public class UserController { * @param: User Token * @return: the user's details if the token is valid, an error otherwise */ - @ApiOperation(value = "List the devices associated to a user", response = Boolean.class, tags = "") - @ApiResponses(value = {@ApiResponse(code = 200, message = "Success"), - @ApiResponse(code = 403, message = "Token not valid or access forbidden"), - @ApiResponse(code = 500, message = "Token is null")}) + @Operation(description = "List the devices associated to a user", tags = "") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "403", description = "Token not valid or access forbidden"), + @ApiResponse(responseCode = "500", description = "Token is null") + }) @PostMapping("/user/getDevices") ResponseEntity getDevices( - @ApiParam(name = "token", type = "String", value = "The user's ID-Provider token", example = "", required = true) @RequestParam String token) { + @Parameter(name = "token", example = "String", description = "The user's ID-Provider token", required = true) @RequestParam String token) { List result = new ArrayList(); @@ -1215,50 +1223,6 @@ public class UserController { return persistNewUser(u, c, r); } -// -// private void deleteUserBySubject(String subject) { -// User newUser; -// try { -// newUser = userInterface.findById(new Long(159)).get(); -// } catch (Exception e) { -// newUser = null; -// } -// -// UserRole ur = newUser.getUserroles().get(0); -// userRoleInterface.delete(ur); -// userRoleInterface.flush(); -// -// if (newUser != null) { -// userInterface.delete(newUser); -// userInterface.flush(); -// } -// -// } -// -// private User getAndUpdateUserFromSubject(String token) { -// String subject = JWTManager.getSubject(token); -// User u = userInterface.findBySubject(subject); -// if (u == null) { -// // l'utente non e' registrato... -// u = JWTManager.jwt2User(token); -// Community community = communityInterface.findByCommunityid(u.getTmpCommunity()); -// for (String localRole : u.getKeycloakRoles()) { -// Role dbRole = roleInterface.findByRolename(localRole); -// if (dbRole.getId() > 0) { -// u.addRole(dbRole); -// } -// } -// UserCommunity uc1 = new UserCommunity(); -// uc1.setCommunity(community); -// uc1.setUser(u); -// uc1.setWallet(u.getTmpWallet()); -// u.setSingleUsercommunity(uc1); -// userInterface.save(u); -// } -// -// return u; -// -// } public User getUserFromSubject(String subject) { User user = new User(); diff --git a/gecoregistration/src/main/java/it/enea/cruise/controller/idpController.java b/gecoregistration/src/main/java/it/enea/cruise/controller/idpController.java index fdf9ebe..203a1b4 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/controller/idpController.java +++ b/gecoregistration/src/main/java/it/enea/cruise/controller/idpController.java @@ -2,6 +2,8 @@ package it.enea.cruise.controller; import java.util.List; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import it.enea.cruise.service.idp.IdpProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -10,13 +12,11 @@ import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.bind.annotation.GetMapping; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import it.enea.scp.idp.sdk.model.UserDto; import it.enea.cruise.service.idp.IEncryptionManager; @Controller -@Api(value = "idpUserController") +@Tag(name = "Metodi IDP") @EnableTransactionManagement public class idpController { @@ -26,7 +26,7 @@ public class idpController { @Autowired IdpProvider idpClientManager; - @ApiOperation(value = "Return a list of users", response = UserDto.class, tags = "") + @Operation(description = "Return a list of users", tags = "") @GetMapping("/idp/usersFromIdp") public ResponseEntity> getUserFromIdp(){ List userDto = idpClientManager.userList(); @@ -36,6 +36,4 @@ public class idpController { HttpStatus.FOUND); } - - } diff --git a/gecoregistration/src/main/java/it/enea/cruise/data/InputParameters.java b/gecoregistration/src/main/java/it/enea/cruise/data/InputParameters.java index 32eb84a..f935763 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/data/InputParameters.java +++ b/gecoregistration/src/main/java/it/enea/cruise/data/InputParameters.java @@ -14,87 +14,88 @@ import lombok.extern.log4j.Log4j2; @Log4j2 public class InputParameters { - @JsonInclude(JsonInclude.Include.NON_NULL) - private Integer communityid; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Integer queryid; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Integer flowid; - - @JsonIgnore - private String token; - - @JsonIgnore - private String language; - - @JsonIgnore - private Integer userid; - - @JsonIgnore - private HashMap parameters = new HashMap(); - - - @Override - public String toString() { - String toString = "{"; - for (String key : parameters.keySet()) { - toString = toString + "\n\t" + key + ":" + parameters.get(key) +","; - } - - return toString.substring(0, toString.length()-1) + "\n}"; - } - - - public void setToken(String token) { - this.parameters.put("token", token); - this.token = token; - } - - public void setCommunityid(Integer communityid) { - if (communityid != null) { - this.parameters.put("communityid", communityid.toString()); - this.communityid = communityid; - } - } - - public void setCommunityid(String communityid) { - if (communityid != null) { - this.parameters.put("communityid", communityid); - this.communityid = new Integer(communityid); - } - } - - public void setQueryid(Integer queryid) { - if (queryid != null) { - this.parameters.put("queryid", queryid.toString()); - this.queryid = queryid; - } - } - - public void setParameters(Map otherParameters) { - for (String key : otherParameters.keySet()) { - log.info(key, otherParameters.get(key)); - if(otherParameters.get(key) != null ) { - this.parameters.put(key.trim(), otherParameters.get(key).toString()); - } - } - - } - public void setFlowid(Integer flowid) { - if (flowid != null) { - this.parameters.put("flowid", flowid.toString()); - this.flowid = flowid; - } - } - - public void setLanguage(String language) { - this.parameters.put("language", language); - this.language = language; - } - - public void setUserid(Integer userid) { - this.parameters.put("userid", userid.toString()); - this.userid = userid; - } - + @JsonInclude(JsonInclude.Include.NON_NULL) + private Integer communityid; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Integer queryid; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Integer flowid; + + @JsonIgnore + private String token; + + @JsonIgnore + private String language; + + @JsonIgnore + private Integer userid; + + @JsonIgnore + private HashMap parameters = new HashMap(); + + + @Override + public String toString() { + String toString = "{"; + for (String key : parameters.keySet()) { + toString = toString + "\n\t" + key + ":" + parameters.get(key) + ","; + } + + return toString.substring(0, toString.length() - 1) + "\n}"; + } + + + public void setToken(String token) { + this.parameters.put("token", token); + this.token = token; + } + + public void setCommunityid(Integer communityid) { + if (communityid != null) { + this.parameters.put("communityid", communityid.toString()); + this.communityid = communityid; + } + } + + public void setCommunityid(String communityid) { + if (communityid != null) { + this.parameters.put("communityid", communityid); + this.communityid = Integer.valueOf(communityid); + } + } + + public void setQueryid(Integer queryid) { + if (queryid != null) { + this.parameters.put("queryid", queryid.toString()); + this.queryid = queryid; + } + } + + public void setParameters(Map otherParameters) { + for (String key : otherParameters.keySet()) { + log.info(key, otherParameters.get(key)); + if (otherParameters.get(key) != null) { + this.parameters.put(key.trim(), otherParameters.get(key).toString()); + } + } + + } + + public void setFlowid(Integer flowid) { + if (flowid != null) { + this.parameters.put("flowid", flowid.toString()); + this.flowid = flowid; + } + } + + public void setLanguage(String language) { + this.parameters.put("language", language); + this.language = language; + } + + public void setUserid(Integer userid) { + this.parameters.put("userid", userid.toString()); + this.userid = userid; + } + } diff --git a/gecoregistration/src/main/java/it/enea/cruise/dto/FlowDTO.java b/gecoregistration/src/main/java/it/enea/cruise/dto/FlowDTO.java index 2f03875..58df3fe 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/dto/FlowDTO.java +++ b/gecoregistration/src/main/java/it/enea/cruise/dto/FlowDTO.java @@ -1,6 +1,6 @@ package it.enea.cruise.dto; -import javax.persistence.Id; +import jakarta.persistence.Id; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/Cluster.java b/gecoregistration/src/main/java/it/enea/cruise/model/Cluster.java index 15fb3f1..33d0949 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/Cluster.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/Cluster.java @@ -2,9 +2,9 @@ package it.enea.cruise.model; import java.io.Serializable; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/ClusterGroup.java b/gecoregistration/src/main/java/it/enea/cruise/model/ClusterGroup.java index c0918ab..bcb95b1 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/ClusterGroup.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/ClusterGroup.java @@ -1,9 +1,9 @@ package it.enea.cruise.model; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/data/DataConsumption.java b/gecoregistration/src/main/java/it/enea/cruise/model/data/DataConsumption.java index bfa130e..754dee7 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/data/DataConsumption.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/data/DataConsumption.java @@ -2,9 +2,9 @@ package it.enea.cruise.model.data; import java.util.Date; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/structure/ForeignKey.java b/gecoregistration/src/main/java/it/enea/cruise/model/structure/ForeignKey.java index f55be36..273ffcd 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/structure/ForeignKey.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/structure/ForeignKey.java @@ -1,9 +1,9 @@ package it.enea.cruise.model.structure; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import org.springframework.data.annotation.Immutable; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/structure/VwTableMetadata.java b/gecoregistration/src/main/java/it/enea/cruise/model/structure/VwTableMetadata.java index 6973983..3261943 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/structure/VwTableMetadata.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/structure/VwTableMetadata.java @@ -1,7 +1,7 @@ package it.enea.cruise.model.structure; import java.io.Serializable; -import javax.persistence.*; +import jakarta.persistence.*; import org.springframework.data.annotation.Immutable; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/AdmittedQueryValues.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/AdmittedQueryValues.java index 1843969..5b95fbc 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/AdmittedQueryValues.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/AdmittedQueryValues.java @@ -3,7 +3,7 @@ package it.enea.cruise.model.user; import java.util.List; import java.util.Map; -import javax.persistence.*; +import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/Community.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/Community.java index 1842fda..7fea9c4 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/Community.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/Community.java @@ -9,7 +9,7 @@ import lombok.Setter; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.ArrayList; import java.util.List; import java.util.Objects; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/Device.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/Device.java index 0470e77..f6cac72 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/Device.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/Device.java @@ -7,7 +7,7 @@ import lombok.Setter; import lombok.ToString; import org.springframework.stereotype.Component; -import javax.persistence.*; +import jakarta.persistence.*; import java.io.Serializable; import java.util.Date; @@ -28,8 +28,7 @@ public class Device implements Serializable { private int supplierid; @ManyToOne - @JoinColumn(name="userid", nullable=false) - @MapsId("userid") + @JoinColumn(name="userid", nullable=false, insertable = false, updatable = false) private User user; private Integer userid; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/Flow.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/Flow.java index 850dfbe..c72d655 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/Flow.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/Flow.java @@ -3,7 +3,7 @@ package it.enea.cruise.model.user; import java.io.Serializable; import java.util.List; -import javax.persistence.*; +import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/FlowCommunity.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/FlowCommunity.java index 92e6440..633dd71 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/FlowCommunity.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/FlowCommunity.java @@ -2,7 +2,7 @@ package it.enea.cruise.model.user; import com.fasterxml.jackson.annotation.JsonIgnore; -import javax.persistence.*; +import jakarta.persistence.*; @Entity @@ -13,13 +13,13 @@ public class FlowCommunity { private FlowCommunityId id = new FlowCommunityId(); @ManyToOne - @JoinColumn(name = "flowid") - @MapsId("flowid") + @JoinColumn(name = "flowid", insertable = false, updatable = false) + /*@MapsId("flowid")*/ private Flow flow; @ManyToOne - @JoinColumn(name = "communityid") - @MapsId("communityid") + @JoinColumn(name = "communityid", insertable = false, updatable = false) + /*@MapsId("communityid")*/ private Community community; @Column(name = "accountconsumption") diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/FlowCommunityId.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/FlowCommunityId.java index 1229cbd..27ce661 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/FlowCommunityId.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/FlowCommunityId.java @@ -4,9 +4,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import javax.persistence.Column; -import javax.persistence.Embeddable; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.Transient; import java.io.Serializable; @Getter diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/LocalQueryParameter.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/LocalQueryParameter.java index 408dea0..a621e26 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/LocalQueryParameter.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/LocalQueryParameter.java @@ -3,7 +3,7 @@ package it.enea.cruise.model.user; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.List; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/OldUser.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/OldUser.java index 3a7da92..0bba446 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/OldUser.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/OldUser.java @@ -4,16 +4,16 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; import org.hibernate.annotations.FetchMode; import org.hibernate.annotations.Fetch; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/ParametricQuery.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/ParametricQuery.java index 094f39e..87c2c15 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/ParametricQuery.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/ParametricQuery.java @@ -8,7 +8,7 @@ import lombok.Setter; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/Role.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/Role.java index 17698fc..16c9938 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/Role.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/Role.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; import lombok.Setter; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.ArrayList; import java.util.List; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/User.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/User.java index dd055f7..46feaeb 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/User.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/User.java @@ -8,7 +8,7 @@ import lombok.Setter; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; -import javax.persistence.*; +import jakarta.persistence.*; import java.util.ArrayList; import java.util.List; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/UserCommunity.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/UserCommunity.java index 71e7979..024e18a 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/UserCommunity.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/UserCommunity.java @@ -3,14 +3,14 @@ package it.enea.cruise.model.user; import java.sql.Date; -import javax.persistence.Column; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.MapsId; -import javax.persistence.PreRemove; -import javax.persistence.Table; +import jakarta.persistence.Column; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.MapsId; +import jakarta.persistence.PreRemove; +import jakarta.persistence.Table; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -37,14 +37,14 @@ public class UserCommunity { private UserCommunityId id = new UserCommunityId(); @ManyToOne - @JoinColumn(name = "userid") - @MapsId("userid") + @JoinColumn(name = "userid", insertable = false, updatable = false) + /*@MapsId("userid")*/ //@JsonBackReference(value = "user-user_communities") private User user; @ManyToOne - @JoinColumn(name = "communityid") - @MapsId("communityid") + @JoinColumn(name = "communityid", insertable = false, updatable = false) + /*@MapsId("communityid")*/ //@JsonBackReference(value = "community-communities") //@JsonIgnoreProperties("userCommunities") private Community community; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/UserCommunityId.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/UserCommunityId.java index a1e6be7..f43625d 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/UserCommunityId.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/UserCommunityId.java @@ -2,9 +2,9 @@ package it.enea.cruise.model.user; import java.io.Serializable; -import javax.persistence.Column; -import javax.persistence.Embeddable; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.Transient; /** * @author gianluca diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/UserRole.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/UserRole.java index 96779cf..d099701 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/UserRole.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/UserRole.java @@ -2,14 +2,14 @@ package it.enea.cruise.model.user; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.MapsId; -import javax.persistence.PreRemove; -import javax.persistence.Table; -import javax.persistence.Transient; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.MapsId; +import jakarta.persistence.PreRemove; +import jakarta.persistence.Table; +import jakarta.persistence.Transient; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -35,19 +35,18 @@ public class UserRole { private UserRoleId id = new UserRoleId(); @ManyToOne - @JoinColumn(name="userid") - @MapsId("userid") + @JoinColumn(name="userid", insertable = false, updatable = false) //@JsonBackReference(value = "user-userRoles") private User user; @ManyToOne - @JoinColumn(name="roleid") - @MapsId("rolesid") + @JoinColumn(name="roleid", insertable = false, updatable = false) + /*@MapsId("rolesid")*/ private Role role; @ManyToOne - @JoinColumn(name="communityid") - @MapsId("communityid") + @JoinColumn(name="communityid", insertable = false, updatable = false) + /*@MapsId("communityid")*/ //@JsonBackReference(value = "community-userRoles") private Community community; diff --git a/gecoregistration/src/main/java/it/enea/cruise/model/user/UserRoleId.java b/gecoregistration/src/main/java/it/enea/cruise/model/user/UserRoleId.java index f8d0868..6fcf292 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/model/user/UserRoleId.java +++ b/gecoregistration/src/main/java/it/enea/cruise/model/user/UserRoleId.java @@ -3,9 +3,9 @@ package it.enea.cruise.model.user; import java.io.Serializable; import java.util.Objects; -import javax.persistence.Column; -import javax.persistence.Embeddable; -import javax.persistence.Transient; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.Transient; /** * @author gianluca diff --git a/gecoregistration/src/main/java/it/enea/cruise/service/data/DataService.java b/gecoregistration/src/main/java/it/enea/cruise/service/data/DataService.java index 26839ee..0f5a132 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/service/data/DataService.java +++ b/gecoregistration/src/main/java/it/enea/cruise/service/data/DataService.java @@ -1,25 +1,21 @@ package it.enea.cruise.service.data; -import java.util.Map; -import java.util.Optional; - import it.enea.cruise.exceptions.TokenNotValidException; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - import it.enea.cruise.model.user.ParametricQuery; import it.enea.cruise.model.user.User; -import it.enea.cruise.service.idp.IdpProvider; -import it.enea.cruise.repositories.user.LocalQueryParameterRepository; import it.enea.cruise.repositories.user.ParametricQueryRepository; +import it.enea.cruise.repositories.user.UserRepository; +import it.enea.cruise.service.idp.IdpProvider; import it.enea.cruise.service.parametricQuery.ParametricQueryManager; import it.enea.cruise.service.parametricQuery.ParametricQueryManager.ResultWithMetadata; -import it.enea.cruise.repositories.user.UserRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; -import javax.transaction.Transactional; +import java.util.Map; +import java.util.Optional; @Service @@ -41,14 +37,14 @@ public class DataService implements IDataService { String token, String language) { - inputData.put("dataFromYear", startFromYears != null ? startFromYears.toString() : "0"); - log.info("Input data:" + inputData); log.info("Token to check:" + token); + if (idpClientManager.isValid(token)) { User userdto = idpClientManager.getUserByToken(token); User user = userInterface.findBySubject(userdto.getUuid()); inputData.put("userid", user.getUserid().toString()); + inputData.put("dataFromYear", startFromYears != null ? startFromYears.toString() : "0"); Optional pq = pqueryInterface.findById(Long.valueOf(inputData.get("queryid"))); return pq.isPresent() ? pqm.executeQuery(pq.get(), inputData, language) : new ResultWithMetadata(); } diff --git a/gecoregistration/src/main/java/it/enea/cruise/service/es/DataIndexingService.java b/gecoregistration/src/main/java/it/enea/cruise/service/es/DataIndexingService.java new file mode 100644 index 0000000..7242cab --- /dev/null +++ b/gecoregistration/src/main/java/it/enea/cruise/service/es/DataIndexingService.java @@ -0,0 +1,129 @@ +/* +package it.enea.cruise.service.es; + +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.elasticsearch.core.BulkRequest; +import co.elastic.clients.elasticsearch.core.BulkResponse; +import co.elastic.clients.elasticsearch.core.IndexRequest; +import co.elastic.clients.elasticsearch.core.IndexResponse; +import co.elastic.clients.elasticsearch.core.bulk.BulkOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.ResultSetExtractor; +import org.springframework.stereotype.Service; + +import java.sql.ResultSetMetaData; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +@RequiredArgsConstructor +public class DataIndexingService { + private static final int BATCH_SIZE = 1000; + private final ElasticsearchClient esClient; + private final JdbcTemplate jdbcTemplate; + + + public void indexDatabaseTable(String documentName, String query, String ...keys) { + jdbcTemplate.setFetchSize(0); // Enable streaming mode + //BulkRequest bulkRequest = new BulkRequest.Builder().build(); + jdbcTemplate.query(query, (ResultSetExtractor) rs -> { + List bulkOperations = new ArrayList<>(); + int rowCount = 0; + + while (rs.next()) { + Map rowMap = new HashMap<>(); + ResultSetMetaData metaData = rs.getMetaData(); + int columnCount = metaData.getColumnCount(); + + for (int i = 1; i <= columnCount; i++) { + rowMap.put(metaData.getColumnName(i), rs.getObject(i)); + } + + bulkOperations.add(new BulkOperation.Builder() + .index(idx -> idx + .index(documentName) + .document(rowMap) + ).build() + ); + + rowCount++; + + // Execute bulk request when batch size is reached + if (rowCount % BATCH_SIZE == 0) { + executeBulkRequest(bulkOperations); + bulkOperations.clear(); // Reset the bulk operations list + } + } + + // Final bulk request for remaining records + if (!bulkOperations.isEmpty()) { + executeBulkRequest(bulkOperations); + } + + return null; // Required by the ResultSetExtractor interface + }); + +for (Map row : rows) { + StringBuilder keyBuilder = new StringBuilder(); + + IntStream.range(0, keys.length) + .forEach(index -> { + String key = keys[index]; + keyBuilder.append(key).append(index < keys.length - 1 ? "_" : ""); + }); + + indexRow(documentName, row, keyBuilder.toString()); + } + + } + + private void executeBulkRequest(List bulkOperations) { + try { + BulkRequest bulkRequest = new BulkRequest.Builder() + .operations(bulkOperations) + .build(); + + BulkResponse bulkResponse = esClient.bulk(bulkRequest); + + if (bulkResponse.errors()) { + // Handle failures here (e.g., log errors or retry) + bulkResponse.items().forEach(item -> { + if (item.error() != null) { + System.out.println("Bulk insert error: " + item.error().reason()); + } + }); + } else { + System.out.println("Batch insert succeeded for " + bulkOperations.size() + " records."); + } + } catch (Exception e) { + e.printStackTrace(); // Handle exception (log or retry) + } + } + + private void indexRow(String documentName, Map row, String documentId) { + try { + + // Construct the document as a Map + Map document = new HashMap<>(row); + + // Index the document in Elasticsearch + IndexRequest> request = IndexRequest.of(i -> i + .index(documentName) + .id(documentId) + .document(document) + ); + + IndexResponse response = esClient.index(request); + System.out.println("Indexed document ID: " + response.id()); + + } catch (Exception e) { + log.error("indexRow", e); + } + } +} +*/ diff --git a/gecoregistration/src/main/java/it/enea/cruise/service/idp/AESEncryptionManager.java b/gecoregistration/src/main/java/it/enea/cruise/service/idp/AESEncryptionManager.java index 8807c97..cd6c183 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/service/idp/AESEncryptionManager.java +++ b/gecoregistration/src/main/java/it/enea/cruise/service/idp/AESEncryptionManager.java @@ -6,7 +6,7 @@ import java.security.NoSuchAlgorithmException; import java.util.Base64; import java.util.Arrays; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; diff --git a/gecoregistration/src/main/java/it/enea/cruise/service/idp/EneaProvider.java b/gecoregistration/src/main/java/it/enea/cruise/service/idp/EneaProvider.java index d71789c..cc2d021 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/service/idp/EneaProvider.java +++ b/gecoregistration/src/main/java/it/enea/cruise/service/idp/EneaProvider.java @@ -3,7 +3,7 @@ package it.enea.cruise.service.idp; import java.util.ArrayList; import java.util.List; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; diff --git a/gecoregistration/src/main/java/it/enea/cruise/service/idp/RSAEncryptionManager.java b/gecoregistration/src/main/java/it/enea/cruise/service/idp/RSAEncryptionManager.java index b6e9c98..dff23b3 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/service/idp/RSAEncryptionManager.java +++ b/gecoregistration/src/main/java/it/enea/cruise/service/idp/RSAEncryptionManager.java @@ -5,7 +5,7 @@ import org.springframework.beans.factory.annotation.Value; import lombok.extern.log4j.Log4j2; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import javax.crypto.*; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; diff --git a/gecoregistration/src/main/java/it/enea/cruise/service/parametricQuery/ParametricQueryManager.java b/gecoregistration/src/main/java/it/enea/cruise/service/parametricQuery/ParametricQueryManager.java index 4944a84..edec73c 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/service/parametricQuery/ParametricQueryManager.java +++ b/gecoregistration/src/main/java/it/enea/cruise/service/parametricQuery/ParametricQueryManager.java @@ -44,22 +44,19 @@ public class ParametricQueryManager { public ResultWithMetadata executeQuery(ParametricQuery pq, Map queryParam, String language) { ResultWithMetadata resultWithMetadata = new ResultWithMetadata(); - List> result = null; - List> parameterMetadata = new ArrayList>(); + List> result; + List> parameterMetadata = new ArrayList<>(); MapSqlParameterSource sqlParam = new MapSqlParameterSource(); List paramsName = pq.getParameters(); - - String value = queryParam.get("userid"); - sqlParam.addValue("userid", value, Types.INTEGER); - + String sql = pq.getSql(); log.info(sql); - + + String value; for (LocalQueryParameter lqp : paramsName) { - value = queryParam.get(lqp.getName()); if (lqp.getType().toUpperCase() == "TIMESTAMP") { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS"); @@ -76,6 +73,10 @@ public class ParametricQueryManager { sqlParam.addValue(lqp.getName(), value, getSqlType(lqp.getType())); } } + + sqlParam.addValue("userid", queryParam.get("userid"), Types.INTEGER); + sqlParam.addValue("dataFromYear", queryParam.get("dataFromYear"), Types.INTEGER); + List list = null; List tmdata; Map> resultList = getResultList(pq); @@ -123,7 +124,7 @@ public class ParametricQueryManager { List lqp = pq.getParameters(); MapSqlParameterSource sqlParam = new MapSqlParameterSource(); - sqlParam.addValue("userid", "1", Types.INTEGER); + // sqlParam.addValue("userid", "1", Types.INTEGER); for (LocalQueryParameter lp : lqp) { sqlParam.addValue(lp.getName(), lp.getExample(), getSqlType(lp.getType())); } diff --git a/gecoregistration/src/main/java/it/enea/cruise/controller/FreeMarkerUtils.java b/gecoregistration/src/main/java/it/enea/cruise/utils/FreeMarkerUtils.java similarity index 98% rename from gecoregistration/src/main/java/it/enea/cruise/controller/FreeMarkerUtils.java rename to gecoregistration/src/main/java/it/enea/cruise/utils/FreeMarkerUtils.java index 23d3c88..dfdadf1 100644 --- a/gecoregistration/src/main/java/it/enea/cruise/controller/FreeMarkerUtils.java +++ b/gecoregistration/src/main/java/it/enea/cruise/utils/FreeMarkerUtils.java @@ -1,4 +1,4 @@ -package it.enea.cruise.controller; +package it.enea.cruise.utils; import freemarker.template.Configuration; import freemarker.template.Template; diff --git a/gecoregistration/src/main/resources/application.properties b/gecoregistration/src/main/resources/application.properties index 6193d8d..64425b2 100644 --- a/gecoregistration/src/main/resources/application.properties +++ b/gecoregistration/src/main/resources/application.properties @@ -25,7 +25,28 @@ spring.datasource.driver-class-name=org.postgresql.Driver spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect spring.jpa.hibernate.ddl-auto=none spring.jpa.show-sql=true -spring.jpa.properties.hibernate.format_sql=true + +# IDP DB +#spring.data-datasource-idp.hikari.url=jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:selfuser}?currentSchema=public +#spring.data-datasource-idp.hikari.maximumPoolSize=5 +# +#spring.data-datasource-idp.jdbcUrl=jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:selfuser}?currentSchema=public +#spring.data-datasource-idp.username=${DB_USER} +#spring.data-datasource-idp.password=${DB_PASSWORD} +#spring.data-datasource-idp.driver-class-name=org.postgresql.Driver +#spring.data-datasource-idp.maximumPoolSize=2 +#spring.data-datasource-idp.minimumIdle=1 +#spring.data-datasource-idp.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +#spring.data-datasource-idp.hibernate.hbm2ddl=none +# +## User DB +#spring.user-datasource-idp.jdbcUrl=jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:selfuser}?currentSchema=public +##spring.user-datasource-idp.hikari.url=jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:selfuser}?currentSchema=public +#spring.user-datasource-idp.username=${DB_USER} +#spring.user-datasource-idp.password=${DB_PASSWORD} +#spring.user-datasource-idp.driver-class-name=org.postgresql.Driver +#spring.user-datasource-idp.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +#spring.user-datasource-idp.hibernate.hbm2ddl=none # Mail spring.mail.host= @@ -50,5 +71,9 @@ idp.keyManager.privateKeyContent = idp.keyManager.publicKeyContent = idp.keyManager.AESKey = +es.username=${ES_USR} +es.password=${ES_PSWD} +es.host=${ES_HOST} +es.port=${ES_PORT} # Data query -data.start_from_year=1 +data.start_from_year=3 diff --git a/gecoregistration/src/test/java/it/enea/cruise/DataRepositoryTest.java b/gecoregistration/src/test/java/it/enea/cruise/DataRepositoryTest.java index 8202a19..6e5b121 100644 --- a/gecoregistration/src/test/java/it/enea/cruise/DataRepositoryTest.java +++ b/gecoregistration/src/test/java/it/enea/cruise/DataRepositoryTest.java @@ -9,7 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import java.util.Optional; @RunWith(SpringRunner.class) diff --git a/gecoregistration/src/test/resources/application.properties b/gecoregistration/src/test/resources/application.properties index 20a3af4..3ee5455 100644 --- a/gecoregistration/src/test/resources/application.properties +++ b/gecoregistration/src/test/resources/application.properties @@ -104,4 +104,6 @@ idp.logout-callback.url = idp.profile-callback.url = idp.keyManager.privateKeyContent = idp.keyManager.publicKeyContent = -idp.keyManager.AESKey = \ No newline at end of file +idp.keyManager.AESKey = + +data.start_from_year=1 \ No newline at end of file -- GitLab