Skip to content

Commit

Permalink
keep order of json elements in connection model in set structures
Browse files Browse the repository at this point in the history
Signed-off-by: Thomas Jaeckle <thomas.jaeckle@bosch.io>
  • Loading branch information
thjaeckle committed Nov 3, 2021
1 parent 4caa80f commit feb758a
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 58 deletions.
Expand Up @@ -19,7 +19,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
Expand Down Expand Up @@ -438,7 +438,7 @@ public static AddressMetric newAddressMetric(final Set<Measurement> measurements
public static AddressMetric newAddressMetric(final AddressMetric addressMetric,
final Collection<Measurement> additionalMeasurements) {

final Set<Measurement> set = new HashSet<>(addressMetric.getMeasurements());
final Set<Measurement> set = new LinkedHashSet<>(addressMetric.getMeasurements());
set.addAll(additionalMeasurements);
return ImmutableAddressMetric.of(set);
}
Expand Down Expand Up @@ -852,7 +852,7 @@ public static Enforcement newEnforcement(final String input, final Set<String> f
public static Enforcement newEnforcement(final String input, final String requiredFilter,
final String... additionalFilters) {

final Set<String> filters = new HashSet<>(1 + additionalFilters.length);
final Set<String> filters = new LinkedHashSet<>(1 + additionalFilters.length);
filters.add(requiredFilter);
Collections.addAll(filters, additionalFilters);

Expand Down
Expand Up @@ -16,7 +16,7 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
Expand All @@ -25,15 +25,15 @@

import javax.annotation.concurrent.Immutable;

import org.eclipse.ditto.base.model.common.ConditionChecker;
import org.eclipse.ditto.base.model.json.JsonSchemaVersion;
import org.eclipse.ditto.json.JsonFactory;
import org.eclipse.ditto.json.JsonField;
import org.eclipse.ditto.json.JsonKey;
import org.eclipse.ditto.json.JsonObject;
import org.eclipse.ditto.json.JsonObjectBuilder;
import org.eclipse.ditto.json.JsonPointer;
import org.eclipse.ditto.json.JsonValue;
import org.eclipse.ditto.base.model.common.ConditionChecker;
import org.eclipse.ditto.base.model.json.JsonSchemaVersion;

/**
* Immutable implementation of {@link AddressMetric}.
Expand All @@ -47,7 +47,7 @@ final class ImmutableAddressMetric implements AddressMetric {
private final Set<Measurement> measurements;

private ImmutableAddressMetric(final Set<Measurement> measurements) {
this.measurements = Collections.unmodifiableSet(new HashSet<>(measurements));
this.measurements = Collections.unmodifiableSet(new LinkedHashSet<>(measurements));
}

/**
Expand Down Expand Up @@ -130,7 +130,7 @@ private static int calculateComparatorScore(final List<MetricType> sortedTypes,
* @throws org.eclipse.ditto.json.JsonParseException if {@code jsonObject} is not an appropriate JSON object.
*/
public static AddressMetric fromJson(final JsonObject jsonObject) {
final Set<Measurement> readMeasurements = new HashSet<>();
final Set<Measurement> readMeasurements = new LinkedHashSet<>();
jsonObject.stream()
.filter(field -> field.getValue().isObject())
.forEach(f -> Stream.of(SUCCESS_KEY, FAILURE_KEY)
Expand Down
Expand Up @@ -25,7 +25,7 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
Expand Down Expand Up @@ -92,7 +92,7 @@ private ImmutableConnection(final Builder builder) {
processorPoolSize = builder.processorPoolSize;
specificConfig = Collections.unmodifiableMap(new HashMap<>(builder.specificConfig));
payloadMappingDefinition = builder.payloadMappingDefinition;
tags = Collections.unmodifiableSet(new HashSet<>(builder.tags));
tags = Collections.unmodifiableSet(new LinkedHashSet<>(builder.tags));
lifecycle = builder.lifecycle;
sshTunnel = builder.sshTunnel;
}
Expand Down Expand Up @@ -251,8 +251,8 @@ private static Set<String> getTags(final JsonObject jsonObject) {
.map(array -> array.stream()
.filter(JsonValue::isString)
.map(JsonValue::asString)
.collect(Collectors.toSet()))
.orElse(Collections.emptySet());
.collect(Collectors.toCollection(LinkedHashSet::new)))
.orElseGet(LinkedHashSet::new);
}

@Override
Expand Down Expand Up @@ -509,7 +509,7 @@ private static final class Builder implements ConnectionBuilder {
@Nullable private SshTunnel sshTunnel = null;

// optional with default:
private Set<String> tags = new HashSet<>();
private Set<String> tags = new LinkedHashSet<>();
private boolean failOverEnabled = true;
private boolean validateCertificate = true;
private final List<Source> sources = new ArrayList<>();
Expand Down Expand Up @@ -632,7 +632,7 @@ public ConnectionBuilder mappingContext(@Nullable final MappingContext mappingCo

@Override
public ConnectionBuilder tags(final Collection<String> tags) {
this.tags = new HashSet<>(checkNotNull(tags, "tags to set"));
this.tags = new LinkedHashSet<>(checkNotNull(tags, "tags to set"));
return this;
}

Expand Down Expand Up @@ -747,11 +747,11 @@ private void checkAuthorizationContextsAreValid() {
final Set<String> sourcesWithoutAuthContext = sources.stream()
.filter(source -> source.getAuthorizationContext().isEmpty())
.flatMap(source -> source.getAddresses().stream())
.collect(Collectors.toSet());
.collect(Collectors.toCollection(LinkedHashSet::new));
final Set<String> targetsWithoutAuthContext = targets.stream()
.filter(target -> target.getAuthorizationContext().isEmpty())
.map(Target::getAddress)
.collect(Collectors.toSet());
.collect(Collectors.toCollection(LinkedHashSet::new));

if (!sourcesWithoutAuthContext.isEmpty() || !targetsWithoutAuthContext.isEmpty()) {
final StringBuilder message = new StringBuilder("The ");
Expand Down
Expand Up @@ -13,21 +13,21 @@
package org.eclipse.ditto.connectivity.model;

import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Objects;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import javax.annotation.concurrent.Immutable;

import org.eclipse.ditto.base.model.json.JsonSchemaVersion;
import org.eclipse.ditto.json.JsonCollectors;
import org.eclipse.ditto.json.JsonFactory;
import org.eclipse.ditto.json.JsonField;
import org.eclipse.ditto.json.JsonObject;
import org.eclipse.ditto.json.JsonObjectBuilder;
import org.eclipse.ditto.json.JsonValue;
import org.eclipse.ditto.base.model.json.JsonSchemaVersion;

/**
* Immutable implementation of {@link Enforcement}.
Expand All @@ -40,7 +40,7 @@ final class ImmutableEnforcement implements Enforcement {

private ImmutableEnforcement(final String input, final Set<String> filters) {
this.input = input;
this.filters = Collections.unmodifiableSet(new HashSet<>(filters));
this.filters = Collections.unmodifiableSet(new LinkedHashSet<>(filters));
}

/**
Expand Down Expand Up @@ -89,7 +89,8 @@ public static Enforcement fromJson(final JsonObject jsonObject) {
final Set<String> readFilters = jsonObject.getValue(JsonFields.FILTERS)
.map(array -> array.stream()
.map(JsonValue::asString)
.collect(Collectors.toSet())).orElse(Collections.emptySet());
.collect(Collectors.toCollection(LinkedHashSet::new)))
.orElseGet(LinkedHashSet::new);
final String readInput =
jsonObject.getValueOrThrow(JsonFields.INPUT);
return new ImmutableEnforcement(readInput, readFilters);
Expand Down
Expand Up @@ -18,6 +18,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
Expand All @@ -44,13 +45,13 @@
@Immutable
final class ImmutableReplyTarget implements ReplyTarget {

private static final Set<ResponseType> DEFAULT_EXPECTED_RESPONSE_TYPES;
private static final LinkedHashSet<ResponseType> DEFAULT_EXPECTED_RESPONSE_TYPES;

static {
final HashSet<ResponseType> defaultExpectedResponseTypes = new HashSet<>();
final HashSet<ResponseType> defaultExpectedResponseTypes = new LinkedHashSet<>();
defaultExpectedResponseTypes.add(ResponseType.RESPONSE);
defaultExpectedResponseTypes.add(ResponseType.ERROR);
DEFAULT_EXPECTED_RESPONSE_TYPES = Collections.unmodifiableSet(new HashSet<>(defaultExpectedResponseTypes));
DEFAULT_EXPECTED_RESPONSE_TYPES = new LinkedHashSet<>(defaultExpectedResponseTypes);
}

private final String address;
Expand All @@ -60,7 +61,7 @@ final class ImmutableReplyTarget implements ReplyTarget {
private ImmutableReplyTarget(final Builder builder) {
this.address = checkNotNull(builder.address);
this.headerMapping = builder.headerMapping;
this.expectedResponseTypes = Collections.unmodifiableSet(new HashSet<>(builder.expectedResponseTypes));
this.expectedResponseTypes = Collections.unmodifiableSet(new LinkedHashSet<>(builder.expectedResponseTypes));
}

@Override
Expand Down Expand Up @@ -128,7 +129,7 @@ static Optional<ReplyTarget> fromJsonOptional(final JsonObject jsonObject) {
.map(ResponseType::fromName)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toSet()))
.collect(Collectors.toCollection(LinkedHashSet::new)))
.orElse(DEFAULT_EXPECTED_RESPONSE_TYPES))
.build());

Expand Down Expand Up @@ -170,7 +171,7 @@ static final class Builder implements ReplyTarget.Builder {

@Nullable private String address;
private HeaderMapping headerMapping = ConnectivityModelFactory.emptyHeaderMapping();
private final Collection<ResponseType> expectedResponseTypes = new HashSet<>(DEFAULT_EXPECTED_RESPONSE_TYPES);
private final Collection<ResponseType> expectedResponseTypes = new LinkedHashSet<>(DEFAULT_EXPECTED_RESPONSE_TYPES);

@Override
public ReplyTarget build() {
Expand Down
Expand Up @@ -14,7 +14,7 @@

import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
Expand All @@ -27,13 +27,6 @@
import javax.annotation.concurrent.Immutable;
import javax.annotation.concurrent.NotThreadSafe;

import org.eclipse.ditto.json.JsonArray;
import org.eclipse.ditto.json.JsonCollectors;
import org.eclipse.ditto.json.JsonFactory;
import org.eclipse.ditto.json.JsonField;
import org.eclipse.ditto.json.JsonObject;
import org.eclipse.ditto.json.JsonObjectBuilder;
import org.eclipse.ditto.json.JsonValue;
import org.eclipse.ditto.base.model.acks.AcknowledgementLabel;
import org.eclipse.ditto.base.model.acks.FilteredAcknowledgementRequest;
import org.eclipse.ditto.base.model.auth.AuthorizationContext;
Expand All @@ -42,6 +35,13 @@
import org.eclipse.ditto.base.model.auth.DittoAuthorizationContextType;
import org.eclipse.ditto.base.model.common.ConditionChecker;
import org.eclipse.ditto.base.model.json.JsonSchemaVersion;
import org.eclipse.ditto.json.JsonArray;
import org.eclipse.ditto.json.JsonCollectors;
import org.eclipse.ditto.json.JsonFactory;
import org.eclipse.ditto.json.JsonField;
import org.eclipse.ditto.json.JsonObject;
import org.eclipse.ditto.json.JsonObjectBuilder;
import org.eclipse.ditto.json.JsonValue;

/**
* Immutable implementation of {@link Source}.
Expand Down Expand Up @@ -98,7 +98,7 @@ final class ImmutableSource implements Source {

private ImmutableSource(final Builder builder) {
this.addresses = Collections.unmodifiableSet(
new HashSet<>(ConditionChecker.checkNotNull(builder.addresses, "addresses")));
new LinkedHashSet<>(ConditionChecker.checkNotNull(builder.addresses, "addresses")));
this.consumerCount = builder.consumerCount;
this.qos = builder.qos;
this.authorizationContext = ConditionChecker.checkNotNull(builder.authorizationContext, "authorizationContext");
Expand Down Expand Up @@ -238,7 +238,8 @@ public static Source fromJson(final JsonObject jsonObject, final int index) {
final Set<String> readSources = jsonObject.getValue(JsonFields.ADDRESSES)
.map(array -> array.stream()
.map(JsonValue::asString)
.collect(Collectors.toSet())).orElse(Collections.emptySet());
.collect(Collectors.toCollection(LinkedHashSet::new)))
.orElseGet(LinkedHashSet::new);
final int readConsumerCount =
jsonObject.getValue(JsonFields.CONSUMER_COUNT).orElse(DEFAULT_CONSUMER_COUNT);
final Integer readQos = jsonObject.getValue(JsonFields.QOS).orElse(null);
Expand Down Expand Up @@ -378,7 +379,7 @@ private static Set<AcknowledgementLabel> declaredAcksFromJson(final JsonArray js
return jsonArray.stream()
.map(JsonValue::formatAsString)
.map(AcknowledgementLabel::of)
.collect(Collectors.toSet());
.collect(Collectors.toCollection(LinkedHashSet::new));
}

private static JsonArray declaredAcksToJson(final Set<AcknowledgementLabel> declaredAcks) {
Expand All @@ -394,7 +395,7 @@ private static JsonArray declaredAcksToJson(final Set<AcknowledgementLabel> decl
static final class Builder implements SourceBuilder<Builder> {

// required but changeable:
@Nullable private Set<String> addresses = new HashSet<>();
@Nullable private Set<String> addresses = new LinkedHashSet<>();
@Nullable private AuthorizationContext authorizationContext;

// optional:
Expand Down Expand Up @@ -436,7 +437,7 @@ public Builder addresses(final Set<String> addresses) {
@Override
public Builder address(final String address) {
if (this.addresses == null) {
this.addresses = new HashSet<>();
this.addresses = new LinkedHashSet<>();
}
this.addresses.add(address);
return this;
Expand Down
Expand Up @@ -14,10 +14,10 @@

import static org.eclipse.ditto.base.model.common.ConditionChecker.checkNotNull;

import java.util.Collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
Expand Down Expand Up @@ -71,7 +71,7 @@ private ImmutableTarget(final Builder builder) {
address = checkNotNull(builder.address, "address");
originalAddress = checkNotNull(builder.originalAddress, "originalAddress");
topics = Collections.unmodifiableSet(
new HashSet<>(builder.topics == null ? Collections.emptySet() : builder.topics));
new LinkedHashSet<>(builder.topics == null ? Collections.emptySet() : builder.topics));
qos = builder.qos;
authorizationContext = checkNotNull(builder.authorizationContext, "authorizationContext");
issuedAcknowledgementLabel = builder.issuedAcknowledgementLabel;
Expand Down Expand Up @@ -174,8 +174,8 @@ public static Target fromJson(final JsonObject jsonObject) {
.map(array -> array.stream()
.map(JsonValue::asString)
.map(ConnectivityModelFactory::newFilteredTopic)
.collect(Collectors.toSet()))
.orElse(Collections.emptySet());
.collect(Collectors.toCollection(LinkedHashSet::new)))
.orElseGet(LinkedHashSet::new);

final JsonArray authContext = jsonObject.getValue(JsonFields.AUTHORIZATION_CONTEXT)
.orElseGet(() -> JsonArray.newBuilder().build());
Expand Down Expand Up @@ -313,7 +313,7 @@ public TargetBuilder topics(final Set<FilteredTopic> topics) {

@Override
public TargetBuilder topics(final FilteredTopic requiredTopic, final FilteredTopic... additionalTopics) {
final Set<FilteredTopic> theTopics = new HashSet<>(1 + additionalTopics.length);
final Set<FilteredTopic> theTopics = new LinkedHashSet<>(1 + additionalTopics.length);
theTopics.add(requiredTopic);
Collections.addAll(theTopics, additionalTopics);

Expand All @@ -322,11 +322,14 @@ public TargetBuilder topics(final FilteredTopic requiredTopic, final FilteredTop

@Override
public TargetBuilder topics(final Topic requiredTopic, final Topic... additionalTopics) {
final Collection<Topic> theTopics = EnumSet.of(requiredTopic, additionalTopics);

final List<Topic> theTopics = new ArrayList<>();
theTopics.add(requiredTopic);
theTopics.addAll(Arrays.asList(additionalTopics));
final Set<FilteredTopic> filteredTopics = theTopics.stream()
.map(ConnectivityModelFactory::newFilteredTopicBuilder)
.map(FilteredTopicBuilder::build)
.collect(Collectors.toSet());
.collect(Collectors.toCollection(LinkedHashSet::new));

return topics(filteredTopics);
}
Expand Down

0 comments on commit feb758a

Please sign in to comment.