org.eclipse.ditto.internal.models.streaming.StreamedSnapshot Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ditto-internal-models-streaming Show documentation
Show all versions of ditto-internal-models-streaming Show documentation
Eclipse Ditto is a framework for creating and managing digital twins in the IoT.
The newest version!
/*
* Copyright (c) 2020 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.eclipse.ditto.internal.models.streaming;
import java.util.Objects;
import javax.annotation.concurrent.Immutable;
import org.eclipse.ditto.base.model.entity.id.EntityId;
import org.eclipse.ditto.base.model.entity.id.EntityIdJsonDeserializer;
import org.eclipse.ditto.base.model.entity.type.EntityTypeJsonDeserializer;
import org.eclipse.ditto.base.model.json.Jsonifiable;
import org.eclipse.ditto.json.JsonFactory;
import org.eclipse.ditto.json.JsonFieldDefinition;
import org.eclipse.ditto.json.JsonObject;
/**
* Serializable message for streamed snapshots.
*/
@Immutable
public final class StreamedSnapshot implements StreamingMessage, Jsonifiable {
private final EntityId entityId;
private final JsonObject snapshot;
private StreamedSnapshot(final EntityId entityId, final JsonObject snapshot) {
this.entityId = entityId;
this.snapshot = snapshot;
}
/**
* Create a streamed snapshot from entity ID and snapshot as JSON object.
*
* @param entityId the entity ID of the snapshot.
* @param snapshot the snapshot as JSON object.
* @return the streamed snapshot object.
*/
public static StreamedSnapshot of(final EntityId entityId, final JsonObject snapshot) {
return new StreamedSnapshot(entityId, snapshot);
}
/**
* Deserializes a {@code StreamedSnapshot} from the specified {@link JsonObject} argument.
*
* @param jsonObject the JSON object to be deserialized.
* @return the deserialized {@code StreamedSnapshot}.
* @throws NullPointerException if {@code jsonObject} is {@code null}.
* @throws org.eclipse.ditto.json.JsonMissingFieldException if {@code jsonObject} did not contain all required
* fields.
* @throws org.eclipse.ditto.json.JsonParseException if {@code jsonObject} was not in the expected format.
*/
public static StreamedSnapshot fromJson(final JsonObject jsonObject) {
return new StreamedSnapshot(deserializeEntityId(jsonObject), jsonObject.getValueOrThrow(JsonFields.SNAPSHOT));
}
private static EntityId deserializeEntityId(final JsonObject jsonObject) {
return EntityIdJsonDeserializer.deserializeEntityId(jsonObject,
JsonFields.ENTITY_ID,
EntityTypeJsonDeserializer.deserializeEntityType(jsonObject, JsonFields.ENTITY_TYPE));
}
/**
* Retrieve the entity ID of the streamed snapshot.
*
* @return the entity ID.
*/
public EntityId getEntityId() {
return entityId;
}
/**
* Retrieve the snapshot as JSON object.
*
* @return the snapshot as JSON object.
*/
public JsonObject getSnapshot() {
return snapshot;
}
@Override
public JsonObject toJson() {
return JsonObject.newBuilder()
.set(JsonFields.ENTITY_TYPE, entityId.getEntityType().toString())
.set(JsonFields.ENTITY_ID, entityId.toString())
.set(JsonFields.SNAPSHOT, snapshot)
.build();
}
@Override
public boolean equals(final Object other) {
if (other instanceof StreamedSnapshot) {
final StreamedSnapshot that = (StreamedSnapshot) other;
return Objects.equals(entityId, that.entityId) &&
Objects.equals(snapshot, that.snapshot);
} else {
return false;
}
}
@Override
public int hashCode() {
return Objects.hash(entityId, snapshot);
}
@Override
public String toString() {
return getClass().getSimpleName() +
"[entityId=" + entityId +
",snapshot=" + snapshot +
"]";
}
private static final class JsonFields {
private static final JsonFieldDefinition ENTITY_TYPE = JsonFactory.newStringFieldDefinition("type");
private static final JsonFieldDefinition ENTITY_ID = JsonFactory.newStringFieldDefinition("id");
private static final JsonFieldDefinition SNAPSHOT = JsonFactory.newJsonObjectFieldDefinition("s");
}
}