![JAR search and dependency download from the Maven repository](/logo.png)
no.arktekk.siren.Entity Maven / Gradle / Ivy
package no.arktekk.siren;
import io.vavr.control.Option;
import net.hamnaberg.json.Json;
import net.hamnaberg.json.codec.DecodeJson;
import net.hamnaberg.json.codec.DecodeResult;
import net.hamnaberg.json.codec.EncodeJson;
import static io.vavr.control.Option.none;
public final class Entity implements JsonSerializable {
public final Option classes;
public final Option properties;
public final Option entities;
public final Option actions;
public final Option links;
public final Option title;
public Entity(Option classes, Option properties, Option entities, Option actions, Option links, Option title) {
this.classes = classes;
this.properties = properties;
this.entities = entities;
this.actions = actions;
this.links = links;
this.title = title;
}
public static Entity of() {
return new Entity(none(), none(), none(), none(), none(), none());
}
public Entity with(Classes classes) {
return new Entity(Option.of(classes), properties, entities, actions, links, title);
}
public Entity with(Json.JObject properties) {
return new Entity(classes, Option.of(properties), entities, actions, links, title);
}
public Entity with(Entities entities) {
return new Entity(classes, properties, Option.of(entities), actions, links, title);
}
public Entity with(Actions actions) {
return new Entity(classes, properties, entities, Option.of(actions), links, title);
}
public Entity with(Links links) {
return new Entity(classes, properties, entities, actions, Option.of(links), title);
}
public Entity with(String title) {
return new Entity(classes, properties, entities, actions, links, Option.of(title));
}
public DecodeResult decodeProperties(DecodeJson decoder) {
return decoder.fromJson(properties.getOrElse(Json.jEmptyObject()));
}
public Entity encodeProperties(EncodeJson encoder, A value) {
return with(encoder.toJson(value).asJsonObjectOrEmpty());
}
public SubEntity.EmbeddedRepresentation toEmbedded(Rel rel) {
return new SubEntity.EmbeddedRepresentation(rel, this);
}
public Option getLinkByRel(Rel rel) {
return links.flatMap(links -> links.getLinkByRel(rel));
}
public Option getLinkByRelIncludes(Rel rel) {
return links.flatMap(links -> links.getLinkByRelIncludes(rel));
}
public Option getActionByName(String name) {
return actions.flatMap(actions -> actions.getActionByName(name));
}
public Option getActionByClasses(Classes classes) {
return actions.flatMap(actions -> actions.getActionByClasses(classes));
}
public Option getActionByClassesIncludes(Classes classes) {
return actions.flatMap(actions -> actions.getActionByClassesIncludes(classes));
}
public Option getEntityByRel(Rel rel) {
return entities.flatMap(entities -> entities.getEntityByRel(rel));
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Entity entity = (Entity) o;
if (!classes.equals(entity.classes)) return false;
if (!properties.equals(entity.properties)) return false;
if (!entities.equals(entity.entities)) return false;
if (!actions.equals(entity.actions)) return false;
if (!links.equals(entity.links)) return false;
return title.equals(entity.title);
}
@Override
public int hashCode() {
int result = classes.hashCode();
result = 31 * result + properties.hashCode();
result = 31 * result + entities.hashCode();
result = 31 * result + actions.hashCode();
result = 31 * result + links.hashCode();
result = 31 * result + title.hashCode();
return result;
}
public Option getClasses() {
return classes;
}
public Option getProperties() {
return properties;
}
public Json.JObject getPropertiesOrEmpty() {
return properties.getOrElse(Json.jEmptyObject());
}
public Option getEntities() {
return entities;
}
public Entities getEntitiesOrEmpty() {
return entities.getOrElse(Entities.empty());
}
public Option getActions() {
return actions;
}
public Actions getActionsOrEmpty() {
return actions.getOrElse(Actions.empty());
}
public Option getLinks() {
return links;
}
public Links getLinksOrEmpty() {
return links.getOrElse(Links.empty());
}
public Option getTitle() {
return title;
}
public T toJson(JsonSerializer serializer) {
return serializer.serialize(this);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy