Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Actual param vehtoblockconfig #31

Merged
merged 6 commits into from
Jun 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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);
}
Loading