Skip to content

Commit

Permalink
Actual param vehtoblockconfig (#31)
Browse files Browse the repository at this point in the history
  • Loading branch information
TsimurSh authored Jun 24, 2024
1 parent 65c969f commit 0ab584a
Show file tree
Hide file tree
Showing 8 changed files with 91 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,6 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

/**
* Contains the data for a single vehicle.
*
* <p>Note: @XmlType(propOrder=""...) is used to get the elements to be output in desired order
* instead of the default of alphabetical. This makes the resulting JSON/XML more readable.
*
* @author SkiBu Smith
*/
@Data
public class ApiVehicleToBlockConfig {

Expand All @@ -40,26 +32,14 @@ public class ApiVehicleToBlockConfig {
@JsonProperty
protected String blockId;

/**
* Need a no-arg constructor for Jersey. Otherwise get really obtuse "MessageBodyWriter not
* found for media type=application/json" exception.
*/
protected ApiVehicleToBlockConfig() {}

/**
* Takes a Vehicle object for client/server communication and constructs a ApiVehicle object for
* the API.
*
* @param vehicle
* @param uiType If should be labeled as "minor" in output for UI.
*/
public ApiVehicleToBlockConfig(IpcVehicleToBlockConfig vTBC) {
id = vTBC.getId();
vehicleId = vTBC.getVehicleId();
tripId = vTBC.getTripId();
blockId = vTBC.getBlockId();
validFrom = vTBC.getValidFrom();
validTo = vTBC.getValidTo();
assignmentDate = vTBC.getAssignmentDate();
public ApiVehicleToBlockConfig(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
Expand Up @@ -276,7 +276,10 @@ public ResponseEntity<ApiCommandAck> removeVehicleToBlock(
StandardParameters stdParameters,
long id) {
try {
commandsService.removeVehicleToBlock(id);
// Remove vehicle
var vehicleId = commandsService.removeVehicleToBlock(id);
// Reset vehicle
commandsService.setVehicleUnpredictable(vehicleId);
} catch (Exception e) {
// If problem getting data then return a Bad Request
throw WebUtils.badRequestException(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,16 +98,19 @@ ResponseEntity<ApiVehiclesResponse> getVehicles(
int numberPredictions);

@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")
summary = "Returns data for vehicles assignment for specific block id",
description = "Returns data for vehicles assignment for specific block id")
@GetMapping(
value = "/command/vehiclesToBlock",
produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}
)
ResponseEntity<ApiVehicleToBlockResponse> getVehiclesToBlock(
StandardParameters stdParameters,
@Parameter(description = "If set 'true', returns only the data with actual time windows.")
@RequestParam(value = "actual", required = false, defaultValue = "false")
boolean actual,
@Parameter(description = "Block id")
@RequestParam(value = "blockId")
@RequestParam(value = "blockId", required = false)
String blockId);

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,13 +116,19 @@ public ResponseEntity<ApiVehiclesResponse> getVehicles(
@Override
public ResponseEntity<ApiVehicleToBlockResponse> getVehiclesToBlock(
StandardParameters stdParameters,
boolean actual,
String blockId) {
// Get Vehicle data from server
var result = vehiclesService.getVehicleToBlockConfig(blockId);
ApiVehicleToBlockResponse res = new ApiVehicleToBlockResponse(result);

if (actual) {
var actualConfigs = vehiclesService.getActualVehicleToBlockConfigs();
ApiVehicleToBlockResponse response = new ApiVehicleToBlockResponse(actualConfigs);
// return actual ApiVehicles response
return ResponseEntity.ok(response);
}
var configs = vehiclesService.getVehicleToBlockConfigByBlockId(blockId);
ApiVehicleToBlockResponse response = new ApiVehicleToBlockResponse(configs);
// return ApiVehicles response
return ResponseEntity.ok(res);
return ResponseEntity.ok(response);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,21 +97,31 @@ public static void updateVehicleToBlockConfig(VehicleToBlockConfig vehicleToBloc
session.merge(vehicleToBlockConfig);
}

public static void deleteVehicleToBlockConfig(long id, Session session) throws HibernateException {
public static String 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")
session.createMutationQuery("delete from VehicleToBlockConfig where id = :id")
.setParameter("id", id)
.executeUpdate();

transaction.commit();
return vehicleId;
} catch (Throwable t) {
transaction.rollback();
throw t;
}
}

public static List<VehicleToBlockConfig> getActualVehicleToBlockConfigs(Session session) throws HibernateException {
return session
.createQuery("FROM VehicleToBlockConfig WHERE validTo > CAST( now() AS TIMESTAMP ) 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
@@ -1,7 +1,9 @@
/* (C)2023 */
package org.transitclock.service;

import com.google.common.base.CaseFormat;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -180,13 +182,12 @@ public String addVehicleToBlock(

@Override
public String removeVehicleToBlock(long id) {
Session session = HibernateUtils.getSession();
try {
VehicleToBlockConfig.deleteVehicleToBlockConfig(id, session);
session.close();
try (Session session = HibernateUtils.getSession()) {
return VehicleToBlockConfig.deleteVehicleToBlockConfig(id, session);
} catch (Exception ex) {
session.close();
logger.warn("Something went wrong when trying to delete a raw from {} table",
CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, VehicleToBlockConfig.class.getSimpleName()));
throw new HibernateException(ex.getMessage());
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import lombok.extern.slf4j.Slf4j;
import org.hibernate.Session;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import org.transitclock.core.avl.assigner.BlockInfoProvider;
import org.transitclock.core.dataCache.VehicleDataCache;
import org.transitclock.domain.hibernate.HibernateUtils;
Expand All @@ -25,6 +27,7 @@

import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;

@Slf4j
@Component
Expand Down Expand Up @@ -370,31 +373,49 @@ public Collection<IpcVehicle> getVehiclesForBlocks() {
}

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

@Override
public Collection<IpcVehicleToBlockConfig> getVehicleToBlockConfigByVehicleId(String vehicleId) {
List<IpcVehicleToBlockConfig> result = new ArrayList<>();
Session session = HibernateUtils.getSession();
try {
for (var vTBC : VehicleToBlockConfig.getVehicleToBlockConfigsByVehicleId(session, vehicleId)) {
result.add(new IpcVehicleToBlockConfig(vTBC));
}
session.close();

try (Session session = HibernateUtils.getSession()) {
return VehicleToBlockConfig.getVehicleToBlockConfigsByVehicleId(session, vehicleId)
.stream()
.map(IpcVehicleToBlockConfig::new)
.collect(Collectors.toList());
} catch (Exception ex) {
session.close();
logger.error("Something happened while fetching the data.", ex);
}
return result;
return List.of();
}

/**
Expand Down Expand Up @@ -434,5 +455,5 @@ public int compare(IpcActiveBlock b1, IpcActiveBlock b2) {
if (blockStartTime1 > blockStartTime2) return 1;
return 0;
}
};
}
}
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,9 @@ Collection<IpcActiveBlock> getActiveBlocks(Collection<String> routeIds, int allo
*/
int getNumActiveBlocks(Collection<String> routeIds, int allowableBeforeTimeSecs);

Collection<IpcVehicleToBlockConfig> getVehicleToBlockConfig(String blockId);
Collection<IpcVehicleToBlockConfig> getActualVehicleToBlockConfigs();

Collection<IpcVehicleToBlockConfig> getVehicleToBlockConfigByBlockId(String blockId);

Collection<IpcVehicleToBlockConfig> getVehicleToBlockConfigByVehicleId(String vehicleId);
}

0 comments on commit 0ab584a

Please sign in to comment.