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

Adjustments to Ditto java client after elimination of concierge service in Ditto #190

Merged
merged 14 commits into from
Aug 4, 2022
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
19 changes: 14 additions & 5 deletions java/Jenkinsfile_multibranch_pipeline
Original file line number Diff line number Diff line change
Expand Up @@ -55,16 +55,25 @@ pipeline {
agent {
docker {
args "$DITTO_DOCKER_ARGS"
image "$DITTO_DOCKER_IMAGE_MAVEN_JDK_8"
image "$DITTO_DOCKER_IMAGE_MAVEN_JDK_17"
reuseNode true
}
}
when {
expression {
return !params.SKIP_SONAR_SCAN
}
}
steps {
dir("$WORKSPACE/java") {
configFileProvider([configFile(fileId: 'mvn-bdc-settings', variable: 'MVN_SETTINGS')]) {
withSonarQubeEnv(installationName: "$SONAR_QUBE_ENV", credentialsId: "$SONAR_QUBE_CREDENTIAL_NAME") {
sh "mvn -s $MVN_SETTINGS --batch-mode --errors sonar:sonar -Dsonar.branch.name=${theBranch} " +
" -Drevision=${theVersion}" +
" -Dditto.version=${dittoVersion}"
echo 'Sonar Scan'
withSonarQubeEnv(installationName: "${env.SONAR_QUBE_ENV}", credentialsId: 'sonarqube') {
sh "mvn -s $MVN_SETTINGS --batch-mode --errors $SONAR_MAVEN_GOAL " +
"-Dsonar.host.url=$SONAR_HOST_URL " +
"-Dsonar.projectKey=org.eclipse.ditto:${theBranch} " +
"-Drevision=${theVersion} " +
"-Dditto.version=${dittoVersion} "
}
}
}
Expand Down
5 changes: 3 additions & 2 deletions java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@
<logback.version>1.2.11</logback.version>
<junit.version>4.13.2</junit.version>
<assertj.version>3.22.0</assertj.version>
<mutability-detector.version>0.10.4</mutability-detector.version>
<mutability-detector.version>0.10.6</mutability-detector.version>
<equals-verifier.version>3.8.2</equals-verifier.version>
<mockito.version>4.2.0</mockito.version>
<jsonassert.version>1.5.0</jsonassert.version>
Expand Down Expand Up @@ -239,7 +239,7 @@
<!-- globally set version for checking binary compatibility against -->
<!-- whoever changes this to ${revision} or ${project.version} is responsible for API breakage caused by this! -->
<!-- in other words: never do that here! exclude the 'breakages' locally in the japicmp maven plugin if you intentionally break something -->
<binary-compatibility-check.version>2.3.0</binary-compatibility-check.version>
<binary-compatibility-check.version>2.4.0</binary-compatibility-check.version>
<!-- skip until first release: -->
<binary-compatibility-check.skip>false</binary-compatibility-check.skip>

Expand Down Expand Up @@ -452,6 +452,7 @@
<exclude>org.eclipse.ditto.client.twin.internal</exclude>
<!-- this builder is an internal implementation of a builder interface and should not be handled as API: -->
<exclude>org.eclipse.ditto.client.configuration.ClientCredentialsAuthenticationConfiguration$ClientCredentialsAuthenticationConfigurationBuilder</exclude>
<exclude>org.eclipse.ditto.client.streaming.ThingSearchPublisher#of(org.eclipse.ditto.base.model.signals.Signal,org.eclipse.ditto.protocol.adapter.ProtocolAdapter,org.eclipse.ditto.client.messaging.MessagingProvider)</exclude>
</excludes>
</parameter>
</configuration>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,34 +25,34 @@

import javax.annotation.Nonnull;

import org.eclipse.ditto.client.ack.internal.AcknowledgementRequestsValidator;
import org.eclipse.ditto.client.internal.bus.Classification;
import org.eclipse.ditto.client.management.AcknowledgementsFailedException;
import org.eclipse.ditto.client.messaging.MessagingProvider;
import org.eclipse.ditto.json.JsonField;
import org.eclipse.ditto.json.JsonObject;
import org.eclipse.ditto.json.JsonPointer;
import org.eclipse.ditto.json.JsonValue;
import org.eclipse.ditto.base.model.acks.AcknowledgementLabel;
import org.eclipse.ditto.base.model.common.HttpStatus;
import org.eclipse.ditto.base.model.headers.DittoHeaderDefinition;
import org.eclipse.ditto.base.model.headers.DittoHeaders;
import org.eclipse.ditto.base.model.headers.DittoHeadersSettable;
import org.eclipse.ditto.base.model.headers.translator.HeaderTranslator;
import org.eclipse.ditto.base.model.json.JsonSchemaVersion;
import org.eclipse.ditto.things.model.ThingId;
import org.eclipse.ditto.protocol.Adaptable;
import org.eclipse.ditto.protocol.adapter.DittoProtocolAdapter;
import org.eclipse.ditto.protocol.HeaderTranslator;
import org.eclipse.ditto.protocol.adapter.ProtocolAdapter;
import org.eclipse.ditto.protocol.ProtocolFactory;
import org.eclipse.ditto.protocol.TopicPath;
import org.eclipse.ditto.base.model.signals.Signal;
import org.eclipse.ditto.base.model.signals.acks.Acknowledgement;
import org.eclipse.ditto.base.model.signals.acks.Acknowledgements;
import org.eclipse.ditto.base.model.signals.Signal;
import org.eclipse.ditto.base.model.signals.commands.CommandResponse;
import org.eclipse.ditto.base.model.signals.commands.ErrorResponse;
import org.eclipse.ditto.client.ack.internal.AcknowledgementRequestsValidator;
import org.eclipse.ditto.client.internal.bus.Classification;
import org.eclipse.ditto.client.management.AcknowledgementsFailedException;
import org.eclipse.ditto.client.messaging.MessagingProvider;
import org.eclipse.ditto.json.JsonField;
import org.eclipse.ditto.json.JsonObject;
import org.eclipse.ditto.json.JsonPointer;
import org.eclipse.ditto.json.JsonValue;
import org.eclipse.ditto.policies.model.signals.commands.PolicyCommand;
import org.eclipse.ditto.policies.model.signals.commands.PolicyCommandResponse;
import org.eclipse.ditto.protocol.Adaptable;
import org.eclipse.ditto.protocol.ProtocolFactory;
import org.eclipse.ditto.protocol.TopicPath;
import org.eclipse.ditto.protocol.adapter.DittoProtocolAdapter;
import org.eclipse.ditto.protocol.adapter.ProtocolAdapter;
import org.eclipse.ditto.things.model.ThingId;
import org.eclipse.ditto.things.model.signals.commands.ThingCommand;
import org.eclipse.ditto.things.model.signals.commands.modify.ThingModifyCommandResponse;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.eclipse.ditto.client.changes.internal.ImmutableFeatureChange;
import org.eclipse.ditto.client.changes.internal.ImmutableFeaturesChange;
import org.eclipse.ditto.client.changes.internal.ImmutableThingChange;
import org.eclipse.ditto.client.configuration.MessagingConfiguration;
import org.eclipse.ditto.client.internal.bus.AdaptableBus;
import org.eclipse.ditto.client.internal.bus.BusFactory;
import org.eclipse.ditto.client.internal.bus.Classification;
Expand Down Expand Up @@ -212,7 +213,8 @@ private static TwinImpl configureTwin(final MessagingProvider messagingProvider)
final String name = TopicPath.Channel.TWIN.getName();
final PointerBus bus = BusFactory.createPointerBus(name, messagingProvider.getExecutorService());
init(bus, messagingProvider);
final JsonSchemaVersion schemaVersion = messagingProvider.getMessagingConfiguration().getJsonSchemaVersion();
final MessagingConfiguration messagingConfiguration = messagingProvider.getMessagingConfiguration();
final JsonSchemaVersion schemaVersion = messagingConfiguration.getJsonSchemaVersion();
final OutgoingMessageFactory messageFactory = OutgoingMessageFactory.newInstance(schemaVersion);
return TwinImpl.newInstance(messagingProvider, messageFactory, bus);
}
Expand All @@ -232,6 +234,7 @@ private static PoliciesImpl configurePolicyClient(final MessagingProvider messag
final String busName = TopicPath.Channel.NONE.getName();
final PointerBus bus = BusFactory.createPointerBus(busName, messagingProvider.getExecutorService());
init(bus, messagingProvider);
final MessagingConfiguration messagingConfiguration = messagingProvider.getMessagingConfiguration();
final OutgoingMessageFactory messageFactory = getOutgoingMessageFactoryForPolicies(messagingProvider);
return PoliciesImpl.newInstance(messagingProvider, messageFactory, bus);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
import javax.annotation.concurrent.Immutable;

import org.eclipse.ditto.base.model.headers.DittoHeaders;
import org.eclipse.ditto.base.model.signals.commands.Command;
import org.eclipse.ditto.things.model.Thing;
import org.eclipse.ditto.things.model.ThingId;
import org.eclipse.ditto.base.model.signals.commands.Command;
import org.eclipse.ditto.things.model.signals.commands.modify.CreateThing;

/**
Expand Down Expand Up @@ -55,7 +55,7 @@ public static CreateThingLiveCommand of(final Command<?> command) {

@Override
public ThingId getEntityId() {
return thing.getEntityId().orElse(null);
return thing.getEntityId().orElseThrow(() -> new NullPointerException("Thing has no ID!"));
}

@Override
Expand All @@ -65,7 +65,7 @@ public Thing getThing() {

@Override
public Category getCategory() {
return Category.MODIFY;
return Category.CREATE;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
* LiveCommand} and {@link org.eclipse.ditto.client.live.commands.base.LiveCommandAnswerBuilder
* LiveCommandAnswerBuilder} for modification operations like create, update and delete.
*/
@org.eclipse.ditto.utils.jsr305.annotations.AllParametersAndReturnValuesAreNonnullByDefault
package org.eclipse.ditto.client.live.commands.modify;
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
* @param <F> the type of {@link FeatureHandle} for handling {@code Feature}s
* @since 1.0.0
*/
public interface CommonManagement<T extends ThingHandle, F extends FeatureHandle>
public interface CommonManagement<T extends ThingHandle<F>, F extends FeatureHandle>
extends ThingAttributeChangeRegistration, ThingChangeRegistration, FeatureChangeRegistration,
ThingFeaturePropertiesChangeRegistration {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ default void emitAdaptable(Adaptable message) {
* @param adaptable the adaptable to be sent
* @return a CompletionStage containing the correlated response to the sent {@code dittoProtocolAdaptable}
*/
default CompletionStage<Adaptable> sendAdaptable(Adaptable adaptable) {
default CompletionStage<Adaptable> sendAdaptable(final Adaptable adaptable) {
final String correlationId = adaptable.getDittoHeaders()
.getCorrelationId()
.orElseGet(() -> UUID.randomUUID().toString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@
import java.util.concurrent.CompletionStage;
import java.util.concurrent.atomic.AtomicBoolean;

import org.eclipse.ditto.base.model.signals.Signal;
import org.eclipse.ditto.base.model.signals.commands.ErrorResponse;
import org.eclipse.ditto.client.messaging.MessagingProvider;
import org.eclipse.ditto.protocol.Adaptable;
import org.eclipse.ditto.protocol.adapter.ProtocolAdapter;
import org.eclipse.ditto.base.model.signals.Signal;
import org.eclipse.ditto.base.model.signals.commands.ErrorResponse;
import org.eclipse.ditto.thingsearch.model.signals.commands.subscription.CreateSubscription;
import org.eclipse.ditto.thingsearch.model.signals.events.SubscriptionCreated;
import org.eclipse.ditto.thingsearch.model.signals.events.SubscriptionHasNextPage;
import org.reactivestreams.Publisher;
Expand All @@ -39,7 +40,7 @@ public final class ThingSearchPublisher implements Publisher<SubscriptionHasNext
private final CompletionStage<SubscriptionCreated> subscriptionFuture;
private final AtomicBoolean subscribed;

private ThingSearchPublisher(final Signal<?> createSubscription,
private ThingSearchPublisher(final CreateSubscription createSubscription,
final ProtocolAdapter protocolAdapter,
final MessagingProvider messagingProvider) {
this.protocolAdapter = protocolAdapter;
Expand All @@ -57,7 +58,7 @@ private ThingSearchPublisher(final Signal<?> createSubscription,
* @param messagingProvider the messaging provider.
* @return the single-use publisher.
*/
public static Publisher<SubscriptionHasNextPage> of(final Signal<?> createSubscription,
public static Publisher<SubscriptionHasNextPage> of(final CreateSubscription createSubscription,
final ProtocolAdapter protocolAdapter,
final MessagingProvider messagingProvider) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

import org.eclipse.ditto.base.model.exceptions.DittoInternalErrorException;
import org.eclipse.ditto.base.model.headers.DittoHeaders;
import org.eclipse.ditto.client.internal.AbstractDittoClientTest;
import org.eclipse.ditto.client.streaming.SpliteratorSubscriber;
import org.eclipse.ditto.client.twin.SearchQueryBuilder;
Expand All @@ -32,10 +34,8 @@
import org.eclipse.ditto.json.JsonFieldSelector;
import org.eclipse.ditto.json.JsonObject;
import org.eclipse.ditto.json.JsonPointer;
import org.eclipse.ditto.base.model.headers.DittoHeaders;
import org.eclipse.ditto.things.model.Thing;
import org.eclipse.ditto.things.model.ThingId;
import org.eclipse.ditto.base.model.signals.commands.exceptions.GatewayInternalErrorException;
import org.eclipse.ditto.thingsearch.model.signals.commands.subscription.CancelSubscription;
import org.eclipse.ditto.thingsearch.model.signals.commands.subscription.CreateSubscription;
import org.eclipse.ditto.thingsearch.model.signals.commands.subscription.RequestFromSubscription;
Expand Down Expand Up @@ -125,12 +125,12 @@ public void partialFailure() {
reply(SubscriptionCreated.of(subscriptionId, createSubscription.getDittoHeaders()));
expectMsgClass(RequestFromSubscription.class);
reply(hasNext(subscriptionId, 0, 1));
reply(SubscriptionFailed.of(subscriptionId, GatewayInternalErrorException.newBuilder().message("sorry").build(),
reply(SubscriptionFailed.of(subscriptionId, DittoInternalErrorException.newBuilder().message("sorry").build(),
DittoHeaders.empty()));
final AtomicReference<Thing> thingBox = new AtomicReference<>();
assertThat(searchResultSpliterator.tryAdvance(thingBox::set)).isTrue();
assertThat(thingBox).hasValue(Thing.newBuilder().setId(ThingId.of("x:0")).build());
assertThatExceptionOfType(GatewayInternalErrorException.class)
assertThatExceptionOfType(DittoInternalErrorException.class)
.isThrownBy(() -> searchResultSpliterator.forEachRemaining(thing -> {}));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ public static void main(final String... args) throws ExecutionException, Interru

private static void addNewSubjectToExistingPolicy(final DittoClient client) {
client.twin().create()
.thenApply(thing -> thing.getPolicyEntityId()
.thenApply(thing -> thing.getPolicyId()
.orElseThrow(() -> new IllegalStateException(("Could not get PolicyId from created Thing."))))
.thenCompose(policyId -> client.policies().retrieve(policyId))
.thenApply(policy -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.eclipse.ditto.base.model.auth.AuthorizationContext;
import org.eclipse.ditto.base.model.auth.AuthorizationSubject;
import org.eclipse.ditto.base.model.auth.DittoAuthorizationContextType;
import org.eclipse.ditto.base.model.common.DittoSystemProperties;
import org.eclipse.ditto.base.model.headers.DittoHeaderDefinition;
import org.eclipse.ditto.base.model.headers.DittoHeaders;
import org.eclipse.ditto.json.JsonFactory;
Expand All @@ -38,7 +39,6 @@
import org.eclipse.ditto.things.model.ThingLifecycle;
import org.eclipse.ditto.things.model.ThingRevision;
import org.eclipse.ditto.things.model.ThingsModelFactory;
import org.eclipse.ditto.things.model.signals.commands.ThingCommandSizeValidator;
import org.eclipse.ditto.things.model.signals.commands.exceptions.AttributeNotAccessibleException;
import org.eclipse.ditto.things.model.signals.commands.exceptions.AttributeNotModifiableException;
import org.eclipse.ditto.things.model.signals.commands.exceptions.AttributePointerInvalidException;
Expand Down Expand Up @@ -82,7 +82,7 @@
public final class TestConstants {

public static final long THING_SIZE_LIMIT_BYTES = Long.parseLong(
System.getProperty(ThingCommandSizeValidator.DITTO_LIMITS_THINGS_MAX_SIZE_BYTES, "-1"));
System.getProperty(DittoSystemProperties.DITTO_LIMITS_THINGS_MAX_SIZE_BYTES, "-1"));

/**
* A known correlation id for testing.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;

import org.eclipse.ditto.base.model.headers.translator.HeaderTranslator;
import org.eclipse.ditto.base.model.json.JsonSchemaVersion;
import org.eclipse.ditto.base.model.signals.Signal;
import org.eclipse.ditto.client.configuration.AuthenticationConfiguration;
Expand All @@ -39,7 +40,6 @@
import org.eclipse.ditto.client.messaging.MessagingProvider;
import org.eclipse.ditto.messages.model.Message;
import org.eclipse.ditto.protocol.Adaptable;
import org.eclipse.ditto.protocol.HeaderTranslator;
import org.eclipse.ditto.protocol.Payload;
import org.eclipse.ditto.protocol.ProtocolFactory;
import org.eclipse.ditto.protocol.adapter.DittoProtocolAdapter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@
import java.util.concurrent.TimeoutException;

import org.eclipse.ditto.base.model.headers.DittoHeaders;
import org.eclipse.ditto.base.model.headers.translator.HeaderTranslator;
import org.eclipse.ditto.base.model.signals.Signal;
import org.eclipse.ditto.client.messaging.internal.MockMessagingProvider;
import org.eclipse.ditto.json.JsonArray;
import org.eclipse.ditto.json.JsonObject;
import org.eclipse.ditto.protocol.HeaderTranslator;
import org.eclipse.ditto.protocol.ProtocolFactory;
import org.eclipse.ditto.protocol.adapter.DittoProtocolAdapter;
import org.eclipse.ditto.protocol.adapter.ProtocolAdapter;
Expand Down