From 78e0c4e0bed05b78beb36aa135edcae480460647 Mon Sep 17 00:00:00 2001 From: Timur Shykhsefiyeu Date: Tue, 14 May 2024 15:02:21 +0200 Subject: [PATCH] revert to PR#9 --- .github/workflows/maven.yml | 24 +-- .../api/resources/TransitimeApi.java | 6 +- core/pom.xml | 6 + .../core/avl/TraccarAVLModule.java | 88 ++++++----- .../domain/structs/VehicleToBlockConfig.java | 12 +- .../service/VehiclesServiceImpl.java | 32 ++-- extensions/traccar/pom.xml | 143 ++++-------------- 7 files changed, 127 insertions(+), 184 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index b23fd1cd4..4c82b777e 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -20,22 +20,22 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - name: Checkout + - uses: actions/checkout@v3 + name: Checkout - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - cache: maven + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + cache: maven - - name: Build with Maven - run: mvn -B package --file pom.xml + - name: Build with Maven + run: mvn -B package --file pom.xml # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive -# - name: Update dependency graph -# uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6 + # - name: Update dependency graph + # uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6 container-image: if: github.repository_owner == 'goeuropa' && github.event_name == 'push' && (github.ref == 'refs/heads/main') diff --git a/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java b/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java index ce1ab4e26..3abff285e 100644 --- a/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java +++ b/app/src/main/java/org/transitclock/api/resources/TransitimeApi.java @@ -153,9 +153,11 @@ public Response getVehicles( public Response getVehiclesToBlock( @BeanParam StandardParameters stdParameters, @Parameter(description = "If set 'true', returns only the data with actual time windows.", required = false) - @QueryParam(value = "actual") boolean isActual, + @QueryParam(value = "actual") + boolean isActual, @Parameter(description = "If set, returns only the data for that block Id.", required = false) - @QueryParam(value = "blockId") String blockId ) + @QueryParam(value = "blockId") + String blockId) throws WebApplicationException { stdParameters.validate(); diff --git a/core/pom.xml b/core/pom.xml index e2b64fc9d..8b1813e86 100755 --- a/core/pom.xml +++ b/core/pom.xml @@ -212,6 +212,12 @@ traccar-client ${revision} + + org.apache.httpcomponents.client5 + httpclient5 + 5.2.3 + compile + diff --git a/core/src/main/java/org/transitclock/core/avl/TraccarAVLModule.java b/core/src/main/java/org/transitclock/core/avl/TraccarAVLModule.java index 177abe546..142271782 100644 --- a/core/src/main/java/org/transitclock/core/avl/TraccarAVLModule.java +++ b/core/src/main/java/org/transitclock/core/avl/TraccarAVLModule.java @@ -16,22 +16,31 @@ */ package org.transitclock.core.avl; -import io.swagger.client.ApiClient; -import io.swagger.client.ApiException; -import io.swagger.client.api.DefaultApi; -import io.swagger.client.model.Device; -import io.swagger.client.model.Position; -import io.swagger.client.model.User; - import lombok.NonNull; import lombok.extern.slf4j.Slf4j; +import org.apache.hc.client5.http.auth.AuthCache; +import org.apache.hc.client5.http.auth.AuthScope; +import org.apache.hc.client5.http.auth.UsernamePasswordCredentials; +import org.apache.hc.client5.http.impl.auth.BasicAuthCache; +import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider; +import org.apache.hc.client5.http.impl.auth.BasicScheme; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.core5.http.HttpHost; import org.transitclock.domain.structs.AvlReport; +import org.transitclock.extension.traccar.ApiClient; +import org.transitclock.extension.traccar.ApiException; +import org.transitclock.extension.traccar.api.DefaultApi; +import org.transitclock.extension.traccar.model.DeviceDto; +import org.transitclock.extension.traccar.model.PositionDto; +import org.transitclock.extension.traccar.model.UserDto; import java.io.InputStream; import java.math.BigDecimal; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Objects; import static org.transitclock.config.data.TraccarConfig.*; @@ -47,52 +56,49 @@ */ @Slf4j public class TraccarAVLModule extends PollUrlAvlModule { - public TraccarAVLModule(String agencyId) { - super(agencyId); + @NonNull + private final DefaultApi api; + @NonNull + private final UserDto user; + public TraccarAVLModule(String agencyId) throws URISyntaxException { + super(agencyId); useCompression = false; - } + var host = HttpHost.create(TRACCARBASEURL.getValue()); + var httpClientBuilder = HttpClientBuilder.create(); + + final AuthCache authCache = new BasicAuthCache(); + authCache.put(host, new BasicScheme()); - private DefaultApi initApiClient() throws RuntimeException { - DefaultApi api = new DefaultApi(); - ApiClient client = new ApiClient(); + var provider = new BasicCredentialsProvider(); + provider.setCredentials(new AuthScope(host), new UsernamePasswordCredentials(TRACCAREMAIL.getValue(), TRACCARPASSWORD.getValue().toCharArray())); + httpClientBuilder.setDefaultCredentialsProvider(provider); + + ApiClient client = new ApiClient(httpClientBuilder.build()); client.setBasePath(TRACCARBASEURL.getValue()); - client.setUsername(TRACCAREMAIL.getValue()); + client.setUsername(TRACCARPASSWORD.getValue()); client.setPassword(TRACCARPASSWORD.getValue()); - api.setApiClient(client); - return api; - } + this.api = new DefaultApi(client); - - private User initUser(DefaultApi api) throws RuntimeException { - User user; try { - user = api + this.user = this.api .sessionPost(TRACCAREMAIL.getValue(), TRACCARPASSWORD.getValue()); - logger.info("Traccar login succeeded."); - return user; } catch (ApiException e) { - logger.error(e.getMessage() + e.getCause()); + throw new RuntimeException("Traccar login denied", e); } - throw new RuntimeException("Traccar login deny"); } - @NonNull - private final DefaultApi API = initApiClient(); - @NonNull - private final User USER = initUser(API); - @Override protected void getAndProcessData() throws Exception { Collection avlReportsReadIn = new ArrayList<>(); - List devices = API.devicesGet(true, USER.getId(), null, null); + List devices = api.devicesGet(true, user.getId(), null, null); - List results = API.positionsGet(null, null, null, null); - for (Position result : results) { - Device device = findDeviceById(devices, result.getDeviceId()); + List results = api.positionsGet(null, null, null, null); + for (PositionDto result : results) { + DeviceDto device = findDeviceById(devices, result.getDeviceId()); AvlReport avlReport; @@ -100,15 +106,14 @@ protected void getAndProcessData() throws Exception { if (device != null && device.getUniqueId() != null && !device.getUniqueId().isEmpty()) { //Traccar return speed in kt avlReport = new AvlReport(device.getUniqueId(), device.getName(), - result.getDeviceTime().toDate().getTime(), result.getLatitude().doubleValue(), + result.getDeviceTime().toEpochSecond(), result.getLatitude().doubleValue(), result.getLongitude().doubleValue(), result.getSpeed().multiply(BigDecimal.valueOf(0.5144444)).floatValue(), result.getCourse().floatValue(), TRACCARSOURCE.toString()); } else { avlReport = new AvlReport(result.getDeviceId().toString(), - result.getDeviceTime().toDate().getTime(), result.getLatitude().doubleValue(), + result.getDeviceTime().toEpochSecond(), result.getLatitude().doubleValue(), result.getLongitude().doubleValue(), result.getSpeed().multiply(BigDecimal.valueOf(0.5144444)).floatValue(), result.getCourse().floatValue(), TRACCARSOURCE.toString()); } - if (avlReport != null) - avlReportsReadIn.add(avlReport); + avlReportsReadIn.add(avlReport); } forwardAvlReports(avlReportsReadIn); } @@ -117,10 +122,11 @@ protected void forwardAvlReports(Collection avlReportsReadIn) { processAvlReports(avlReportsReadIn); } - private Device findDeviceById(List devices, Integer id) { - for (Device device : devices) { - if (device.getId().equals(id)) + private DeviceDto findDeviceById(List devices, Integer id) { + for (DeviceDto device : devices) { + if (Objects.equals(device.getId(), id)) { return device; + } } return null; } diff --git a/core/src/main/java/org/transitclock/domain/structs/VehicleToBlockConfig.java b/core/src/main/java/org/transitclock/domain/structs/VehicleToBlockConfig.java index 3fa36508e..88e118e99 100644 --- a/core/src/main/java/org/transitclock/domain/structs/VehicleToBlockConfig.java +++ b/core/src/main/java/org/transitclock/domain/structs/VehicleToBlockConfig.java @@ -8,6 +8,9 @@ import org.hibernate.Transaction; import org.hibernate.annotations.DynamicUpdate; import org.transitclock.Core; +import org.transitclock.core.BlockAssignmentMethod; +import org.transitclock.core.VehicleState; +import org.transitclock.core.dataCache.VehicleStateManager; import java.io.Serializable; import java.util.Date; @@ -116,14 +119,21 @@ public static void updateVehicleToBlockConfig(VehicleToBlockConfig vehicleToBloc } public static void deleteVehicleToBlockConfig(long id, Session session) throws HibernateException { + String vehicleId = session + .createQuery("FROM VehicleToBlockConfig WHERE id = :id", VehicleToBlockConfig.class) + .setParameter("id", id).getSingleResult().getVehicleId(); + Transaction transaction = session.beginTransaction(); try { session .createMutationQuery("delete from VehicleToBlockConfig where id = :id") .setParameter("id", id) .executeUpdate(); - transaction.commit(); + VehicleState vehicleState = VehicleStateManager.getInstance() + .getVehicleState(vehicleId); + vehicleState.unsetBlock(BlockAssignmentMethod.ASSIGNMENT_TERMINATED); + vehicleState.setMatch(null); } catch (Throwable t) { transaction.rollback(); throw t; diff --git a/core/src/main/java/org/transitclock/service/VehiclesServiceImpl.java b/core/src/main/java/org/transitclock/service/VehiclesServiceImpl.java index f79fc88e8..a152a29cc 100644 --- a/core/src/main/java/org/transitclock/service/VehiclesServiceImpl.java +++ b/core/src/main/java/org/transitclock/service/VehiclesServiceImpl.java @@ -3,6 +3,7 @@ import com.querydsl.jpa.impl.JPAQuery; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.hibernate.Session; import org.transitclock.core.BlocksInfo; import org.transitclock.core.dataCache.VehicleDataCache; @@ -16,6 +17,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * Implements the VehiclesInterface interface on the server side such that a VehiclessClient can @@ -401,33 +403,33 @@ public List getActualVehicleToBlockConfigs() { @Override public List getVehicleToBlockConfigByBlockId(String blockId) { - List result = new ArrayList<>(); try (Session session = HibernateUtils.getSession()) { - if (blockId != null) { - for (VehicleToBlockConfig vehicleToBlockConfig : VehicleToBlockConfig.getVehicleToBlockConfigsByBlockId(session, blockId)) { - result.add(new IpcVehicleToBlockConfig(vehicleToBlockConfig)); - } - } else { - for (VehicleToBlockConfig vehicleToBlockConfig : VehicleToBlockConfig.getVehicleToBlockConfigs(session)) { - result.add(new IpcVehicleToBlockConfig(vehicleToBlockConfig)); - } + if (StringUtils.isEmpty(blockId)) { + return VehicleToBlockConfig.getVehicleToBlockConfigsByBlockId(session, blockId) + .stream() + .map(IpcVehicleToBlockConfig::new) + .collect(Collectors.toList()); } + return VehicleToBlockConfig.getVehicleToBlockConfigs(session) + .stream() + .map(IpcVehicleToBlockConfig::new) + .collect(Collectors.toList()); } catch (Exception ex) { logger.error("Something happened while fetching the data.", ex); } - return result; + return List.of(); } @Override public List getVehicleToBlockConfigByVehicleId(String vehicleId) { - List result = new ArrayList<>(); try (Session session = HibernateUtils.getSession()) { - for (var vehicleToBlockConfig : VehicleToBlockConfig.getVehicleToBlockConfigsByVehicleId(session, vehicleId)) { - result.add(new IpcVehicleToBlockConfig(vehicleToBlockConfig)); - } + return VehicleToBlockConfig.getVehicleToBlockConfigsByVehicleId(session, vehicleId) + .stream() + .map(IpcVehicleToBlockConfig::new) + .collect(Collectors.toList()); } catch (Exception ex) { logger.error("Something happened while fetching the data.", ex); } - return result; + return List.of(); } } diff --git a/extensions/traccar/pom.xml b/extensions/traccar/pom.xml index a4f26532d..84d9605e3 100644 --- a/extensions/traccar/pom.xml +++ b/extensions/traccar/pom.xml @@ -13,20 +13,12 @@ traccar-client ${revision} - - 1.6.6 - 4.1.1.Final - 2.12.7 - 1.0.0 - - - - io.swagger - swagger-codegen-maven-plugin - 2.4.29 + org.openapitools + openapi-generator-maven-plugin + 7.4.0 @@ -34,131 +26,56 @@ ${project.basedir}/src/main/resources/swagger.json - - java - - false - - - joda - - - resteasy + org.transitclock.extension.traccar.api + org.transitclock.extension.traccar + java + true + false + org.transitclock.extension.traccar.model + Dto + + apache-httpclient + true + java8 + false + - - - - maven-compiler-plugin - 3.11.0 - - 17 - 17 - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - io.swagger - - swagger-codegen-maven-plugin - - - [2.4.29,) - - - generate - - - - - - - - - - - - - io.swagger - swagger-annotations - ${swagger-annotations-version} + org.openapitools + jackson-databind-nullable + 0.2.6 - - - - org.jboss.resteasy - resteasy-client - ${resteasy-version} - - - - org.jboss.resteasy - resteasy-multipart-provider - ${resteasy-version} + com.fasterxml.jackson.core + jackson-annotations - - - org.jboss.resteasy - resteasy-jackson2-provider - ${resteasy-version} - - - com.fasterxml.jackson.jaxrs - jackson-jaxrs-base - - - com.fasterxml.jackson.core - jackson-core + jackson-jaxrs-json-provider - com.fasterxml.jackson.core - jackson-annotations + jakarta.annotation + jakarta.annotation-api + 2.1.1 com.fasterxml.jackson.core jackson-databind - - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider - - - com.fasterxml.jackson.datatype - jackson-datatype-joda + jackson-datatype-jsr310 - joda-time - joda-time - ${jodatime-version} + org.apache.httpcomponents.client5 + httpclient5 + 5.2.3 - - - - com.brsanthu - migbase64 - 2.2 - - - +