io.nats.client.api.ObjectMeta 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.
The newest version!
// 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.impl.Headers;
import io.nats.client.support.JsonSerializable;
import io.nats.client.support.JsonUtils;
import io.nats.client.support.JsonValue;
import io.nats.client.support.Validator;
import static io.nats.client.support.ApiConstants.*;
import static io.nats.client.support.JsonUtils.beginJson;
import static io.nats.client.support.JsonUtils.endJson;
import static io.nats.client.support.JsonValueUtils.*;
/**
* The ObjectMeta is Object Meta is high level information about an object
*/
public class ObjectMeta implements JsonSerializable {
private final String objectName;
private final String description;
private final Headers headers;
private final ObjectMetaOptions objectMetaOptions;
private ObjectMeta(Builder b) {
objectName = b.objectName;
description = b.description;
headers = b.headers;
objectMetaOptions = b.metaOptionsBuilder.build();
}
ObjectMeta(JsonValue vObjectMeta) {
objectName = readString(vObjectMeta, NAME);
description = readString(vObjectMeta, DESCRIPTION);
headers = new Headers();
JsonValue hJv = readObject(vObjectMeta, HEADERS);
for (String key : hJv.map.keySet()) {
headers.put(key, readStringList(hJv, key));
}
objectMetaOptions = new ObjectMetaOptions(readObject(vObjectMeta, OPTIONS));
}
@Override
public String toJson() {
StringBuilder sb = beginJson();
embedJson(sb);
return endJson(sb).toString();
}
void embedJson(StringBuilder sb) {
JsonUtils.addField(sb, NAME, objectName);
JsonUtils.addField(sb, DESCRIPTION, description);
JsonUtils.addField(sb, HEADERS, headers);
// avoid adding an empty child to the json because JsonUtils.addField
// only checks versus the object being null, which it is never
if (objectMetaOptions.hasData()) {
JsonUtils.addField(sb, OPTIONS, objectMetaOptions);
}
}
public String getObjectName() {
return objectName;
}
public String getDescription() {
return description;
}
public Headers getHeaders() {
return headers;
}
public ObjectMetaOptions getObjectMetaOptions() {
return objectMetaOptions;
}
public static Builder builder(String objectName) {
return new Builder(objectName);
}
public static Builder builder(ObjectMeta om) {
return new Builder(om);
}
public static ObjectMeta objectName(String objectName) {
return new Builder(objectName).build();
}
public static class Builder {
String objectName;
String description;
Headers headers;
ObjectMetaOptions.Builder metaOptionsBuilder;
public Builder(String objectName) {
headers = new Headers();
metaOptionsBuilder = ObjectMetaOptions.builder();
objectName(objectName);
}
public Builder(ObjectMeta om) {
objectName = om.objectName;
description = om.description;
headers = om.headers;
metaOptionsBuilder = ObjectMetaOptions.builder(om.objectMetaOptions);
}
public Builder objectName(String name) {
this.objectName = Validator.validateNotNull(name, "Object Name");
return this;
}
public Builder description(String description) {
this.description = description;
return this;
}
public Builder headers(Headers headers) {
if (headers == null) {
this.headers.clear();
}
else {
this.headers = headers;
}
return this;
}
public Builder options(ObjectMetaOptions objectMetaOptions) {
metaOptionsBuilder = ObjectMetaOptions.builder(objectMetaOptions);
return this;
}
public Builder chunkSize(int chunkSize) {
metaOptionsBuilder.chunkSize(chunkSize);
return this;
}
public Builder link(ObjectLink link) {
metaOptionsBuilder.link(link);
return this;
}
public ObjectMeta build() {
return new ObjectMeta(this);
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ObjectMeta that = (ObjectMeta) o;
if (!objectName.equals(that.objectName)) return false;
if (description != null ? !description.equals(that.description) : that.description != null) return false;
if (!headers.equals(that.headers)) return false;
return objectMetaOptions.equals(that.objectMetaOptions);
}
@Override
public int hashCode() {
int result = objectName.hashCode();
result = 31 * result + (description != null ? description.hashCode() : 0);
result = 31 * result + headers.hashCode();
result = 31 * result + objectMetaOptions.hashCode();
return result;
}
@Override
public String toString() {
return "ObjectMeta{" +
"objectName='" + objectName + '\'' +
", description='" + description + '\'' +
", headers?" + headers.size() +
", objectMetaOptions=" + objectMetaOptions +
'}';
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy