Skip to content
Snippets Groups Projects
Commit 201fcef1 authored by Jeffrey Phillips Freeman's avatar Jeffrey Phillips Freeman :boom:
Browse files

Merge branch 'xstream' into endpoints

Conflicts:
	src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java
	src/main/java/com/syncleus/dann/graph/AbstractBidirectedEdge.java
	src/main/java/com/syncleus/dann/graph/AbstractTraversableCloud.java
	src/main/java/com/syncleus/dann/graph/Graph.java
	src/main/java/com/syncleus/dann/graph/ImmutableAdjacencyGraph.java
	src/main/java/com/syncleus/dann/graph/TraversableCloud.java
	src/main/java/com/syncleus/dann/graphicalmodel/AbstractGraphicalModelAdjacencyGraph.java

Change-Id: Ibeaa17c591a46dbce29e3b29f8803e1461398a11
parents b87b9bc9 1cc1dad4
No related branches found
No related tags found
No related merge requests found
Showing
with 51 additions and 883 deletions
...@@ -168,39 +168,6 @@ ...@@ -168,39 +168,6 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.7.4</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<extension>true</extension>
<args>
<arg>-Xequals</arg>
<arg>-XhashCode</arg>
<arg>-Xannotate</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.6.0</version>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>0.6.0</version>
</plugin>
</plugins>
</configuration>
</plugin>
</plugins> </plugins>
<resources> <resources>
...@@ -271,13 +238,7 @@ ...@@ -271,13 +238,7 @@
<dependency> <dependency>
<groupId>org.freehep</groupId> <groupId>org.freehep</groupId>
<artifactId>freehep-java3d</artifactId> <artifactId>freehep-java3d</artifactId>
<version>2.0-SNAPSHOT</version> <version>2.0</version>
</dependency>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.6.0</version>
</dependency> </dependency>
<dependency> <dependency>
...@@ -285,9 +246,16 @@ ...@@ -285,9 +246,16 @@
<artifactId>vecmath</artifactId> <artifactId>vecmath</artifactId>
<version>1.3.1</version> <version>1.3.1</version>
</dependency> </dependency>
</dependencies> <dependency>
<groupId>xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
<repositories> <repositories>
<repository> <repository>
......
...@@ -27,13 +27,7 @@ import java.util.Map; ...@@ -27,13 +27,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import com.syncleus.dann.UnexpectedDannError; import com.syncleus.dann.UnexpectedDannError;
import com.syncleus.dann.graph.context.ContextGraphElement; import com.syncleus.dann.graph.context.ContextGraphElement;
import com.syncleus.dann.graph.xml.*;
import com.syncleus.dann.xml.NameXml;
import com.syncleus.dann.xml.NamedValueXml;
import com.syncleus.dann.xml.Namer;
import com.syncleus.dann.xml.XmlSerializable;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/** /**
* An AbstractAdjacencyGraph is a Graph implemented using adjacency lists. * An AbstractAdjacencyGraph is a Graph implemented using adjacency lists.
...@@ -42,7 +36,6 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; ...@@ -42,7 +36,6 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
* @param <N> The node type * @param <N> The node type
* @param <E> The type of edge for the given node type * @param <E> The type of edge for the given node type
*/ */
@XmlJavaTypeAdapter( com.syncleus.dann.xml.XmlSerializableAdapter.class )
public abstract class AbstractAdjacencyGraph<N, E extends TraversableCloud<N>> implements Graph<N, E> public abstract class AbstractAdjacencyGraph<N, E extends TraversableCloud<N>> implements Graph<N, E>
{ {
private static final Logger LOGGER = Logger.getLogger(AbstractAdjacencyGraph.class); private static final Logger LOGGER = Logger.getLogger(AbstractAdjacencyGraph.class);
...@@ -373,96 +366,4 @@ public abstract class AbstractAdjacencyGraph<N, E extends TraversableCloud<N>> i ...@@ -373,96 +366,4 @@ public abstract class AbstractAdjacencyGraph<N, E extends TraversableCloud<N>> i
} }
} }
/**
* Converts the current AbstractAdjacencyGraph to a GraphXML.
* @return The GraphXML representation of this AbstractAdjacencyGraph
*/
@Override
public GraphXml toXml()
{
final GraphElementXml xml = new GraphElementXml();
final Namer<Object> namer = new Namer<Object>();
xml.setNodeInstances(new GraphElementXml.NodeInstances());
for(N node : this.adjacentEdges.keySet())
{
final String nodeName = namer.getNameOrCreate(node);
final Object nodeXml;
if(node instanceof XmlSerializable)
nodeXml = ((XmlSerializable)node).toXml(namer);
else
// if the object is not XmlSerializable lets try to just
// serialize it as a regular JAXB object
nodeXml = node;
final NamedValueXml encapsulation = new NamedValueXml();
encapsulation.setName(nodeName);
encapsulation.setValue(nodeXml);
xml.getNodeInstances().getNodes().add(encapsulation);
}
this.toXml(xml, namer);
return xml;
}
/**
* Converts a given Namer to its GraphXML representation.
* @param namer The namer to convert
* @return The GraphXML representation of this namer
*/
@Override
public GraphXml toXml(final Namer<Object> namer)
{
if(namer == null)
throw new IllegalArgumentException("namer can not be null");
final GraphXml xml = new GraphXml();
this.toXml(xml, namer);
return xml;
}
/**
* Adds a current Namer to the given GraphXML object.
* @param jaxbObject The graph to add the object to
* @param namer THe namer to add to the GraphXML
*/
@Override
public void toXml(final GraphXml jaxbObject, final Namer<Object> namer)
{
if(namer == null)
throw new IllegalArgumentException("nodeNames can not be null");
if(jaxbObject == null)
throw new IllegalArgumentException("jaxbObject can not be null");
for(N node : this.adjacentEdges.keySet())
{
final String nodeName = namer.getNameOrCreate(node);
final Object nodeXml;
if(node instanceof XmlSerializable)
nodeXml = ((XmlSerializable)node).toXml(namer);
else
// if the object is not XmlSerializable lets try to just
// serialize it as a regular JAXB object
nodeXml = node;
final NameXml encapsulation = new NameXml();
encapsulation.setName(nodeName);
if( jaxbObject.getNodes() == null )
jaxbObject.setNodes(new GraphXml.Nodes());
jaxbObject.getNodes().getNodes().add(encapsulation);
}
for(E edge : this.edges)
{
final EdgeXml edgeXml = edge.toXml(namer);
if( jaxbObject.getEdges() == null )
jaxbObject.setEdges(new GraphXml.Edges());
jaxbObject.getEdges().getEdges().add(edgeXml);
}
}
} }
...@@ -18,12 +18,8 @@ ...@@ -18,12 +18,8 @@
******************************************************************************/ ******************************************************************************/
package com.syncleus.dann.graph; package com.syncleus.dann.graph;
import java.util.*; import java.util.HashSet;
import java.util.Set;
import com.syncleus.dann.graph.xml.*;
import com.syncleus.dann.xml.NamedValueXml;
import com.syncleus.dann.xml.Namer;
import com.syncleus.dann.xml.XmlSerializable;
public abstract class AbstractBidirectedEdge<E extends BidirectedEdge.Endpoint<?>> extends AbstractTraversableCloud<E> implements BidirectedEdge<E> public abstract class AbstractBidirectedEdge<E extends BidirectedEdge.Endpoint<?>> extends AbstractTraversableCloud<E> implements BidirectedEdge<E>
{ {
...@@ -182,70 +178,4 @@ public abstract class AbstractBidirectedEdge<E extends BidirectedEdge.Endpoint<? ...@@ -182,70 +178,4 @@ public abstract class AbstractBidirectedEdge<E extends BidirectedEdge.Endpoint<?
return ""; return "";
} }
} }
@Override
public BidirectedEdgeXml toXml()
{
final Namer namer = new Namer();
final BidirectedEdgeElementXml xml = new BidirectedEdgeElementXml();
xml.setNodeInstances(new BidirectedEdgeElementXml.NodeInstances());
final Set<Object> writtenNodes = new HashSet<Object>();
for (E endpoint : this.getEndpoints())
{
final Object node = endpoint.getTarget();
if (writtenNodes.add(node))
{
final NamedValueXml named = new NamedValueXml();
named.setName(namer.getNameOrCreate(node));
if (node instanceof XmlSerializable)
{
named.setValue(((XmlSerializable) node).toXml(namer));
}
else
{
named.setValue(node);
}
xml.getNodeInstances().getNodes().add(named);
}
}
return xml;
}
@Override
public BidirectedEdgeXml toXml(final Namer<Object> nodeNames)
{
if (nodeNames == null)
{
throw new IllegalArgumentException("nodeNames can not be null");
}
final BidirectedEdgeXml xml = new BidirectedEdgeXml();
this.toXml(xml, nodeNames);
return xml;
}
@Override
public void toXml(final EdgeXml jaxbObject, final Namer<Object> nodeNames)
{
if (nodeNames == null)
{
throw new IllegalArgumentException("nodeNames can not be null");
}
if (jaxbObject == null)
{
throw new IllegalArgumentException("jaxbObject can not be null");
}
super.toXml(jaxbObject, nodeNames);
if (jaxbObject instanceof BidirectedEdgeXml)
{
((BidirectedEdgeXml) jaxbObject).setLeftNode(nodeNames.getNameOrCreate(this.getLeftEndpoint()));
((BidirectedEdgeXml) jaxbObject).setRightNode(nodeNames.getNameOrCreate(this.getRightEndpoint()));
((BidirectedEdgeXml) jaxbObject).setLeftDirection(this.leftEndState.toString().toLowerCase());
((BidirectedEdgeXml) jaxbObject).setRightDirection(this.rightEndState.toString().toLowerCase());
}
}
} }
...@@ -23,12 +23,6 @@ import java.util.*; ...@@ -23,12 +23,6 @@ import java.util.*;
import com.syncleus.dann.UnexpectedDannError; import com.syncleus.dann.UnexpectedDannError;
import com.syncleus.dann.graph.context.AbstractContextGraphElement; import com.syncleus.dann.graph.context.AbstractContextGraphElement;
import com.syncleus.dann.graph.context.ContextNode; import com.syncleus.dann.graph.context.ContextNode;
import com.syncleus.dann.graph.xml.EdgeElementXml;
import com.syncleus.dann.graph.xml.EdgeXml;
import com.syncleus.dann.xml.NameXml;
import com.syncleus.dann.xml.NamedValueXml;
import com.syncleus.dann.xml.Namer;
import com.syncleus.dann.xml.XmlSerializable;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
public abstract class AbstractTraversableCloud<E extends TraversableCloud.Endpoint<?>> extends AbstractContextGraphElement<Graph<?, ? extends E>> implements TraversableCloud<E> public abstract class AbstractTraversableCloud<E extends TraversableCloud.Endpoint<?>> extends AbstractContextGraphElement<Graph<?, ? extends E>> implements TraversableCloud<E>
...@@ -195,70 +189,4 @@ public abstract class AbstractTraversableCloud<E extends TraversableCloud.Endpoi ...@@ -195,70 +189,4 @@ public abstract class AbstractTraversableCloud<E extends TraversableCloud.Endpoi
return outString.toString(); return outString.toString();
} }
@Override
public EdgeXml toXml()
{
final Namer namer = new Namer();
final EdgeElementXml xml = new EdgeElementXml();
xml.setNodeInstances(new EdgeElementXml.NodeInstances());
final Set<Object> writtenNodes = new HashSet<Object>();
for (E endpoint : this.getEndpoints())
{
if (writtenNodes.add(endpoint.getTarget()))
{
final NamedValueXml named = new NamedValueXml();
named.setName(namer.getNameOrCreate(endpoint.getTarget()));
if (endpoint.getTarget() instanceof XmlSerializable)
{
named.setValue(((XmlSerializable) endpoint.getTarget()).toXml(namer));
}
else
{
named.setValue(endpoint.getTarget());
}
xml.getNodeInstances().getNodes().add(named);
}
}
this.toXml(xml, namer);
return xml;
}
@Override
public EdgeXml toXml(final Namer<Object> nodeNames)
{
if (nodeNames == null)
{
throw new IllegalArgumentException("nodeNames can not be null");
}
final EdgeXml xml = new EdgeXml();
this.toXml(xml, nodeNames);
return xml;
}
@Override
public void toXml(final EdgeXml jaxbObject, final Namer<Object> nodeNames)
{
if (nodeNames == null)
{
throw new IllegalArgumentException("nodeNames can not be null");
}
if (jaxbObject == null)
{
throw new IllegalArgumentException("jaxbObject can not be null");
}
if (jaxbObject.getConnections() == null)
{
jaxbObject.setConnections(new EdgeXml.Connections());
}
for (E endpoint : this.getEndpoints())
{
final NameXml connection = new NameXml();
connection.setName(nodeNames.getNameOrCreate(endpoint.getTarget()));
jaxbObject.getConnections().getNodes().add(connection);
}
}
} }
...@@ -19,8 +19,6 @@ ...@@ -19,8 +19,6 @@
package com.syncleus.dann.graph; package com.syncleus.dann.graph;
import com.syncleus.dann.graph.context.ContextReporter; import com.syncleus.dann.graph.context.ContextReporter;
import com.syncleus.dann.graph.xml.GraphXml;
import com.syncleus.dann.xml.XmlSerializable;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
......
...@@ -18,17 +18,8 @@ ...@@ -18,17 +18,8 @@
******************************************************************************/ ******************************************************************************/
package com.syncleus.dann.graph; package com.syncleus.dann.graph;
import com.syncleus.dann.xml.Namer; import java.util.*;
import com.syncleus.dann.graph.xml.GraphXml;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
public class ImmutableAdjacencyGraph<N, E extends TraversableCloud<N>> extends AbstractAdjacencyGraph<N, E> public class ImmutableAdjacencyGraph<N, E extends TraversableCloud<N>> extends AbstractAdjacencyGraph<N, E>
{ {
...@@ -72,16 +63,4 @@ public class ImmutableAdjacencyGraph<N, E extends TraversableCloud<N>> extends A ...@@ -72,16 +63,4 @@ public class ImmutableAdjacencyGraph<N, E extends TraversableCloud<N>> extends A
newAdjacentNodes.put(neighborNodeEntry.getKey(), new ArrayList<N>(neighborNodeEntry.getValue())); newAdjacentNodes.put(neighborNodeEntry.getKey(), new ArrayList<N>(neighborNodeEntry.getValue()));
return newAdjacentNodes; return newAdjacentNodes;
} }
@Override
public GraphXml toXml(final Namer<Object> namer)
{
throw new UnsupportedOperationException("XML serialization not yet supported"); //TODO Implement serialization
}
@Override
public void toXml(final GraphXml jaxbObject, final Namer<Object> namer)
{
throw new UnsupportedOperationException("XML serialization not yet supported"); //TODO Implement serialization
}
} }
...@@ -20,11 +20,6 @@ package com.syncleus.dann.graphicalmodel; ...@@ -20,11 +20,6 @@ package com.syncleus.dann.graphicalmodel;
import java.util.*; import java.util.*;
import com.syncleus.dann.graph.*; import com.syncleus.dann.graph.*;
import com.syncleus.dann.graphicalmodel.xml.GraphicalModelElementXml;
import com.syncleus.dann.graphicalmodel.xml.GraphicalModelXml;
import com.syncleus.dann.xml.NamedValueXml;
import com.syncleus.dann.xml.Namer;
import com.syncleus.dann.xml.XmlSerializable;
public abstract class AbstractGraphicalModelAdjacencyGraph<N extends GraphicalModelNode, E extends BidirectedEdge<N>> extends AbstractBidirectedAdjacencyGraph<N, E> implements GraphicalModel<N, E> public abstract class AbstractGraphicalModelAdjacencyGraph<N extends GraphicalModelNode, E extends BidirectedEdge<N>> extends AbstractBidirectedAdjacencyGraph<N, E> implements GraphicalModel<N, E>
{ {
...@@ -139,78 +134,6 @@ public abstract class AbstractGraphicalModelAdjacencyGraph<N extends GraphicalMo ...@@ -139,78 +134,6 @@ public abstract class AbstractGraphicalModelAdjacencyGraph<N extends GraphicalMo
} }
} }
@Override
public GraphicalModelXml toXml()
{
final GraphicalModelElementXml networkXml = new GraphicalModelElementXml();
final Namer<Object> namer = new Namer<Object>();
networkXml.setNodeInstances(new GraphicalModelElementXml.NodeInstances());
networkXml.setStateInstances(new GraphicalModelElementXml.StateInstances());
final Set<Object> writtenStates = new HashSet<Object>();
for (N node : this.getNodes())
{
//add the node
final NamedValueXml nodeXml = new NamedValueXml();
nodeXml.setName(namer.getNameOrCreate(node));
nodeXml.setValue(node.toXml(namer));
networkXml.getNodeInstances().getNodes().add(nodeXml);
//add all the node's learned states
for (Object learnedState : node.getLearnedStates())
{
//only add the learnedState if it hasnt yet been added
if (writtenStates.add(learnedState))
{
final NamedValueXml stateXml = new NamedValueXml();
stateXml.setName(namer.getNameOrCreate(learnedState));
if (learnedState instanceof XmlSerializable)
{
stateXml.setValue(((XmlSerializable) learnedState).toXml(namer));
}
else
{
stateXml.setValue(learnedState);
}
networkXml.getStateInstances().getStates().add(stateXml);
}
}
//add the nodes current state if it wasnt already
final Object state = node.getState();
if (writtenStates.add(state))
{
final NamedValueXml stateXml = new NamedValueXml();
stateXml.setName(namer.getNameOrCreate(state));
if (state instanceof XmlSerializable)
{
stateXml.setValue(((XmlSerializable) state).toXml(namer));
}
else
{
stateXml.setValue(state);
}
networkXml.getStateInstances().getStates().add(stateXml);
}
}
this.toXml(networkXml, namer);
return networkXml;
}
@Override
public GraphicalModelXml toXml(final Namer<Object> namer)
{
if (namer == null)
{
throw new IllegalArgumentException("namer can not be null");
}
final GraphicalModelXml xml = new GraphicalModelXml();
this.toXml(xml, namer);
return xml;
}
protected static class NodeConnectivity<N extends GraphicalModelNode, E extends BidirectedEdge<N>> extends HashMap<N, Set<E>> protected static class NodeConnectivity<N extends GraphicalModelNode, E extends BidirectedEdge<N>> extends HashMap<N, Set<E>>
{ {
private static final long serialVersionUID = -3068604309573134643L; private static final long serialVersionUID = -3068604309573134643L;
......
...@@ -18,12 +18,10 @@ ...@@ -18,12 +18,10 @@
******************************************************************************/ ******************************************************************************/
package com.syncleus.dann.graphicalmodel; package com.syncleus.dann.graphicalmodel;
import java.io.Serializable;
import java.util.*; import java.util.*;
import com.syncleus.dann.graphicalmodel.xml.EvidenceMapElementXml;
import com.syncleus.dann.graphicalmodel.xml.EvidenceMapXml;
import com.syncleus.dann.xml.*;
public class EvidenceMap<S> extends HashMap<Map<GraphicalModelNode, Object>, StateEvidence<S>> implements XmlSerializable<EvidenceMapXml, Object> public class EvidenceMap<S> extends HashMap<Map<GraphicalModelNode, Object>, StateEvidence<S>> implements Serializable
{ {
private static final long serialVersionUID = 5956089319330421885L; private static final long serialVersionUID = 5956089319330421885L;
private final Set<GraphicalModelNode> influencingNodes; private final Set<GraphicalModelNode> influencingNodes;
...@@ -139,132 +137,4 @@ public class EvidenceMap<S> extends HashMap<Map<GraphicalModelNode, Object>, Sta ...@@ -139,132 +137,4 @@ public class EvidenceMap<S> extends HashMap<Map<GraphicalModelNode, Object>, Sta
this.verifyInfluencingStates(inputStates); this.verifyInfluencingStates(inputStates);
super.putAll(map); super.putAll(map);
} }
@Override
public EvidenceMapXml toXml()
{
final EvidenceMapElementXml xml = new EvidenceMapElementXml();
final Namer<Object> namer = new Namer<Object>();
final Set<GraphicalModelNode> seenNodes = new HashSet<GraphicalModelNode>();
final Set<Object> seenStates = new HashSet<Object>();
xml.setNodeInstances(new EvidenceMapElementXml.NodeInstances());
xml.setStateInstances(new EvidenceMapElementXml.StateInstances());
for (Map.Entry<Map<GraphicalModelNode, Object>, StateEvidence<S>> entry : this.entrySet())
{
final Map<GraphicalModelNode, Object> influences = entry.getKey();
final StateEvidence<S> evidence = entry.getValue();
//add instances for all the nodes and states from the influences
for (Map.Entry<GraphicalModelNode, Object> influenceEntry : influences.entrySet())
{
final GraphicalModelNode node = influenceEntry.getKey();
final Object state = influenceEntry.getValue();
if (seenStates.add(state))
{
final Object stateXml;
if (state instanceof XmlSerializable)
{
stateXml = ((XmlSerializable) state).toXml(namer);
}
else
{
stateXml = state;
}
final NamedValueXml encapsulation = new NamedValueXml();
encapsulation.setName(namer.getNameOrCreate(state));
encapsulation.setValue(stateXml);
xml.getStateInstances().getStates().add(encapsulation);
}
if (seenNodes.add(node))
{
final Object nodeXml = node.toXml(namer);
final NamedValueXml encapsulation = new NamedValueXml();
encapsulation.setName(namer.getNameOrCreate(node));
encapsulation.setValue(nodeXml);
xml.getNodeInstances().getNodes().add(encapsulation);
}
}
//add instances for all states from the evidence
for (S state : evidence.keySet())
{
if (seenStates.add(state))
{
final Object stateXml;
if (state instanceof XmlSerializable)
{
stateXml = ((XmlSerializable) state).toXml(namer);
}
else
{
stateXml = state;
}
final NamedValueXml encapsulation = new NamedValueXml();
encapsulation.setName(namer.getNameOrCreate(state));
encapsulation.setValue(stateXml);
xml.getStateInstances().getStates().add(encapsulation);
}
}
}
this.toXml(xml, namer);
return xml;
}
@Override
public EvidenceMapXml toXml(final Namer<Object> namer)
{
if (namer == null)
{
throw new IllegalArgumentException("namer can not be null");
}
final EvidenceMapXml xml = new EvidenceMapXml();
this.toXml(xml, namer);
return xml;
}
@Override
public void toXml(final EvidenceMapXml jaxbObject, final Namer<Object> namer)
{
if (namer == null)
{
throw new IllegalArgumentException("nodeNames can not be null");
}
if (jaxbObject == null)
{
throw new IllegalArgumentException("jaxbObject can not be null");
}
if (jaxbObject.getInfluencedEvidences() == null)
{
jaxbObject.setInfluencedEvidences(new EvidenceMapXml.InfluencedEvidences());
}
for (Map.Entry<Map<GraphicalModelNode, Object>, StateEvidence<S>> entry : this.entrySet())
{
final EvidenceMapXml.InfluencedEvidences.InfluencedEvidence influencedEvidence = new EvidenceMapXml.InfluencedEvidences.InfluencedEvidence();
//add the influences to the xml
influencedEvidence.setInfluences(new EvidenceMapXml.InfluencedEvidences.InfluencedEvidence.Influences());
for (Map.Entry<GraphicalModelNode, Object> influenceEntry : entry.getKey().entrySet())
{
final EvidenceMapXml.InfluencedEvidences.InfluencedEvidence.Influences.Influence influenceXml = new EvidenceMapXml.InfluencedEvidences.InfluencedEvidence.Influences.Influence();
influenceXml.setNode(namer.getNameOrCreate(influenceEntry.getKey()));
influenceXml.setState(namer.getNameOrCreate(influenceEntry.getValue()));
influencedEvidence.getInfluences().getInfluences().add(influenceXml);
}
//add the state evidence to the xml
influencedEvidence.setStateEvidence(entry.getValue().toXml(namer));
jaxbObject.getInfluencedEvidences().getInfluencedEvidences().add(influencedEvidence);
}
}
} }
...@@ -18,11 +18,10 @@ ...@@ -18,11 +18,10 @@
******************************************************************************/ ******************************************************************************/
package com.syncleus.dann.graphicalmodel; package com.syncleus.dann.graphicalmodel;
import com.syncleus.dann.graphicalmodel.xml.GraphicalModelNodeXml; import java.io.Serializable;
import com.syncleus.dann.xml.XmlSerializable;
import java.util.Set; import java.util.Set;
public interface GraphicalModelNode<S> extends XmlSerializable<GraphicalModelNodeXml, Object> public interface GraphicalModelNode<S> extends Serializable
{ {
Set<S> getLearnedStates(); Set<S> getLearnedStates();
void setState(S currentState); void setState(S currentState);
......
...@@ -21,13 +21,6 @@ package com.syncleus.dann.graphicalmodel; ...@@ -21,13 +21,6 @@ package com.syncleus.dann.graphicalmodel;
import java.util.*; import java.util.*;
import com.syncleus.dann.graph.BidirectedEdge; import com.syncleus.dann.graph.BidirectedEdge;
import com.syncleus.dann.graph.context.AbstractContextNode; import com.syncleus.dann.graph.context.AbstractContextNode;
import com.syncleus.dann.graphicalmodel.xml.GraphicalModelNodeXml;
import com.syncleus.dann.graphicalmodel.xml.SimpleGraphicalModelNodeElementXml;
import com.syncleus.dann.graphicalmodel.xml.SimpleGraphicalModelNodeXml;
import com.syncleus.dann.xml.NameXml;
import com.syncleus.dann.xml.NamedValueXml;
import com.syncleus.dann.xml.Namer;
import com.syncleus.dann.xml.XmlSerializable;
public class SimpleGraphicalModelNode<S> extends AbstractContextNode<GraphicalModelNode<S>, BidirectedEdge<GraphicalModelNode<S>>, GraphicalModel<GraphicalModelNode<S>, BidirectedEdge<GraphicalModelNode<S>>>> implements GraphicalModelNode<S> public class SimpleGraphicalModelNode<S> extends AbstractContextNode<GraphicalModelNode<S>, BidirectedEdge<GraphicalModelNode<S>>, GraphicalModel<GraphicalModelNode<S>, BidirectedEdge<GraphicalModelNode<S>>>> implements GraphicalModelNode<S>
{ {
...@@ -201,92 +194,4 @@ public class SimpleGraphicalModelNode<S> extends AbstractContextNode<GraphicalMo ...@@ -201,92 +194,4 @@ public class SimpleGraphicalModelNode<S> extends AbstractContextNode<GraphicalMo
return false; return false;
} }
@Override
public SimpleGraphicalModelNodeXml toXml()
{
final Namer<Object> namer = new Namer<Object>();
final SimpleGraphicalModelNodeElementXml xml = new SimpleGraphicalModelNodeElementXml();
xml.setStateInstances(new SimpleGraphicalModelNodeElementXml.StateInstances());
final Set<S> writtenStates = new HashSet<S>();
for (S learnedState : this.learnedStates)
{
if (writtenStates.add(learnedState))
{
final NamedValueXml named = new NamedValueXml();
named.setName(namer.getNameOrCreate(learnedState));
if (learnedState instanceof XmlSerializable)
{
named.setValue(((XmlSerializable) learnedState).toXml(namer));
}
else
{
named.setValue(learnedState);
}
xml.getStateInstances().getStates().add(named);
}
}
if (writtenStates.add(this.state))
{
final NamedValueXml named = new NamedValueXml();
named.setName(namer.getNameOrCreate(this.state));
if (this.state instanceof XmlSerializable)
{
named.setValue(((XmlSerializable) this.state).toXml(namer));
}
else
{
named.setValue(this.state);
}
xml.getStateInstances().getStates().add(named);
}
this.toXml(xml, namer);
return xml;
}
@Override
public SimpleGraphicalModelNodeXml toXml(final Namer<Object> namer)
{
if (namer == null)
{
throw new IllegalArgumentException("namer can not be null");
}
final SimpleGraphicalModelNodeXml xml = new SimpleGraphicalModelNodeXml();
this.toXml(xml, namer);
return xml;
}
@Override
public void toXml(final GraphicalModelNodeXml jaxbObject, final Namer<Object> namer)
{
//set learned states
if (jaxbObject.getLearnedStates() == null)
{
jaxbObject.setLearnedStates(new SimpleGraphicalModelNodeXml.LearnedStates());
}
for (S learnedState : learnedStates)
{
final NameXml stateXml = new NameXml();
stateXml.setName(namer.getNameOrCreate(learnedState));
jaxbObject.getLearnedStates().getStates().add(stateXml);
}
//set current state
if (jaxbObject.getState() == null)
{
jaxbObject.setState(new NameXml());
}
jaxbObject.getState().setName(namer.getNameOrCreate(this.state));
//set evidence map
if ((jaxbObject instanceof SimpleGraphicalModelNodeXml) && (this.evidence != null))
{
((SimpleGraphicalModelNodeXml) jaxbObject).setEvidence(this.evidence.toXml(namer));
}
}
} }
...@@ -18,13 +18,11 @@ ...@@ -18,13 +18,11 @@
******************************************************************************/ ******************************************************************************/
package com.syncleus.dann.graphicalmodel; package com.syncleus.dann.graphicalmodel;
import java.io.Serializable;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import com.syncleus.dann.graphicalmodel.xml.StateEvidenceElementXml;
import com.syncleus.dann.graphicalmodel.xml.StateEvidenceXml;
import com.syncleus.dann.xml.*;
public class StateEvidence<S> extends HashMap<S, Integer> implements XmlSerializable<StateEvidenceXml, Object> public class StateEvidence<S> extends HashMap<S, Integer> implements Serializable
{ {
private static final long serialVersionUID = 4276706788994272957L; private static final long serialVersionUID = 4276706788994272957L;
private long totalEvidence; private long totalEvidence;
...@@ -67,75 +65,4 @@ public class StateEvidence<S> extends HashMap<S, Integer> implements XmlSerializ ...@@ -67,75 +65,4 @@ public class StateEvidence<S> extends HashMap<S, Integer> implements XmlSerializ
this.totalEvidence = (this.totalEvidence - oldEvidence) + newEvidence; this.totalEvidence = (this.totalEvidence - oldEvidence) + newEvidence;
} }
} }
@Override
public StateEvidenceXml toXml()
{
final StateEvidenceElementXml xml = new StateEvidenceElementXml();
final Namer<Object> namer = new Namer<Object>();
xml.setStates(new StateEvidenceXml.States());
for (S state : this.keySet())
{
final String name = namer.getNameOrCreate(state);
final Object stateXml;
if (state instanceof XmlSerializable)
{
stateXml = ((XmlSerializable) state).toXml(namer);
}
else
{
stateXml = state;
}
final NamedValueXml encapsulation = new NamedValueXml();
encapsulation.setName(name);
encapsulation.setValue(stateXml);
xml.getStateInstances().getStates().add(encapsulation);
}
this.toXml(xml, namer);
return xml;
}
@Override
public StateEvidenceXml toXml(final Namer<Object> namer)
{
if (namer == null)
{
throw new IllegalArgumentException("namer can not be null");
}
final StateEvidenceXml xml = new StateEvidenceXml();
this.toXml(xml, namer);
return xml;
}
@Override
public void toXml(final StateEvidenceXml jaxbObject, final Namer<Object> namer)
{
if (namer == null)
{
throw new IllegalArgumentException("nodeNames can not be null");
}
if (jaxbObject == null)
{
throw new IllegalArgumentException("jaxbObject can not be null");
}
if (jaxbObject.getStates() == null)
{
jaxbObject.setStates(new StateEvidenceXml.States());
}
for (Map.Entry<S, Integer> entry : this.entrySet())
{
final StateEvidenceXml.States.State stateXml = new StateEvidenceXml.States.State();
stateXml.setName(namer.getNameOrCreate(entry.getKey()));
stateXml.setCount(entry.getValue());
jaxbObject.getStates().getStates().add(stateXml);
}
}
} }
/******************************************************************************
* *
* Copyright: (c) Syncleus, Inc. *
* *
* You may redistribute and modify this source code under the terms and *
* conditions of the Open Source Community License - Type C version 1.0 *
* or any later version as published by Syncleus, Inc. at www.syncleus.com. *
* There should be a copy of the license included with this file. If a copy *
* of the license is not included you are granted no right to distribute or *
* otherwise use this file except through a legal and valid license. You *
* should also contact Syncleus, Inc. at the information below if you cannot *
* find a license: *
* *
* Syncleus, Inc. *
* 2604 South 12th Street *
* Philadelphia, PA 19148 *
* *
******************************************************************************/
package com.syncleus.dann.xml;
import java.util.WeakHashMap;
import java.util.concurrent.atomic.AtomicLong;
public class Namer<K>
{
private final AtomicLong currentNodeName = new AtomicLong(0);
private final WeakHashMap<K, Long> nodeNames = new WeakHashMap<K, Long>();
public String getNameOrCreate(final K node)
{
Long nodeName = nodeNames.get(node);
if (nodeName == null)
{
nodeName = currentNodeName.incrementAndGet();
nodeNames.put(node, nodeName);
}
return nodeName.toString();
}
public String getName(final K node)
{
return nodeNames.get(node).toString();
}
public boolean hasName(final K node)
{
return nodeNames.containsKey(node);
}
public void reset()
{
this.nodeNames.clear();
this.currentNodeName.set(0);
}
}
/******************************************************************************
* *
* Copyright: (c) Syncleus, Inc. *
* *
* You may redistribute and modify this source code under the terms and *
* conditions of the Open Source Community License - Type C version 1.0 *
* or any later version as published by Syncleus, Inc. at www.syncleus.com. *
* There should be a copy of the license included with this file. If a copy *
* of the license is not included you are granted no right to distribute or *
* otherwise use this file except through a legal and valid license. You *
* should also contact Syncleus, Inc. at the information below if you cannot *
* find a license: *
* *
* Syncleus, Inc. *
* 2604 South 12th Street *
* Philadelphia, PA 19148 *
* *
******************************************************************************/
package com.syncleus.dann.xml;
public interface XmlSerializable<T, N>
{
/**
* Write stand alone element, including all instances.
*/
T toXml();
/**
* Write nested element assuming recurring instances of components are
* already named.
*/
T toXml(Namer<N> namer);
/**
* Write nested element assuming recurring instances of components are
* already named, use preexisting XML objects.
*/
void toXml(T jaxbObject, Namer<N> namer);
}
/******************************************************************************
* *
* Copyright: (c) Syncleus, Inc. *
* *
* You may redistribute and modify this source code under the terms and *
* conditions of the Open Source Community License - Type C version 1.0 *
* or any later version as published by Syncleus, Inc. at www.syncleus.com. *
* There should be a copy of the license included with this file. If a copy *
* of the license is not included you are granted no right to distribute or *
* otherwise use this file except through a legal and valid license. You *
* should also contact Syncleus, Inc. at the information below if you cannot *
* find a license: *
* *
* Syncleus, Inc. *
* 2604 South 12th Street *
* Philadelphia, PA 19148 *
* *
******************************************************************************/
package com.syncleus.dann.xml;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class XmlSerializableAdapter<X, V extends XmlSerializable<X, ?>> extends XmlAdapter<X, V>
{
@Override
public final X marshal(final V graph)
{
return graph.toXml();
}
@Override
public V unmarshal(final X graphXml)
{
throw new IllegalStateException("You can not unmarshal XML through this adapter");
}
}
...@@ -18,38 +18,31 @@ ...@@ -18,38 +18,31 @@
******************************************************************************/ ******************************************************************************/
package com.syncleus.dann.graphicalmodel.bayesian; package com.syncleus.dann.graphicalmodel.bayesian;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.*; import java.util.*;
import com.syncleus.dann.graph.ImmutableDirectedEdge; import com.syncleus.dann.graph.ImmutableDirectedEdge;
import com.syncleus.dann.graphicalmodel.GraphicalModelNode; import com.syncleus.dann.graphicalmodel.GraphicalModelNode;
import com.syncleus.dann.graphicalmodel.SimpleGraphicalModelNode; import com.syncleus.dann.graphicalmodel.SimpleGraphicalModelNode;
import com.syncleus.dann.graphicalmodel.bayesian.xml.BayesianNetworkXml; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.StaxDriver;
import org.junit.*; import org.junit.*;
import javax.xml.bind.*;
import javax.xml.bind.annotation.XmlRootElement;
public class TestSicknessBayesianNetwork public class TestSicknessBayesianNetwork
{ {
@XmlRootElement
private static enum BooleanState private static enum BooleanState
{ {
TRUE, FALSE TRUE, FALSE
} }
@XmlRootElement
private static enum SeasonState private static enum SeasonState
{ {
WINTER, SUMMER, SPRING, FALL WINTER, SUMMER, SPRING, FALL
} }
@XmlRootElement
private static enum AgeState private static enum AgeState
{ {
BABY, CHILD, TEENAGER, ADULT, SENIOR BABY, CHILD, TEENAGER, ADULT, SENIOR
} }
@XmlRootElement
private static enum FeverState private static enum FeverState
{ {
LOW, NONE, WARM, HOT LOW, NONE, WARM, HOT
...@@ -65,26 +58,19 @@ public class TestSicknessBayesianNetwork ...@@ -65,26 +58,19 @@ public class TestSicknessBayesianNetwork
private GraphicalModelNode<BooleanState> tired = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE); private GraphicalModelNode<BooleanState> tired = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE);
private GraphicalModelNode<BooleanState> sick = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE); private GraphicalModelNode<BooleanState> sick = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE);
@Test @Test
public void testXml() throws Exception public void testXml() throws Exception
{ {
testOverall(); testOverall();
//mashall it final XStream xstream = new XStream(new StaxDriver());
JAXBContext context = JAXBContext.newInstance(BayesianNetworkXml.class, TestSicknessBayesianNetwork.FeverState.class, TestSicknessBayesianNetwork.AgeState.class, TestSicknessBayesianNetwork.BooleanState.class, TestSicknessBayesianNetwork.SeasonState.class); final String xml = xstream.toXML(network);
Marshaller marshal = context.createMarshaller(); Assert.assertTrue("could not serialize network!", xml != null);
final Object networkObject = xstream.fromXML(xml);
StringWriter writer = new StringWriter(); Assert.assertTrue("deserialized object type doesnt match serialized object type", networkObject instanceof MutableBayesianAdjacencyNetwork);
marshal.marshal(network.toXml(), writer); Assert.assertTrue("deserialized network had the wrong number of edges", ((MutableBayesianAdjacencyNetwork)networkObject).getEdges().size() == network.getEdges().size());
Assert.assertTrue("deserialized network had the wrong number of nodes", ((MutableBayesianAdjacencyNetwork)networkObject).getNodes().size() == network.getNodes().size());
//unmarshall it }
StringReader reader = new StringReader(writer.toString());
BayesianNetworkXml xml = JAXB.unmarshal(reader, BayesianNetworkXml.class);
Assert.assertTrue("could not unmarshal object!", xml != null);
Assert.assertTrue("Wrong number of edges after unmarshaling: " + xml.getEdges().getEdges().size(), xml.getEdges().getEdges().size() == 14);
Assert.assertTrue("Wrong number of nodes after unmarshaling: " + xml.getNodes().getNodes().size(), xml.getNodes().getNodes().size() == 6);
}
@Test @Test
public void testOverallRepeated() public void testOverallRepeated()
......
...@@ -18,39 +18,32 @@ ...@@ -18,39 +18,32 @@
******************************************************************************/ ******************************************************************************/
package com.syncleus.dann.graphicalmodel.markovrandomfield; package com.syncleus.dann.graphicalmodel.markovrandomfield;
import javax.xml.bind.*;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.*; import java.util.*;
import com.syncleus.dann.graph.ImmutableUndirectedEdge; import com.syncleus.dann.graph.ImmutableUndirectedEdge;
import com.syncleus.dann.graphicalmodel.GraphicalModelNode; import com.syncleus.dann.graphicalmodel.GraphicalModelNode;
import com.syncleus.dann.graphicalmodel.SimpleGraphicalModelNode; import com.syncleus.dann.graphicalmodel.SimpleGraphicalModelNode;
import com.syncleus.dann.graphicalmodel.xml.GraphicalModelXml; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.StaxDriver;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
public class TestSicknessRandomMarkovField public class TestSicknessRandomMarkovField
{ {
@XmlRootElement
private static enum BooleanState private static enum BooleanState
{ {
TRUE, FALSE TRUE, FALSE
} }
@XmlRootElement
private static enum SeasonState private static enum SeasonState
{ {
WINTER, SUMMER, SPRING, FALL WINTER, SUMMER, SPRING, FALL
} }
@XmlRootElement
private static enum AgeState private static enum AgeState
{ {
BABY, CHILD, TEENAGER, ADULT, SENIOR BABY, CHILD, TEENAGER, ADULT, SENIOR
} }
@XmlRootElement
private static enum FeverState private static enum FeverState
{ {
LOW, NONE, WARM, HOT LOW, NONE, WARM, HOT
...@@ -66,28 +59,21 @@ public class TestSicknessRandomMarkovField ...@@ -66,28 +59,21 @@ public class TestSicknessRandomMarkovField
private GraphicalModelNode<BooleanState> tired = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE); private GraphicalModelNode<BooleanState> tired = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE);
private GraphicalModelNode<BooleanState> sick = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE); private GraphicalModelNode<BooleanState> sick = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE);
@Test @Test
public void testXml() throws Exception public void testXml() throws Exception
{ {
testOverall(); testOverall();
//mashall it final XStream xstream = new XStream(new StaxDriver());
JAXBContext context = JAXBContext.newInstance(GraphicalModelXml.class, TestSicknessRandomMarkovField.FeverState.class, TestSicknessRandomMarkovField.AgeState.class, TestSicknessRandomMarkovField.BooleanState.class, TestSicknessRandomMarkovField.SeasonState.class); final String xml = xstream.toXML(network);
Marshaller marshal = context.createMarshaller(); Assert.assertTrue("could not serialize network!", xml != null);
final Object networkObject = xstream.fromXML(xml);
StringWriter writer = new StringWriter(); Assert.assertTrue("deserialized object type doesnt match serialized object type", networkObject instanceof MutableMarkovRandomFieldAdjacencyGraph);
marshal.marshal(network.toXml(), writer); Assert.assertTrue("deserialized network had the wrong number of edges", ((MutableMarkovRandomFieldAdjacencyGraph)networkObject).getEdges().size() == network.getEdges().size());
Assert.assertTrue("deserialized network had the wrong number of nodes", ((MutableMarkovRandomFieldAdjacencyGraph)networkObject).getNodes().size() == network.getNodes().size());
//unmarshall it }
StringReader reader = new StringReader(writer.toString());
GraphicalModelXml xml = JAXB.unmarshal(reader, GraphicalModelXml.class); @Test
Assert.assertTrue("could not unmarshal object!", xml != null);
Assert.assertTrue("Wrong number of edges after unmarshaling: " + xml.getEdges().getEdges().size(), xml.getEdges().getEdges().size() == 14);
Assert.assertTrue("Wrong number of nodes after unmarshaling: " + xml.getNodes().getNodes().size(), xml.getNodes().getNodes().size() == 6);
}
@Test
public void testOverallRepeated() public void testOverallRepeated()
{ {
for(int i = 0; i < 10; i++) for(int i = 0; i < 10; i++)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment