package io.lumify.web.clientapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.JsonNode;
import io.lumify.web.clientapi.model.util.ClientApiConverter;
import java.util.ArrayList;
import java.util.List;
public class ClientApiWorkspaceDiff implements ClientApiObject {
private List<Item> diffs = new ArrayList<>();
public void addAll(List<Item> diffs) {
this.diffs.addAll(diffs);
}
public List<Item> getDiffs() {
return diffs;
}
@Override
public String toString() {
return ClientApiConverter.clientApiToString(this);
}
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = VertexItem.class, name = "VertexDiffItem"),
@JsonSubTypes.Type(value = EdgeItem.class, name = "EdgeDiffItem"),
@JsonSubTypes.Type(value = PropertyItem.class, name = "PropertyDiffItem")
})
public abstract static class Item {
private final String type;
private final SandboxStatus sandboxStatus;
private boolean deleted;
protected Item(String type, SandboxStatus sandboxStatus, boolean deleted) {
this.type = type;
this.sandboxStatus = sandboxStatus;
this.deleted = deleted;
}
public String getType() {
return type;
}
public SandboxStatus getSandboxStatus() {
return sandboxStatus;
}
@Override
public String toString() {
return ClientApiConverter.clientApiToString(this);
}
public boolean isDeleted() {
return deleted;
}
}
public static class EdgeItem extends Item {
private String edgeId;
private String label;
private String outVertexId;
private String inVertexId;
private JsonNode visibilityJson;
public EdgeItem() {
super("EdgeDiffItem", SandboxStatus.PRIVATE, false);
}
public EdgeItem(String edgeId, String label, String outVertexId, String inVertexId, JsonNode visibilityJson, SandboxStatus sandboxStatus, boolean deleted) {
super("EdgeDiffItem", sandboxStatus, deleted);
this.edgeId = edgeId;
this.label = label;
this.outVertexId = outVertexId;
this.inVertexId = inVertexId;
this.visibilityJson = visibilityJson;
}
public String getEdgeId() {
return edgeId;
}
public String getLabel() {
return label;
}
public String getOutVertexId() {
return outVertexId;
}
public String getInVertexId() {
return inVertexId;
}
public JsonNode getVisibilityJson() {
return visibilityJson;
}
}
public static class VertexItem extends Item {
private String vertexId;
private JsonNode visibilityJson;
private boolean visible;
private String title;
private String conceptType;
public VertexItem() {
super("VertexDiffItem", SandboxStatus.PRIVATE, false);
}
public VertexItem(
String vertexId,
String title,
String conceptType,
JsonNode visibilityJson,
SandboxStatus sandboxStatus,
boolean deleted,
boolean visible
) {
super("VertexDiffItem", sandboxStatus, deleted);
this.vertexId = vertexId;
this.visibilityJson = visibilityJson;
this.visible = visible;
this.title = title;
this.conceptType = conceptType;
}
public String getVertexId() {
return vertexId;
}
public JsonNode getVisibilityJson() {
return visibilityJson;
}
public boolean isVisible() {
return visible;
}
public String getTitle() {
return title;
}
public String getConceptType() {
return conceptType;
}
}
public static class PropertyItem extends Item {
private String elementType;
private String elementId;
private String name;
private String key;
private String visibilityString;
@JsonProperty("old")
private JsonNode oldData;
@JsonProperty("new")
private JsonNode newData;
public PropertyItem() {
super("PropertyDiffItem", SandboxStatus.PRIVATE, false);
}
public PropertyItem(String elementType, String elementId, String name, String key, JsonNode oldData, JsonNode newData, SandboxStatus sandboxStatus, boolean deleted, String visibilityString) {
super("PropertyDiffItem", sandboxStatus, deleted);
this.elementType = elementType;
this.elementId = elementId;
this.name = name;
this.key = key;
this.oldData = oldData;
this.newData = newData;
this.visibilityString = visibilityString;
}
public String getElementType() {
return elementType;
}
public String getElementId() {
return elementId;
}
public String getName() {
return name;
}
public String getKey() {
return key;
}
public JsonNode getOldData() {
return oldData;
}
public JsonNode getNewData() {
return newData;
}
public String getVisibilityString() {
return visibilityString;
}
}
}