Skip to content

Commit

Permalink
Merge pull request #5 from goeuropa/vehicles-to-blocks-update
Browse files Browse the repository at this point in the history
  • Loading branch information
wkulesza authored Mar 29, 2024
2 parents 95182d9 + 8c1c827 commit 4e54005
Show file tree
Hide file tree
Showing 9 changed files with 101 additions and 79 deletions.
10 changes: 5 additions & 5 deletions app/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -125,11 +125,11 @@
</platforms>
</from>
<to>
<image>${env.CONTAINER_REPO}</image>
<auth>
<username>${env.CONTAINER_REGISTRY_USER}</username>
<password>${env.CONTAINER_REGISTRY_PASSWORD}</password>
</auth>
<image>timurshyk/test-tc</image>
<!-- <auth>-->
<!-- <username>${env.CONTAINER_REGISTRY_USER}</username>-->
<!-- <password>${env.CONTAINER_REGISTRY_PASSWORD}</password>-->
<!-- </auth>-->
</to>
<extraDirectories>
<permissions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ protected ApiVehicleToBlockConfig() {}
* Takes a Vehicle object for client/server communication and constructs a ApiVehicle object for
* the API. Sets UiMode to UiMode.NORMAL.
*
* @param vTBC
* @param vehicleToBlockConfig
*/
public ApiVehicleToBlockConfig(IpcVehicleToBlockConfig vTBC) {
super(vTBC);
public ApiVehicleToBlockConfig(IpcVehicleToBlockConfig vehicleToBlockConfig) {
super(vehicleToBlockConfig);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,18 @@ public abstract class ApiVehicleToBlockConfigAbstract {
protected ApiVehicleToBlockConfigAbstract() {}

/**
* Takes a Vehicle object for client/server communication and constructs a ApiVehicle object for
* Takes a VehicleToBlockConfig object for client/server communication and constructs a ApiVehicleToBlockConfig object for
* the API.
*
* @param vehicle
* @param uiType If should be labeled as "minor" in output for UI.
* @param vehicleToBlockConfig
*/
public ApiVehicleToBlockConfigAbstract(IpcVehicleToBlockConfig vTBC) {
id = vTBC.getId();
vehicleId = vTBC.getVehicleId();
tripId = vTBC.getTripId();
blockId = vTBC.getBlockId();
validFrom = vTBC.getValidFrom();
validTo = vTBC.getValidTo();
assignmentDate = vTBC.getAssignmentDate();
public ApiVehicleToBlockConfigAbstract(IpcVehicleToBlockConfig vehicleToBlockConfig) {
id = vehicleToBlockConfig.getId();
vehicleId = vehicleToBlockConfig.getVehicleId();
tripId = vehicleToBlockConfig.getTripId();
blockId = vehicleToBlockConfig.getBlockId();
validFrom = vehicleToBlockConfig.getValidFrom();
validTo = vehicleToBlockConfig.getValidTo();
assignmentDate = vehicleToBlockConfig.getAssignmentDate();
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
/* (C)2023 */
package org.transitclock.api.data;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import org.transitclock.service.dto.IpcVehicleToBlockConfig;

import java.util.ArrayList;
import java.util.List;

/**
* For when have list of VehicleDetails. By using this class can control the element name when data
* is output.
Expand All @@ -27,23 +26,16 @@ public class ApiVehicleToBlockConfigs {
* Need a no-arg constructor for Jersey. Otherwise get really obtuse "MessageBodyWriter not
* found for media type=application/json" exception.
*/
protected ApiVehicleToBlockConfigs() {}
protected ApiVehicleToBlockConfigs() {
}

/**
* For constructing a ApiVehiclesDetails object from a Collection of Vehicle objects.
* For constructing a ApiVehicleToBlockConfigs object from a Collection of VehicleToBlockConfig objects.
*
* @param vehicles
* @param agencyId
* @param uiTypesForVehicles Specifies how vehicles should be drawn in UI. Can be NORMAL,
* SECONDARY, or MINOR
* @param assigned
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
public ApiVehicleToBlockConfigs(Collection<IpcVehicleToBlockConfig> vehicles)
throws IllegalAccessException, InvocationTargetException {
public ApiVehicleToBlockConfigs(List<IpcVehicleToBlockConfig> vehicles) {
vehiclesData = new ArrayList<ApiVehicleToBlockConfig>();

for (IpcVehicleToBlockConfig vehicleToBlock : vehicles) {
vehiclesData.add(new ApiVehicleToBlockConfig(vehicleToBlock));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
import org.transitclock.service.dto.IpcTripPattern;
import org.transitclock.service.dto.IpcVehicle;
import org.transitclock.service.dto.IpcVehicleConfig;
import org.transitclock.service.dto.IpcVehicleToBlockConfig;
import org.transitclock.service.contract.ConfigInterface;
import org.transitclock.service.contract.PredictionsInterface;
import org.transitclock.service.contract.PredictionsInterface.RouteStop;
Expand Down Expand Up @@ -170,28 +169,36 @@ public Response getVehicles(

@Operation(
summary = "Returns data for vehicles assignment for specific block in current day",
description = "Returns data for vehicles assignment for specific block in current day")
description = "Returns data for vehicles assignment for specific block in current day",
tags = {"vehicle", "block"})
@Path("/command/vehiclesToBlock")
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getVehiclesToBlock(
@BeanParam StandardParameters stdParameters,
@Parameter(description = "Block id") @QueryParam(value = "blockId") String blockId)
@Parameter(description = "If set 'true', returns only the data with actual time windows.", required = false)
@QueryParam(value = "actual") boolean isActual,
@Parameter(description = "If set, returns only the data for that block Id.", required = false)
@QueryParam(value = "blockId") String blockId )
throws WebApplicationException {

stdParameters.validate();
Collection<IpcVehicleToBlockConfig> result = null;

try {
// Get Vehicle data from server
VehiclesInterface inter = stdParameters.getVehiclesInterface();

result = inter.getVehicleToBlockConfig(blockId);

ApiVehicleToBlockConfigs apiVTBC = new ApiVehicleToBlockConfigs(result);
if(isActual){
var actualConfigs = inter.getActualVehicleToBlockConfigs();
ApiVehicleToBlockConfigs vehiclesToBlocks = new ApiVehicleToBlockConfigs(actualConfigs);
// return actual ApiVehicleToBlockConfigs response
return stdParameters.createResponse(vehiclesToBlocks);
}
var configs = inter.getVehicleToBlockConfigByBlockId(blockId);

// return ApiVehicles response
return stdParameters.createResponse(apiVTBC);
ApiVehicleToBlockConfigs vehiclesToBlocks = new ApiVehicleToBlockConfigs(configs);
// return ApiVehicleToBlockConfigs response
return stdParameters.createResponse(vehiclesToBlocks);
} catch (Exception e) {
// If problem getting data then return a Bad Request
throw WebUtils.badRequestException(e);
Expand Down
6 changes: 3 additions & 3 deletions core/src/main/java/org/transitclock/core/AvlProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -1386,12 +1386,12 @@ public void processAvlReport(AvlReport avlReport) {
}
try (Session session = HibernateUtils.getSession()) {
String blockId = null;
for (VehicleToBlockConfig vTBC :
for (VehicleToBlockConfig vehicleToBlock :
VehicleToBlockConfig.getVehicleToBlockConfigsByVehicleId(session, avlReport.getVehicleId())) {
Date d = new Date();

if (d.after(vTBC.getValidFrom()) && d.before(vTBC.getValidTo())) {
blockId = vTBC.getBlockId();
if (d.after(vehicleToBlock.getValidFrom()) && d.before(vehicleToBlock.getValidTo())) {
blockId = vehicleToBlock.getBlockId();
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@
package org.transitclock.domain.structs;

import jakarta.persistence.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

import lombok.*;
import lombok.Data;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.annotations.DynamicUpdate;
import org.transitclock.Core;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
* For storing static configuration for vehicle in block.
*
Expand Down Expand Up @@ -64,7 +64,7 @@ public VehicleToBlockConfig(

/**
* @param vehicleId vehicle ID * @param blockId block ID * @param tripId trip ID * @param
* assignmentDate time * * @param validFrom time * * @param validTo time
* assignmentDate time * * @param validFrom time * * @param validTo time
*/
public static VehicleToBlockConfig create(
String vehicleId, String blockId, String tripId, Date assignmentDate, Date validFrom, Date validTo) {
Expand All @@ -78,7 +78,9 @@ public static VehicleToBlockConfig create(
return vehicleToBlockConfig;
}

/** Needed because Hibernate requires no-arg constructor */
/**
* Needed because Hibernate requires no-arg constructor
*/
@SuppressWarnings("unused")
protected VehicleToBlockConfig() {
vehicleId = null;
Expand Down Expand Up @@ -128,6 +130,12 @@ public static void deleteVehicleToBlockConfig(long id, Session session) throws H
}
}

public static List<VehicleToBlockConfig> getActualVehicleToBlockConfigs(Session session) throws HibernateException {
return session
.createQuery("FROM VehicleToBlockConfig WHERE validTo > now() ORDER BY assignmentDate DESC", VehicleToBlockConfig.class)
.list();
}

public static List<VehicleToBlockConfig> getVehicleToBlockConfigsByBlockId(Session session, String blockId) throws HibernateException {
return session
.createQuery("FROM VehicleToBlockConfig WHERE blockId = :blockId ORDER BY assignmentDate DESC", VehicleToBlockConfig.class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,9 @@
import org.transitclock.core.BlocksInfo;
import org.transitclock.core.dataCache.VehicleDataCache;
import org.transitclock.domain.hibernate.HibernateUtils;
import org.transitclock.domain.structs.Block;
import org.transitclock.domain.structs.QRoute;
import org.transitclock.domain.structs.Trip;
import org.transitclock.domain.structs.VehicleConfig;
import org.transitclock.domain.structs.VehicleToBlockConfig;
import org.transitclock.domain.structs.*;
import org.transitclock.service.contract.VehiclesInterface;
import org.transitclock.service.dto.IpcActiveBlock;
import org.transitclock.service.dto.IpcBlock;
import org.transitclock.service.dto.IpcVehicle;
import org.transitclock.service.dto.IpcVehicleComplete;
import org.transitclock.service.dto.IpcVehicleConfig;
import org.transitclock.service.dto.IpcVehicleGtfsRealtime;
import org.transitclock.service.dto.IpcVehicleToBlockConfig;
import org.transitclock.service.dto.*;

import java.io.Serializable;
import java.util.ArrayList;
Expand Down Expand Up @@ -396,29 +386,47 @@ public Collection<IpcVehicle> getVehiclesForBlocks() {
}

@Override
public Collection<IpcVehicleToBlockConfig> getVehicleToBlockConfig(String blockId) {
public List<IpcVehicleToBlockConfig> getActualVehicleToBlockConfigs() {
List<IpcVehicleToBlockConfig> result = new ArrayList<>();
try (Session session = HibernateUtils.getSession()){
for (VehicleToBlockConfig vTBC : VehicleToBlockConfig.getVehicleToBlockConfigsByBlockId(session, blockId)) {
result.add(new IpcVehicleToBlockConfig(vTBC));
try (Session session = HibernateUtils.getSession()) {
for (VehicleToBlockConfig vehicleToBlockConfig : VehicleToBlockConfig
.getActualVehicleToBlockConfigs(session)) {
result.add(new IpcVehicleToBlockConfig(vehicleToBlockConfig));
}
} catch (Exception ex) {
logger.error("Something happened while fetching the VehicleToBlockConfig.", ex);
logger.error("Something happened while fetching the data: ", ex);
}
return result;
}

@Override
public Collection<IpcVehicleToBlockConfig> getVehicleToBlockConfigByVehicleId(String vehicleId) {
public List<IpcVehicleToBlockConfig> getVehicleToBlockConfigByBlockId(String blockId) {
List<IpcVehicleToBlockConfig> result = new ArrayList<>();
Session session = HibernateUtils.getSession();
try {
for (var vTBC : VehicleToBlockConfig.getVehicleToBlockConfigsByVehicleId(session, vehicleId)) {
result.add(new IpcVehicleToBlockConfig(vTBC));
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));
}
}
} catch (Exception ex) {
logger.error("Something happened while fetching the data.", ex);
}
return result;
}

@Override
public List<IpcVehicleToBlockConfig> getVehicleToBlockConfigByVehicleId(String vehicleId) {
List<IpcVehicleToBlockConfig> result = new ArrayList<>();
try (Session session = HibernateUtils.getSession()) {
for (var vehicleToBlockConfig : VehicleToBlockConfig.getVehicleToBlockConfigsByVehicleId(session, vehicleId)) {
result.add(new IpcVehicleToBlockConfig(vehicleToBlockConfig));
}
session.close();
} catch (Exception ex) {
session.close();
logger.error("Something happened while fetching the data.", ex);
}
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.transitclock.service.dto.IpcVehicleToBlockConfig;

import java.util.Collection;
import java.util.List;

/**
* Defines the RMI interface used for obtaining vehicle information.
Expand Down Expand Up @@ -174,7 +175,14 @@ Collection<IpcActiveBlock> getActiveBlocks(Collection<String> routeIds, int allo
*/
int getNumActiveBlocks(Collection<String> routeIds, int allowableBeforeTimeSecs);

Collection<IpcVehicleToBlockConfig> getVehicleToBlockConfig(String blockId);
/**
* Gets from the server the List of VehicleToBlocksConfig that are currently active.
*
* @return Collection of VehicleToBlocksConfig that are active.
*/
List<IpcVehicleToBlockConfig> getActualVehicleToBlockConfigs();

List<IpcVehicleToBlockConfig> getVehicleToBlockConfigByBlockId(String blockId);

Collection<IpcVehicleToBlockConfig> getVehicleToBlockConfigByVehicleId(String vehicleId);
List<IpcVehicleToBlockConfig> getVehicleToBlockConfigByVehicleId(String vehicleId);
}

0 comments on commit 4e54005

Please sign in to comment.