Skip to content

Commit

Permalink
Merge pull request #1036 from OSGP/feature/FDP-622
Browse files Browse the repository at this point in the history
Feature/fdp 622
  • Loading branch information
LucianoFavoroso authored Jan 9, 2024
2 parents 1ac0a0b + 0ebca91 commit 15610ea
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 170 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.ChangeDeviceModelRequest;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.ChangeFirmwareRequest;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.ChangeManufacturerRequest;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.ChangeableFirmware;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.DeviceModel;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.FindAllDeviceModelsRequest;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.FindAllManufacturersRequest;
Expand Down Expand Up @@ -335,12 +336,11 @@ private void changeFirmware(final Map<String, String> requestParameters)
throws WebServiceSecurityException, GeneralSecurityException, IOException {
final ChangeFirmwareRequest request = new ChangeFirmwareRequest();
request.setId(PlatformCommonDefaults.FIRMWARE_ID);
final Firmware firmware = new Firmware();
final ChangeableFirmware firmware = new ChangeableFirmware();
firmware.setDescription(PlatformCommonDefaults.FIRMWARE_DESCRIPTION);
final DeviceModel deviceModel = new DeviceModel();
deviceModel.setModelCode(PlatformCommonDefaults.DEVICE_MODEL_MODEL_CODE);
deviceModel.setManufacturer(PlatformCommonDefaults.DEFAULT_MANUFACTURER_CODE);
firmware.getDeviceModels().add(deviceModel);
firmware.setPushToNewDevices(PlatformCommonDefaults.FIRMWARE_PUSH_TO_NEW_DEVICE);
request.setFirmware(firmware);
ScenarioContext.current()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import org.opensmartgridplatform.adapter.ws.schema.core.common.OsgpResultType;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.ChangeFirmwareRequest;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.ChangeFirmwareResponse;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.Firmware;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.ChangeableFirmware;
import org.opensmartgridplatform.cucumber.core.ScenarioContext;
import org.opensmartgridplatform.cucumber.platform.PlatformKeys;
import org.opensmartgridplatform.cucumber.platform.common.PlatformCommonKeys;
Expand Down Expand Up @@ -49,8 +49,7 @@ public void receivingAnChangeFirmwareRequest(final Map<String, String> requestPa

request.setId((int) firmwareFileId);

final Firmware firmware = this.createAndGetFirmware(requestParameters);
firmware.setId((int) firmwareFileId);
final ChangeableFirmware firmware = this.createAndGetChangeableFirmware(requestParameters);
request.setFirmware(firmware);

try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.util.Map.Entry;
import java.util.SortedSet;
import java.util.stream.Collectors;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.ChangeableFirmware;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.DeviceModel;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.Firmware;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.FirmwareModuleData;
Expand Down Expand Up @@ -116,6 +117,59 @@ protected Firmware createAndGetFirmware(final Map<String, String> requestParamet
return firmware;
}

protected ChangeableFirmware createAndGetChangeableFirmware(
final Map<String, String> requestParameters) {
final ChangeableFirmware firmware = new ChangeableFirmware();
firmware.setDescription(getString(requestParameters, PlatformKeys.FIRMWARE_DESCRIPTION, null));
firmware.setPushToNewDevices(
getBoolean(
requestParameters,
PlatformKeys.FIRMWARE_PUSH_TO_NEW_DEVICES,
PlatformDefaults.FIRMWARE_PUSH_TO_NEW_DEVICE));

firmware.setFirmwareModuleData(new FirmwareModuleData());
if (requestParameters.containsKey(PlatformKeys.FIRMWARE_MODULE_VERSION_COMM)) {
firmware
.getFirmwareModuleData()
.setModuleVersionComm(
getString(requestParameters, PlatformKeys.FIRMWARE_MODULE_VERSION_COMM, null));
}
if (requestParameters.containsKey(PlatformKeys.FIRMWARE_MODULE_VERSION_FUNC)) {
firmware
.getFirmwareModuleData()
.setModuleVersionFunc(
getString(requestParameters, PlatformKeys.FIRMWARE_MODULE_VERSION_FUNC, null));
}
if (requestParameters.containsKey(PlatformKeys.FIRMWARE_MODULE_VERSION_MA)) {
firmware
.getFirmwareModuleData()
.setModuleVersionMa(
getString(requestParameters, PlatformKeys.FIRMWARE_MODULE_VERSION_MA, null));
}
if (requestParameters.containsKey(PlatformKeys.FIRMWARE_MODULE_VERSION_MBUS)) {
firmware
.getFirmwareModuleData()
.setModuleVersionMbus(
getString(requestParameters, PlatformKeys.FIRMWARE_MODULE_VERSION_MBUS, null));
}
if (requestParameters.containsKey(PlatformKeys.FIRMWARE_MODULE_VERSION_SEC)) {
firmware
.getFirmwareModuleData()
.setModuleVersionSec(
getString(requestParameters, PlatformKeys.FIRMWARE_MODULE_VERSION_SEC, null));
}
if (requestParameters.containsKey(PlatformKeys.FIRMWARE_MODULE_VERSION_M_BUS_DRIVER_ACTIVE)) {
firmware
.getFirmwareModuleData()
.setModuleVersionMBusDriverActive(
getString(
requestParameters,
PlatformKeys.FIRMWARE_MODULE_VERSION_M_BUS_DRIVER_ACTIVE,
null));
}
return firmware;
}

protected void assertFirmwareFileExists(
final String identification, final Map<String, String> firmwareFileProperties) {
final Firmware expectedFirmware = this.createAndGetFirmware(firmwareFileProperties);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,46 +13,21 @@ Feature: FirmwareManagement change firmware
| DeviceIdentification | TEST1024000000001 |
And a firmware
| DeviceIdentification | TEST1024000000001 |
| FirmwareFilename | OldFirmware |
| FirmwareFilename | Filename |
| FirmwarePushToNewDevices | true |
| ManufacturerName | Test |
| ModelCode | TestModel |
| Description | |
When receiving an change firmware request
| FirmwareFilename | NewFirmware |
| FirmwarePushToNewDevices | false |
| ManufacturerName | Test |
| ModelCode | TestModel |
| FirmwareDescription | Firmware is changed! |
Then the change firmware response contains
| Result | OK |
And the entity firmware exists
| ModelCode | TestModel |
| FirmwareFilename | NewFirmware |
| FirmwareFilename | Filename |
| FirmwareDescription | Firmware is changed! |

Scenario Outline: Change firmware with an unknown or empty devicemodel
Given a device
| DeviceIdentification | TEST1024000000001 |
And a firmware
| DeviceIdentification | TEST1024000000001 |
| FirmwareFilename | Firmware |
| FirmwarePushToNewDevices | true |
| ManufacturerName | Test |
| ModelCode | TestModel |
| Description | |
When receiving an change firmware request
| ModelCode | unknown |
Then the change firmware response contains soap fault
| FaultCode | SOAP-ENV:Server |
| FaultString | UNKNOWN_DEVICEMODEL |
| InnerMessage | DeviceModel with id "unknown" could not be found. |

Examples:
| ModelCode |
| unknown |
| |

Scenario: Change the firmware for an unknown firmware
When receiving an change firmware request
| FirmwareFilename | Firmware |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.apache.commons.lang3.StringUtils;
import org.opensmartgridplatform.adapter.ws.core.infra.jms.CommonRequestMessage;
import org.opensmartgridplatform.adapter.ws.core.infra.jms.CommonRequestMessageSender;
import org.opensmartgridplatform.adapter.ws.schema.core.firmwaremanagement.ChangeableFirmware;
import org.opensmartgridplatform.adapter.ws.shared.db.domain.repositories.writable.WritableDeviceFirmwareFileRepository;
import org.opensmartgridplatform.adapter.ws.shared.db.domain.repositories.writable.WritableDeviceModelRepository;
import org.opensmartgridplatform.adapter.ws.shared.db.domain.repositories.writable.WritableDeviceRepository;
Expand Down Expand Up @@ -805,9 +806,7 @@ public void saveDeviceFirmwareFile(final DeviceFirmwareFile deviceFirmwareFile)
public void changeFirmware(
@Identification final String organisationIdentification,
final int id,
final FirmwareFileRequest firmwareFileRequest,
final String manufacturer,
final String modelCode,
final ChangeableFirmware firmwareFileRequest,
final FirmwareModuleData firmwareModuleData)
throws FunctionalException {

Expand All @@ -818,83 +817,23 @@ public void changeFirmware(
FirmwareFile changedFirmwareFile =
this.firmwareFileRepository
.findById((long) id)
.orElseThrow(
supplyFirmwareFileNotFoundException(id, firmwareFileRequest.getFileName()));

final Manufacturer databaseManufacturer =
this.manufacturerRepository.findByCodeIgnoreCase(manufacturer);
.orElseThrow(supplyFirmwareFileNotFoundException(id));

if (databaseManufacturer == null) {
LOGGER.info("Manufacturer {} doesn't exist.", manufacturer);
throw new FunctionalException(
FunctionalExceptionType.UNKNOWN_MANUFACTURER,
ComponentType.WS_CORE,
new UnknownEntityException(Manufacturer.class, manufacturer));
changedFirmwareFile.updateFirmwareModuleData(
firmwareModuleData.getVersionsByModule(this.firmwareModuleRepository, false));
if (!firmwareFileRequest.getDescription().isEmpty()) {
changedFirmwareFile.setDescription(firmwareFileRequest.getDescription());
}

final DeviceModel databaseDeviceModel =
this.deviceModelRepository.findByManufacturerAndModelCodeIgnoreCase(
databaseManufacturer, modelCode);

if (databaseDeviceModel == null) {
LOGGER.info(
"DeviceModel unknown for manufacturer {} and model code {}.", manufacturer, modelCode);
throw new FunctionalException(
FunctionalExceptionType.UNKNOWN_DEVICEMODEL,
ComponentType.WS_CORE,
new UnknownEntityException(DeviceModel.class, modelCode));
if (firmwareFileRequest.isPushToNewDevices() != null) {
changedFirmwareFile.setPushToNewDevices(firmwareFileRequest.isPushToNewDevices());
}

changedFirmwareFile.setDescription(firmwareFileRequest.getDescription());
/*
* A firmware file has been changed to be related to (possibly) multiple
* device models to be usable across different value streams for all
* kinds of devices.
*
* This code mimics the earlier behavior with a single device model
* linked to the firmware file, where the device model is changed.
*
* If multiple device models are related, it is not clear what to do,
* and which if the device models (if any) should be removed. In such
* case the device model will be added for now.
*
* 2021-06-02: In case of multiple DeviceModels all existing must be deleted
* and all new DeviceModels in the request must be added
*/
final Set<DeviceModel> existingDeviceModels = changedFirmwareFile.getDeviceModels();
if (existingDeviceModels.size() > 1) {
LOGGER.warn(
"Change Firmware (FirmwareFile id={}) with {} existing DeviceModels, adding {}",
changedFirmwareFile.getId(),
existingDeviceModels.size(),
databaseDeviceModel);
} else {
LOGGER.warn(
"Change Firmware (FirmwareFile id={}) with {} existing DeviceModel(s), replacing by {}",
changedFirmwareFile.getId(),
existingDeviceModels.size(),
databaseDeviceModel);
if (firmwareFileRequest.isActive() != null) {
changedFirmwareFile.setActive(firmwareFileRequest.isActive());
}
existingDeviceModels.clear();

changedFirmwareFile.addDeviceModel(databaseDeviceModel);
changedFirmwareFile.setFilename(firmwareFileRequest.getFileName());
changedFirmwareFile.updateFirmwareModuleData(
firmwareModuleData.getVersionsByModule(this.firmwareModuleRepository, false));
changedFirmwareFile.setPushToNewDevices(firmwareFileRequest.isPushToNewDevices());
changedFirmwareFile.setActive(firmwareFileRequest.isActive());

// Save the changed firmware entity
changedFirmwareFile = this.firmwareFileRepository.save(changedFirmwareFile);

// Set all devicefirmwares.pushToNewDevices on false
if (firmwareFileRequest.isPushToNewDevices()) {
final List<FirmwareFile> firmwareFiles =
this.firmwareFileRepository.findByDeviceModel(databaseDeviceModel);
firmwareFiles.remove(changedFirmwareFile);
this.setPushToNewDevicesToFalse(firmwareFiles);
}

this.firmwareFileRepository.save(changedFirmwareFile);
}

Expand Down
Loading

0 comments on commit 15610ea

Please sign in to comment.