io.nats.client.api.ObjectInfo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jnats Show documentation
Show all versions of jnats Show documentation
Client library for working with the NATS messaging system.
// Copyright 2022 The NATS Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at:
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package io.nats.client.api;
import io.nats.client.Message;
import io.nats.client.impl.Headers;
import io.nats.client.support.*;
import java.time.ZonedDateTime;
import static io.nats.client.support.ApiConstants.*;
import static io.nats.client.support.JsonUtils.beginJson;
import static io.nats.client.support.JsonUtils.endJson;
/**
* The ObjectInfo is Object Meta Information plus instance information
*/
public class ObjectInfo implements JsonSerializable {
private final String bucket;
private final String nuid;
private final long size;
private final long chunks;
private final String digest;
private final boolean deleted;
private final ObjectMeta objectMeta;
private ZonedDateTime modified;
private ObjectInfo(Builder b) {
bucket = b.bucket;
nuid = b.nuid;
size = b.size;
modified = b.modified;
chunks = b.chunks;
digest = b.digest;
deleted = b.deleted;
objectMeta = b.metaBuilder.build();
}
public ObjectInfo(MessageInfo mi) {
this(mi.getData(), mi.getTime());
}
public ObjectInfo(Message m) {
this(m.getData(), m.metaData().timestamp());
}
ObjectInfo(byte[] jsonBytes, ZonedDateTime messageTime) {
JsonValue jv = JsonParser.parseUnchecked(jsonBytes);
objectMeta = new ObjectMeta(jv);
bucket = JsonValueUtils.readString(jv, BUCKET);
nuid = JsonValueUtils.readString(jv, NUID);
size = JsonValueUtils.readLong(jv, SIZE, 0);
modified = DateTimeUtils.toGmt(messageTime);
chunks = JsonValueUtils.readLong(jv, CHUNKS, 0);
digest = JsonValueUtils.readString(jv, DIGEST);
deleted = JsonValueUtils.readBoolean(jv, DELETED);
}
@Override
public String toJson() {
// never write MTIME (modified)
StringBuilder sb = beginJson();
objectMeta.embedJson(sb); // the go code embeds the objectMeta's fields instead of as a child object.
JsonUtils.addField(sb, BUCKET, bucket);
JsonUtils.addField(sb, NUID, nuid);
JsonUtils.addField(sb, SIZE, size);
JsonUtils.addField(sb, CHUNKS, chunks);
JsonUtils.addField(sb, DIGEST, digest);
JsonUtils.addField(sb, DELETED, deleted);
return endJson(sb).toString();
}
public String getBucket() {
return bucket;
}
public String getNuid() {
return nuid;
}
public long getSize() {
return size;
}
public ZonedDateTime getModified() {
return modified;
}
public long getChunks() {
return chunks;
}
public String getDigest() {
return digest;
}
public boolean isDeleted() {
return deleted;
}
public ObjectMeta getObjectMeta() {
return objectMeta;
}
public String getObjectName() {
return objectMeta.getObjectName();
}
public String getDescription() {
return objectMeta.getDescription();
}
public Headers getHeaders() {
return objectMeta.getHeaders();
}
public boolean isLink() {
return objectMeta.getObjectMetaOptions().getLink() != null;
}
public ObjectLink getLink() {
return objectMeta.getObjectMetaOptions().getLink();
}
public static Builder builder(String bucket, String objectName) {
return new Builder(bucket, objectName);
}
public static Builder builder(String bucket, ObjectMeta meta) {
return new Builder(bucket, meta);
}
public static Builder builder(ObjectInfo info) {
return new Builder(info);
}
public static class Builder {
String bucket;
String nuid;
long size;
ZonedDateTime modified;
long chunks;
String digest;
boolean deleted;
ObjectMeta.Builder metaBuilder;
public Builder(String bucket, String objectName) {
metaBuilder = ObjectMeta.builder(objectName);
bucket(bucket);
}
public Builder(String bucket, ObjectMeta meta) {
metaBuilder = ObjectMeta.builder(meta);
bucket(bucket);
}
public Builder(ObjectInfo info) {
bucket = info.bucket;
nuid = info.nuid;
size = info.size;
modified = info.modified;
chunks = info.chunks;
digest = info.digest;
deleted = info.deleted;
metaBuilder = ObjectMeta.builder(info.objectMeta);
}
public Builder objectName(String name) {
metaBuilder.objectName(name);
return this;
}
public Builder bucket(String bucket) {
this.bucket = Validator.validateBucketName(bucket, true);
return this;
}
public Builder nuid(String nuid) {
this.nuid = nuid;
return this;
}
public Builder size(long size) {
this.size = size;
return this;
}
public Builder modified(ZonedDateTime modified) {
this.modified = modified;
return this;
}
public Builder chunks(long chunks) {
this.chunks = chunks;
return this;
}
public Builder digest(String digest) {
this.digest = digest;
return this;
}
public Builder deleted(boolean deleted) {
this.deleted = deleted;
return this;
}
public Builder description(String description) {
metaBuilder.description(description);
return this;
}
public Builder headers(Headers headers) {
metaBuilder.headers(headers);
return this;
}
public Builder options(ObjectMetaOptions objectMetaOptions) {
metaBuilder.options(objectMetaOptions);
return this;
}
public Builder chunkSize(int chunkSize) {
metaBuilder.chunkSize(chunkSize);
return this;
}
public Builder link(ObjectLink link) {
metaBuilder.link(link);
return this;
}
public Builder bucketLink(String bucket) {
metaBuilder.link(ObjectLink.bucket(bucket));
return this;
}
public Builder objectLink(String bucket, String objectName) {
metaBuilder.link(ObjectLink.object(bucket, objectName));
return this;
}
public ObjectInfo build() {
return new ObjectInfo(this);
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ObjectInfo info = (ObjectInfo) o;
if (size != info.size) return false;
if (chunks != info.chunks) return false;
if (deleted != info.deleted) return false;
if (!bucket.equals(info.bucket)) return false; // bucket never null
if (nuid != null ? !nuid.equals(info.nuid) : info.nuid != null) return false;
if (modified != null ? !modified.equals(info.modified) : info.modified != null) return false;
if (digest != null ? !digest.equals(info.digest) : info.digest != null) return false;
return objectMeta.equals(info.objectMeta);
}
@Override
public int hashCode() {
int result = bucket.hashCode(); // bucket never null
result = 31 * result + (nuid != null ? nuid.hashCode() : 0);
result = 31 * result + (int) (size ^ (size >>> 32));
result = 31 * result + (modified != null ? modified.hashCode() : 0);
result = 31 * result + (int) (chunks ^ (chunks >>> 32));
result = 31 * result + (digest != null ? digest.hashCode() : 0);
result = 31 * result + (deleted ? 1 : 0);
result = 31 * result + objectMeta.hashCode();
return result;
}
@Override
public String toString() {
return "ObjectInfo{" +
"bucket='" + bucket + '\'' +
", nuid='" + nuid + '\'' +
", size=" + size +
", modified=" + modified +
", chunks=" + chunks +
", digest='" + digest + '\'' +
", deleted=" + deleted +
", objectMeta=" + objectMeta +
'}';
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy