@Override public Props getActorPropsForType(final Connection connection, final ActorRef conciergeForwarder) { final ConnectionType connectionType = connection.getConnectionType(); switch (connectionType) { case AMQP_091: return RabbitMQClientActor.props(connection, conciergeForwarder); case AMQP_10: return AmqpClientActor.props(connection, conciergeForwarder); case MQTT: return MqttClientActor.props(connection, conciergeForwarder); default: throw new IllegalArgumentException("ConnectionType <" + connectionType + "> is not supported."); } } }
/** * Check a connection for errors and throw them. * * @param connection the connection to validate. * @param dittoHeaders headers of the command that triggered the connection validation. * @throws org.eclipse.ditto.model.base.exceptions.DittoRuntimeException if the connection has errors. * @throws java.lang.IllegalStateException if the connection type is not known. */ void validate(final Connection connection, final DittoHeaders dittoHeaders) { final AbstractProtocolValidator spec = specMap.get(connection.getConnectionType()); validateSourceAndTargetAddressesAreNonempty(connection, dittoHeaders); validateFormatOfCertificates(connection, dittoHeaders); if (spec != null) { // throw error at validation site for clarity of stack trace spec.validate(connection, dittoHeaders); } else { throw new IllegalStateException("Unknown connection type: " + connection); } }
/** * Check a connection for errors and throw them. * * @param connection the connection to validate. * @param dittoHeaders headers of the command that triggered the connection validation. * @throws org.eclipse.ditto.model.base.exceptions.DittoRuntimeException if the connection has errors. * @throws java.lang.IllegalStateException if the connection type is not known. */ void validate(final Connection connection, final DittoHeaders dittoHeaders) { final AbstractProtocolValidator spec = specMap.get(connection.getConnectionType()); validateSourceAndTargetAddressesAreNonempty(connection, dittoHeaders); validateFormatOfCertificates(connection, dittoHeaders); if (spec != null) { // throw error at validation site for clarity of stack trace spec.validate(connection, dittoHeaders); } else { throw new IllegalStateException("Unknown connection type: " + connection); } }
@Override public Props getActorPropsForType(final Connection connection, final ActorRef conciergeForwarder) { final ConnectionType connectionType = connection.getConnectionType(); switch (connectionType) { case AMQP_091: return RabbitMQClientActor.props(connection, conciergeForwarder); case AMQP_10: return AmqpClientActor.props(connection, conciergeForwarder); case MQTT: return MqttClientActor.props(connection, conciergeForwarder); default: throw new IllegalArgumentException("ConnectionType <" + connectionType + "> is not supported."); } } }
@Test public void createMinimalConnectionConfigurationInstance() { final Connection connection = ConnectivityModelFactory.newConnectionBuilder(ID, TYPE, STATUS, URI) .sources(SOURCES) .targets(TARGETS) .build(); assertThat(connection.getId()).isEqualTo(ID); assertThat((Object) connection.getConnectionType()).isEqualTo(TYPE); assertThat(connection.getUri()).isEqualTo(URI); assertThat(connection.getSources()).isEqualTo(SOURCES); }
private void modifyConnection(final ModifyConnection command) { final ActorRef origin = getSender(); final ActorRef self = getSelf(); if (connection != null && !connection.getConnectionType().equals(command.getConnection().getConnectionType())) { handleException("modify", origin, ConnectionConfigurationInvalidException .newBuilder("ConnectionType <" + connection.getConnectionType().getName() + "> of existing connection <" + connectionId + "> cannot be changed!") .dittoHeaders(command.getDittoHeaders()) .build() ); return; } persistEvent(ConnectionModified.of(command.getConnection(), command.getDittoHeaders()), persistedEvent -> { restoreConnection(persistedEvent.getConnection()); getContext().become(connectionCreatedBehaviour); // if client actor is started: send an artificial CloseConnection command to gracefully disconnect and stop the child actors askClientActorIfStarted(CloseConnection.of(connectionId, DittoHeaders.empty()), onSuccess -> { final PerformTask modifyTask = createModifyConnectionTask(true, command, origin); self.tell(modifyTask, ActorRef.noSender()); }, error -> handleException("connect-after-modify", origin, error), () -> { final PerformTask modifyTask = createModifyConnectionTask(false, command, origin); self.tell(modifyTask, ActorRef.noSender()); }); }); }
private void modifyConnection(final ModifyConnection command) { final ActorRef origin = getSender(); final ActorRef self = getSelf(); if (connection != null && !connection.getConnectionType().equals(command.getConnection().getConnectionType())) { handleException("modify", origin, ConnectionConfigurationInvalidException .newBuilder("ConnectionType <" + connection.getConnectionType().getName() + "> of existing connection <" + connectionId + "> cannot be changed!") .dittoHeaders(command.getDittoHeaders()) .build() ); return; } persistEvent(ConnectionModified.of(command.getConnection(), command.getDittoHeaders()), persistedEvent -> { restoreConnection(persistedEvent.getConnection()); getContext().become(connectionCreatedBehaviour); // if client actor is started: send an artificial CloseConnection command to gracefully disconnect and stop the child actors askClientActorIfStarted(CloseConnection.of(connectionId, DittoHeaders.empty()), onSuccess -> { final PerformTask modifyTask = createModifyConnectionTask(true, command, origin); self.tell(modifyTask, ActorRef.noSender()); }, error -> handleException("connect-after-modify", origin, error), () -> { final PerformTask modifyTask = createModifyConnectionTask(false, command, origin); self.tell(modifyTask, ActorRef.noSender()); }); }); }
/** * Returns a new {@code ConnectionBuilder} object. * * @param connection the connection to use for initializing the builder. * @return new instance of {@code ImmutableConnectionBuilder}. * @throws NullPointerException if {@code connection} is {@code null}. */ public static ConnectionBuilder getBuilder(final Connection connection) { checkNotNull(connection, "Connection"); return new Builder(connection.getConnectionType()) .id(connection.getId()) .connectionStatus(connection.getConnectionStatus()) .credentials(connection.getCredentials().orElse(null)) .uri(connection.getUri()) .trustedCertificates(connection.getTrustedCertificates().orElse(null)) .failoverEnabled(connection.isFailoverEnabled()) .validateCertificate(connection.isValidateCertificates()) .processorPoolSize(connection.getProcessorPoolSize()) .sources(connection.getSources()) .targets(connection.getTargets()) .clientCount(connection.getClientCount()) .specificConfig(connection.getSpecificConfig()) .mappingContext(connection.getMappingContext().orElse(null)) .name(connection.getName().orElse(null)) .tags(connection.getTags()); }
/** * Returns a new {@code ConnectionBuilder} object. * * @param connection the connection to use for initializing the builder. * @return new instance of {@code ImmutableConnectionBuilder}. * @throws NullPointerException if {@code connection} is {@code null}. */ public static ConnectionBuilder getBuilder(final Connection connection) { checkNotNull(connection, "Connection"); return new Builder(connection.getConnectionType()) .id(connection.getId()) .connectionStatus(connection.getConnectionStatus()) .credentials(connection.getCredentials().orElse(null)) .uri(connection.getUri()) .trustedCertificates(connection.getTrustedCertificates().orElse(null)) .failoverEnabled(connection.isFailoverEnabled()) .validateCertificate(connection.isValidateCertificates()) .processorPoolSize(connection.getProcessorPoolSize()) .sources(connection.getSources()) .targets(connection.getTargets()) .clientCount(connection.getClientCount()) .specificConfig(connection.getSpecificConfig()) .mappingContext(connection.getMappingContext().orElse(null)) .name(connection.getName().orElse(null)) .tags(connection.getTags()); }