
com.github.moaxcp.graphs.greenrobot.AbstractEventGraph Maven / Gradle / Ivy
package com.github.moaxcp.graphs.greenrobot;
import static java.util.Objects.requireNonNull;
import com.github.moaxcp.graphs.*;
import com.github.moaxcp.graphs.events.*;
import java.util.Map;
import org.greenrobot.eventbus.EventBus;
public abstract class AbstractEventGraph extends AbstractGraph implements EventGraph {
public class EventEdge extends SimpleEdge {
protected EventEdge(ID from, ID to, Map inherited) {
super(from, to, inherited);
}
@Override
public void setId(ID id) {
var oldId = getId();
if(id == null && !oldId.isPresent()) {
return;
}
super.setId(id);
if(id == null) {
bus.post(new EdgeIdRemoved.Builder()
.graphId(AbstractEventGraph.this.getId().orElse(null))
.edgeId(oldId.orElse(null))
.from(getFrom())
.to(getTo())
.build());
return;
}
if(oldId.isPresent()) {
bus.post(new EdgeIdUpdated.Builder()
.graphId(AbstractEventGraph.this.getId().orElse(null))
.edgeId(id)
.oldEdgeId(oldId.orElse(null))
.from(getFrom())
.to(getTo())
.build());
} else {
bus.post(new EdgeIdAdded.Builder()
.graphId(AbstractEventGraph.this.getId().orElse(null))
.edgeId(id)
.from(getFrom())
.to(getTo())
.build());
}
}
@Override
public void setProperty(String name, Object value) {
var oldValue = getProperty(name);
super.setProperty(name, value);
if(oldValue.isPresent()) {
bus.post(new EdgePropertyUpdated.Builder()
.graphId(AbstractEventGraph.this.getId().orElse(null))
.edgeId(getId().orElse(null))
.from(getFrom())
.to(getTo())
.name(name)
.value(value)
.oldValue(oldValue.orElse(null))
.build());
} else {
bus.post(new EdgePropertyAdded.Builder()
.graphId(AbstractEventGraph.this.getId().orElse(null))
.edgeId(getId().orElse(null))
.from(getFrom())
.to(getTo())
.name(name)
.value(value)
.build());
}
}
@Override
public Edge removeProperty(String name) {
var value = getProperty(name);
var edge = super.removeProperty(name);
bus.post(new EdgePropertyRemoved.Builder()
.graphId(AbstractEventGraph.this.getId().orElse(null))
.edgeId(getId().orElse(null))
.from(getFrom())
.to(getTo())
.name(name)
.value(value)
.build());
return edge;
}
}
public class EventVertex extends SimpleVertex {
protected EventVertex(ID id, Map inherited) {
super(id, inherited);
}
@Override
public void setId(ID id) {
ID oldId = getId();
super.setId(id);
bus.post(new VertexIdUpdated.Builder()
.graphId(AbstractEventGraph.this.getId().orElse(null))
.oldVertexId(oldId)
.vertexId(id)
.build());
}
@Override
public void setProperty(String name, Object value) {
var oldValue = getProperty(name);
super.setProperty(name, value);
if(oldValue.isPresent()) {
bus.post(new VertexPropertyUpdated.Builder()
.graphId(AbstractEventGraph.this.getId().orElse(null))
.vertexId(getId())
.name(name)
.value(value)
.oldValue(oldValue.orElse(null))
.build());
} else {
bus.post(new VertexPropertyAdded.Builder()
.graphId(AbstractEventGraph.this.getId().orElse(null))
.vertexId(getId())
.name(name)
.value(value)
.build());
}
}
@Override
public Vertex removeProperty(String name) {
var value = getProperty(name);
var vertex = super.removeProperty(name);
bus.post(new VertexPropertyRemoved.Builder()
.graphId(AbstractEventGraph.this.getId().orElse(null))
.vertexId(getId())
.name(name)
.value(value)
.build());
return vertex;
}
}
private EventBus bus;
public AbstractEventGraph(EventBus bus) {
this.bus = requireNonNull(bus, "bus must not be null.");
}
public AbstractEventGraph(ID id, EventBus bus) {
super(id);
this.bus = requireNonNull(bus, "bus must not be null.");
}
public EventBus getBus() {
return bus;
}
@Override
public void setId(ID id) {
var oldId = getId();
super.setId(id);
if(id == null && !oldId.isPresent()) {
return;
}
if(id == null) {
bus.post(new GraphIdRemoved.Builder()
.graphId(oldId.orElse(null))
.build());
return;
}
if(oldId.isPresent()) {
bus.post(new GraphIdUpdated.Builder()
.graphId(id)
.oldGraphId(oldId.orElse(null))
.build());
} else {
bus.post(new GraphIdAdded.Builder()
.graphId(id)
.build());
}
}
@Override
public void setProperty(String name, Object value) {
var oldValue = getProperty(name);
super.setProperty(name, value);
if(oldValue.isPresent()) {
bus.post(new GraphPropertyUpdated.Builder()
.graphId(getId().orElse(null))
.name(name).value(value)
.oldValue(oldValue.orElse(null))
.build());
} else {
bus.post(new GraphPropertyAdded.Builder()
.graphId(getId().orElse(null))
.name(name)
.value(value)
.build());
}
}
@Override
public Graph removeProperty(String name) {
var value = getProperty(name);
super.removeProperty(name);
bus.post(new GraphPropertyRemoved.Builder()
.graphId(getId().orElse(null))
.name(name)
.value(value)
.build());
return this;
}
@Override
protected Vertex newVertex(ID id, Map inherited) {
return new EventVertex(id, inherited);
}
@Override
protected Edge newEdge(ID from, ID to, Map inherited) {
return new EventEdge(from, to, inherited);
}
@Override
protected Edge addEdge(ID from, ID to) {
var edge = super.addEdge(from, to);
bus.post(new EdgeCreated.Builder()
.graphId(getId().orElse(null))
.from(from)
.to(to)
.build());
return edge;
}
@Override
public void removeEdge(ID from, ID to) {
var optional = findEdge(from, to);
super.removeEdge(from, to);
optional.ifPresent(edge -> bus.post(
new EdgeRemoved.Builder()
.graphId(getId().orElse(null))
.edgeId(edge.getId().orElse(null))
.from(edge.getFrom())
.to(edge.getTo())
.build()));
}
@Override
protected Vertex addVertex(ID id) {
var vertex = super.addVertex(id);
bus.post(new VertexCreated.Builder()
.graphId(getId().orElse(null))
.vertexId(id)
.build());
return vertex;
}
@Override
public void removeVertex(ID id) {
var optional = findVertex(id);
super.removeVertex(id);
optional.ifPresent(vertex -> bus.post(new VertexRemoved.Builder()
.graphId(getId().orElse(null))
.vertexId(id)
.build()));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy