use of org.opensmartgridplatform.adapter.protocol.iec60870.domain.entities.Iec60870Device in project open-smart-grid-platform by OSGP.
the class ClientConnectionServiceTest method testGetConnectionShouldReturnExistingConnectionWhenInCache.
@Test
void testGetConnectionShouldReturnExistingConnectionWhenInCache() throws Exception {
// Arrange
final String deviceIdentification = "DA_DVC_1";
final Iec60870Device device = Iec60870DeviceFactory.createDistributionAutomationDevice(deviceIdentification);
when(this.iec60870DeviceRepository.findByDeviceIdentification(deviceIdentification)).thenReturn(Optional.of(device));
final RequestMetadata requestMetadata = RequestMetadataFactory.forDevice(deviceIdentification);
final ClientConnection expectedConnection = ClientConnectionFactory.forDevice(deviceIdentification);
this.connectionCache.addConnection(deviceIdentification, expectedConnection);
// Act
final ClientConnection actualConnection = this.clientConnectionService.getConnection(requestMetadata);
// Assert
assertThat(actualConnection).isEqualTo(expectedConnection);
}
use of org.opensmartgridplatform.adapter.protocol.iec60870.domain.entities.Iec60870Device in project open-smart-grid-platform by OSGP.
the class Iec60870DeviceFactory method createDistributionAutomationDevice.
public static Iec60870Device createDistributionAutomationDevice(final String deviceIdentification) {
final Iec60870Device device = new Iec60870Device(deviceIdentification, DeviceType.DISTRIBUTION_AUTOMATION_DEVICE);
device.setCommonAddress(Integer.parseInt(DEFAULT_COMMON_ADDRESS));
device.setPort(Integer.parseInt(DEFAULT_PORT));
return device;
}
use of org.opensmartgridplatform.adapter.protocol.iec60870.domain.entities.Iec60870Device in project open-smart-grid-platform by OSGP.
the class LightSensorDeviceResponseService method sendEvent.
private void sendEvent(final EventNotificationDto eventNotification, final Iec60870Device device, final ResponseMetadata responseMetadata) {
final ResponseMetadata rm = new ResponseMetadata.Builder().withCorrelationUid(responseMetadata.getCorrelationUid()).withDeviceIdentification(device.getDeviceIdentification()).withDomainInfo(responseMetadata.getDomainInfo()).withMessageType(MessageType.EVENT_NOTIFICATION.name()).withOrganisationIdentification(responseMetadata.getOrganisationIdentification()).build();
this.lightMeasurementService.sendEventNotification(eventNotification, rm);
}
use of org.opensmartgridplatform.adapter.protocol.iec60870.domain.entities.Iec60870Device in project open-smart-grid-platform by OSGP.
the class ClientConnectionService method createConnection.
private ClientConnection createConnection(final RequestMetadata requestMetadata) throws ConnectionFailureException {
final String deviceIdentification = requestMetadata.getDeviceIdentification();
final Iec60870Device device = this.getIec60870Device(deviceIdentification);
final Iec60870Device connectionDevice = this.getConnectionDevice(device);
final String connectionDeviceIdentification = device.getConnectionDeviceIdentification();
final ConnectionParameters connectionParameters = this.createConnectionParameters(connectionDevice, requestMetadata.getIpAddress());
final ResponseMetadata responseMetadata = ResponseMetadata.from(requestMetadata, connectionDeviceIdentification, connectionDevice.getDeviceType());
final ClientConnectionEventListener eventListener = new ClientConnectionEventListener.Builder().withDeviceIdentification(connectionDeviceIdentification).withClientAsduHandlerRegistry(this.clientAsduHandlerRegistry).withClientConnectionCache(this.connectionCache).withLoggingService(this.loggingService).withLogItemFactory(this.logItemFactory).withResponseMetadata(responseMetadata).withResponseMetadataFactory(this.responseMetadataFactory).build();
final ClientConnection newDeviceConnection = this.iec60870Client.connect(connectionParameters, eventListener);
try {
this.connectionCache.addConnection(connectionDeviceIdentification, newDeviceConnection);
} catch (final ClientConnectionAlreadyInCacheException e) {
LOGGER.warn("Client connection for device {} already exists. Closing new connection and returning existing connection", connectionDeviceIdentification);
LOGGER.debug("Exception: ", e);
newDeviceConnection.getConnection().close();
return e.getClientConnection();
}
return newDeviceConnection;
}
use of org.opensmartgridplatform.adapter.protocol.iec60870.domain.entities.Iec60870Device in project open-smart-grid-platform by OSGP.
the class ClientConnectionService method getConnection.
public ClientConnection getConnection(final RequestMetadata requestMetadata) throws ConnectionFailureException {
final String deviceIdentification = requestMetadata.getDeviceIdentification();
LOGGER.debug("Get connection called for device {}.", deviceIdentification);
final Iec60870Device device = this.getIec60870Device(deviceIdentification);
final String connectionDeviceIdentification = device.getConnectionDeviceIdentification();
if (device.hasGatewayDevice()) {
LOGGER.debug("Getting connection for device {} using gateway device {}.", deviceIdentification, connectionDeviceIdentification);
}
final ClientConnection cachedDeviceConnection = this.connectionCache.getConnection(connectionDeviceIdentification);
if (cachedDeviceConnection != null) {
LOGGER.info("Connection found in cache for device {}.", connectionDeviceIdentification);
return cachedDeviceConnection;
} else {
LOGGER.info("No connection found in cache for device {}, creating new connection.", connectionDeviceIdentification);
return this.createConnection(requestMetadata);
}
}
Aggregations