diff --git a/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java index c6fac7c4a986e18f9278b7a25c62ef6fac08f827..3640518229eb62922d8c606655c7b7268c9fa0fa 100644 --- a/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java +++ b/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java @@ -35,13 +35,6 @@ import java.util.*; */ @XmlJavaTypeAdapter( com.syncleus.dann.xml.XmlSerializableAdapter.class ) public abstract class AbstractAdjacencyGraph< -/* - PA, - N extends PA, - E extends Edge<? extends N,? extends Edge.Endpoint<? extends N, ? extends N>>, - NEP extends Graph.NodeEndpoint<? extends N,? extends N,? extends E>, - EEP extends Graph.EdgeEndpoint<? extends N,? extends E,? extends E> -*/ PA, N extends PA, E extends Edge<N,? extends Edge.Endpoint<N>>, diff --git a/src/main/java/com/syncleus/dann/graph/AssignableGraph.java b/src/main/java/com/syncleus/dann/graph/AssignableGraph.java index 962709385203eb4bd6d285a589469d0ff11a5204..98e7dad30ada9ebfdc719627a5197cb83dea9a08 100644 --- a/src/main/java/com/syncleus/dann/graph/AssignableGraph.java +++ b/src/main/java/com/syncleus/dann/graph/AssignableGraph.java @@ -18,7 +18,13 @@ ******************************************************************************/ package com.syncleus.dann.graph; -public interface AssignableGraph<N, E extends Edge<N>> extends Graph<N,E>, MutableEdge<Object> +public interface AssignableGraph< + PA, + N extends PA, + E extends Edge<N,? extends Edge.Endpoint<N>>, + NEP extends AssignableGraph.NodeEndpoint<N, E>, + EEP extends AssignableGraph.EdgeEndpoint<N, E> + > extends Graph<PA,N,E,NEP,EEP>, MutableEdge<PA,Graph.Endpoint<N,E,PA>> //public interface AssignableGraph<P extends Edge<N>, N extends P, E extends P> extends Graph<N,E>, Edge<P>, MutableEdge<P> //public interface AssignableGraph<P extends AssignableGraph.Foo, N extends P, E extends Edge<N> & AssignableGraph.Foo> extends Graph<N,E>, Edge<P>, MutableEdge<P> { @@ -38,12 +44,20 @@ public interface AssignableGraph<N, E extends Edge<N>> extends Graph<N,E>, Mutab */ - interface NodeEndpoint<ON, MN extends ON, OE extends Edge<? extends ON>> extends Graph.NodeEndpoint<MN,OE>, MutableEdge.Endpoint<Object, MN> + interface NodeEndpoint< + ON, + OE extends Edge<ON,? extends Edge.Endpoint<ON>> + > extends Graph.NodeEndpoint<ON,OE>, MutableEdge.Endpoint<ON> { + void setTarget(ON newTarget) throws InvalidGraphException; }; - interface EdgeEndpoint<ON, OE extends Edge<? extends ON>, ME extends OE> extends Graph.EdgeEndpoint<OE, ME>, MutableEdge.Endpoint<Object, ME> + interface EdgeEndpoint< + ON, + OE extends Edge<ON,? extends Edge.Endpoint<ON>> + > extends Graph.EdgeEndpoint<ON,OE>, MutableEdge.Endpoint<OE> { + void setTarget(OE newTarget) throws InvalidGraphException; }; /* diff --git a/src/main/java/com/syncleus/dann/graph/HyperEdge.java b/src/main/java/com/syncleus/dann/graph/HyperEdge.java index 419d72b691b9e17378592f34b5cbac1266044814..9bf419301f2c0f25411834bce881b383ce32e068 100644 --- a/src/main/java/com/syncleus/dann/graph/HyperEdge.java +++ b/src/main/java/com/syncleus/dann/graph/HyperEdge.java @@ -18,7 +18,10 @@ ******************************************************************************/ package com.syncleus.dann.graph; -public interface HyperEdge<N> extends Edge<N> +public interface HyperEdge< + N, + EP extends Edge.Endpoint<N> + > extends Edge<N, EP> { interface Endpoint<NN, EN extends NN> extends Edge.Endpoint<NN, EN> { diff --git a/src/main/java/com/syncleus/dann/graph/MutableAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graph/MutableAdjacencyGraph.java index 134e2113a4ed9764023da1ed3892037b9ea7583b..2a5b4df55d6ac0c63d33e858c5f93b000f78d784 100644 --- a/src/main/java/com/syncleus/dann/graph/MutableAdjacencyGraph.java +++ b/src/main/java/com/syncleus/dann/graph/MutableAdjacencyGraph.java @@ -20,114 +20,96 @@ package com.syncleus.dann.graph; import java.util.*; -public class MutableAdjacencyGraph<N, E extends Edge<N>> extends AbstractAdjacencyGraph<N, E> implements MutableGraph<N, E> +public class MutableAdjacencyGraph< + PA, + N extends PA, + E extends Edge<N,? extends Edge.Endpoint<N>>, + NEP extends MutableGraph.NodeEndpoint<N, E>, + EEP extends MutableGraph.EdgeEndpoint<N, E> + > extends AbstractAdjacencyGraph<PA, N, E, NEP, EEP> implements MutableGraph<PA, N, E, NEP, EEP> { private static final long serialVersionUID = -4613327727609060678L; -/* - public MutableAdjacencyGraph() - { - super(); - } - - public MutableAdjacencyGraph(final Graph<N, E> copyGraph) - { - super(copyGraph); - } - - public MutableAdjacencyGraph(final Set<N> nodes, final Set<E> edges) - { - super(nodes, edges); - } - @Override - public boolean add(final E newEdge) + protected Set<EdgeEndpoint<N, E>> getAdjacentEdgeEndPoint(Graph.NodeEndpoint<N, E> nodeEndPoint) { - return super.add(newEdge); - } - - @Override - public boolean add(final N newNode) - { - return super.add(newNode); + return null; //To change body of implemented methods use File | Settings | File Templates. } @Override - public boolean remove(final E edgeToRemove) + public NEP joinNode(N node) throws InvalidGraphException { - return super.remove(edgeToRemove); + return null; //To change body of implemented methods use File | Settings | File Templates. } @Override - public boolean remove(final N nodeToRemove) + public Map<N, NEP> joinNodes(Set<? extends N> nodes) throws InvalidGraphException { - return super.remove(nodeToRemove); + return null; //To change body of implemented methods use File | Settings | File Templates. } @Override - public boolean clear() + public void leaveNode(NEP endPoint) throws InvalidGraphException { - return super.clear(); + //To change body of implemented methods use File | Settings | File Templates. } @Override - protected MutableAdjacencyGraph<N, E> clone() + public void leaveNodes(Set<NEP> endPoint) throws InvalidGraphException { - return (MutableAdjacencyGraph<N, E>) super.clone(); + //To change body of implemented methods use File | Settings | File Templates. } -*/ - final private Map<NodeEndpoint<N,E>,EdgeEndpoint<E, ? extends E>> nodeAdjacency = new HashMap<NodeEndpoint<N, E>, EdgeEndpoint<E, ? extends E>>(); @Override - protected Set<EdgeEndpoint<E, ? extends E>> getAdjacentEdgeEndPoint(Graph.NodeEndpoint<? extends N, E> nodeEndPoint) + public EEP joinEdge(E edge) throws InvalidGraphException { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override - public Set<? extends EdgeEndpoint<E, ? extends E>> getEdgeEndpoints() + public Map<N, EEP> joinEdges(Set<? extends E> edges) throws InvalidGraphException { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override - public Set<? extends NodeEndpoint<? extends N, E>> getNodeEndpoints() + public void leaveEdge(EEP endPoint) throws InvalidGraphException { - return null; //To change body of implemented methods use File | Settings | File Templates. + //To change body of implemented methods use File | Settings | File Templates. } @Override - public MutableHyperEdge.Endpoint<Object, Object> join(Object node) throws InvalidEdgeException + public void leaveEdges(Set<EEP> endPoint) throws InvalidGraphException { - return null; //To change body of implemented methods use File | Settings | File Templates. + //To change body of implemented methods use File | Settings | File Templates. } @Override - public Map<Object, MutableHyperEdge.Endpoint<Object, Object>> join(Set<Object> nodes) throws InvalidEdgeException + public void clear() throws InvalidGraphException { - return null; //To change body of implemented methods use File | Settings | File Templates. + //To change body of implemented methods use File | Settings | File Templates. } @Override - public void leave(MutableHyperEdge.Endpoint<Object, Object> endPoint) throws InvalidEdgeException + public void clearEdges() throws InvalidGraphException { //To change body of implemented methods use File | Settings | File Templates. } @Override - public void leave(Set<MutableHyperEdge.Endpoint<Object, Object>> endPoint) throws InvalidEdgeException + public Map<PA, ? extends Graph.Endpoint<N, E, PA>> reconfigure(Set<? extends N> addNodes, Set<? extends E> addEdges, Set<? extends Graph.Endpoint<N, E, ? extends PA>> disconnectEndPoints) throws InvalidGraphException { - //To change body of implemented methods use File | Settings | File Templates. + return null; //To change body of implemented methods use File | Settings | File Templates. } @Override - public void clear() throws InvalidEdgeException + public Set<EEP> getEdgeEndpoints() { - //To change body of implemented methods use File | Settings | File Templates. + return null; //To change body of implemented methods use File | Settings | File Templates. } @Override - public Map<Object, MutableHyperEdge.Endpoint<Object, Object>> reconfigure(Set<Object> connectNodes, Set<MutableHyperEdge.Endpoint<Object, Object>> disconnectEndPoints) throws InvalidEdgeException + public Set<NEP> getNodeEndpoints() { return null; //To change body of implemented methods use File | Settings | File Templates. } diff --git a/src/main/java/com/syncleus/dann/graph/MutableEdge.java b/src/main/java/com/syncleus/dann/graph/MutableEdge.java index e8ba19ef2e50795999927e68443f6cb4514eaa95..628d3db3064f6be6dad3566e8403888b0f97c0c6 100644 --- a/src/main/java/com/syncleus/dann/graph/MutableEdge.java +++ b/src/main/java/com/syncleus/dann/graph/MutableEdge.java @@ -18,10 +18,13 @@ ******************************************************************************/ package com.syncleus.dann.graph; -public interface MutableEdge<N> extends Edge<N> +public interface MutableEdge< + T, + EP extends Edge.Endpoint<T> + > extends Edge<T, EP> { - interface Endpoint<NN, EN extends NN> extends Edge.Endpoint<NN, EN> + interface Endpoint<T> extends Edge.Endpoint<T> { - void setTarget(EN newTarget) throws InvalidEdgeException; + void setTarget(T newTarget) throws InvalidEdgeException; }; } diff --git a/src/main/java/com/syncleus/dann/graph/MutableGraph.java b/src/main/java/com/syncleus/dann/graph/MutableGraph.java index f8a166bc901976e798cbffefd824e9dc30f3a5b5..8041c8333913bafbb73bb351d021dcf6abc7ac05 100644 --- a/src/main/java/com/syncleus/dann/graph/MutableGraph.java +++ b/src/main/java/com/syncleus/dann/graph/MutableGraph.java @@ -21,27 +21,40 @@ package com.syncleus.dann.graph; import java.util.Map; import java.util.Set; -public interface MutableGraph<N, E extends Edge<N>> extends AssignableGraph<N,E> +public interface MutableGraph< + PA, + N extends PA, + E extends Edge<N,? extends Edge.Endpoint<N>>, + NEP extends MutableGraph.NodeEndpoint<N, E>, + EEP extends MutableGraph.EdgeEndpoint<N, E> + > extends AssignableGraph<PA,N,E,NEP,EEP> { - interface NodeEndpoint<ON, MN extends ON, OE extends Edge<? extends ON>> extends AssignableGraph.NodeEndpoint<ON,MN,OE>, MutableHyperEdge.Endpoint<Object, MN> + interface NodeEndpoint< + ON, + OE extends Edge<ON,? extends Edge.Endpoint<ON>> + > extends AssignableGraph.NodeEndpoint<ON,OE> { }; - interface EdgeEndpoint<ON, OE extends Edge<? extends ON>, ME extends OE> extends AssignableGraph.EdgeEndpoint<ON,OE,ME>, MutableHyperEdge.Endpoint<Object, ME> + interface EdgeEndpoint< + ON, + OE extends Edge<ON,? extends Edge.Endpoint<ON>> + > extends AssignableGraph.EdgeEndpoint<ON,OE> { }; - NodeEndpoint<N,? extends N,E> join(final N node) throws InvalidEdgeException; - Map<N, ? extends NodeEndpoint<N, ? extends N,E>> joinNodes(final Set<? extends N> nodes) throws InvalidEdgeException; - void leave(final NodeEndpoint<? extends N, ? extends N,? extends E> endPoint) throws InvalidEdgeException; - void leaveNodes(final Set<? extends NodeEndpoint<? extends N, ? extends N,? extends E>> endPoint) throws InvalidEdgeException; + NEP joinNode(N node) throws InvalidGraphException; + Map<N, NEP> joinNodes(Set<? extends N> nodes) throws InvalidGraphException; + void leaveNode(NEP endPoint) throws InvalidGraphException; + void leaveNodes(Set<NEP> endPoint) throws InvalidGraphException; - EdgeEndpoint<N, E, ? extends E> join(final E edge) throws InvalidEdgeException; - Map<N, ? extends EdgeEndpoint<N, E, ? extends E>> joinEdges(final Set<? extends E> edges) throws InvalidEdgeException; - void leave(final EdgeEndpoint<? extends N, ? extends E, ? extends E> endPoint) throws InvalidEdgeException; - void leaveEdges(final Set<? extends EdgeEndpoint<? extends N, ? extends E, ? extends E>> endPoint) throws InvalidEdgeException; + EEP joinEdge(E edge) throws InvalidGraphException; + Map<N, EEP> joinEdges(Set<? extends E> edges) throws InvalidGraphException; + void leaveEdge(EEP endPoint) throws InvalidGraphException; + void leaveEdges(Set<EEP> endPoint) throws InvalidGraphException; - void clear() throws InvalidEdgeException; + void clear() throws InvalidGraphException; + void clearEdges() throws InvalidGraphException; - Map<? extends Object, ? extends Graph.Endpoint<? extends N, ? extends N>> reconfigure(final Set<? extends N> addNodes, final Set<? extends E> addEdges, final Set<? extends Graph.Endpoint<? extends N, ? extends N>> disconnectEndPoints) throws InvalidEdgeException; + Map<PA, ? extends Graph.Endpoint<N,E,PA>> reconfigure(Set<? extends N> addNodes, Set<? extends E> addEdges, final Set<? extends Graph.Endpoint<N,E,? extends PA>> disconnectEndPoints) throws InvalidGraphException; } diff --git a/src/main/java/com/syncleus/dann/graph/MutableHyperEdge.java b/src/main/java/com/syncleus/dann/graph/MutableHyperEdge.java index 620f81bfa3db8ab50d90b4584eadb8d921f7f7ee..3ba41f83f6d79d4e8bd9311568cee253e3fc826d 100644 --- a/src/main/java/com/syncleus/dann/graph/MutableHyperEdge.java +++ b/src/main/java/com/syncleus/dann/graph/MutableHyperEdge.java @@ -20,16 +20,19 @@ package com.syncleus.dann.graph; import java.util.*; -public interface MutableHyperEdge<N> extends HyperEdge<N>, MutableEdge<N> +public interface MutableHyperEdge< + T, + EP extends Edge.Endpoint<T> + > extends HyperEdge<T,EP>, MutableEdge<T,EP> { interface Endpoint<NN, EN extends NN> extends HyperEdge.Endpoint<NN, EN>, MutableEdge.Endpoint<NN, EN> { }; - Endpoint<N, N> join(final N node) throws InvalidEdgeException; - Map<N,Endpoint<N, N>> join(final Set<N> nodes) throws InvalidEdgeException; - void leave(final Endpoint<N, N> endPoint) throws InvalidEdgeException; - void leave(final Set<Endpoint<N, N>> endPoint) throws InvalidEdgeException; + Endpoint<T, T> join(final T node) throws InvalidEdgeException; + Map<T,Endpoint<T, T>> join(final Set<T> nodes) throws InvalidEdgeException; + void leave(final Endpoint<T, T> endPoint) throws InvalidEdgeException; + void leave(final Set<Endpoint<T, T>> endPoint) throws InvalidEdgeException; void clear() throws InvalidEdgeException; - Map<N,Endpoint<N, N>> reconfigure(final Set<N> connectNodes, final Set<Endpoint<N, N>> disconnectEndPoints) throws InvalidEdgeException; + Map<T,Endpoint<T, T>> reconfigure(final Set<T> connectNodes, final Set<Endpoint<T, T>> disconnectEndPoints) throws InvalidEdgeException; }