diff --git a/pom.xml b/pom.xml index b47c74d0f59285966d03f780620e44010593ed66..0db35451cd192a910d2e84380438e6e7bf2c2780 100644 --- a/pom.xml +++ b/pom.xml @@ -168,39 +168,6 @@ </execution> </executions> </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> <resources> @@ -271,13 +238,7 @@ <dependency> <groupId>org.freehep</groupId> <artifactId>freehep-java3d</artifactId> - <version>2.0-SNAPSHOT</version> - </dependency> - - <dependency> - <groupId>org.jvnet.jaxb2_commons</groupId> - <artifactId>jaxb2-basics</artifactId> - <version>0.6.0</version> + <version>2.0</version> </dependency> <dependency> @@ -285,9 +246,16 @@ <artifactId>vecmath</artifactId> <version>1.3.1</version> </dependency> - - </dependencies> + <dependency> + <groupId>xstream</groupId> + <artifactId>xstream</artifactId> + <version>1.2.2</version> + </dependency> + + + + </dependencies> <repositories> <repository> diff --git a/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java index dd980847521af2b016073f51f6d85da99d91d6a3..e986955e3fbb5e80576b2bd5ca158d988bceed1d 100644 --- a/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java +++ b/src/main/java/com/syncleus/dann/graph/AbstractAdjacencyGraph.java @@ -27,13 +27,7 @@ import java.util.Map; import java.util.Set; import com.syncleus.dann.UnexpectedDannError; 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 javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** * An AbstractAdjacencyGraph is a Graph implemented using adjacency lists. @@ -42,7 +36,6 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; * @param <N> The 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> { private static final Logger LOGGER = Logger.getLogger(AbstractAdjacencyGraph.class); @@ -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); - } - } } diff --git a/src/main/java/com/syncleus/dann/graph/AbstractBidirectedEdge.java b/src/main/java/com/syncleus/dann/graph/AbstractBidirectedEdge.java index 220a49e047f20b138715fab6b0aa89492df36c44..5def1899db17587ab0fbbc729b9e6bec2346ef30 100644 --- a/src/main/java/com/syncleus/dann/graph/AbstractBidirectedEdge.java +++ b/src/main/java/com/syncleus/dann/graph/AbstractBidirectedEdge.java @@ -18,12 +18,8 @@ ******************************************************************************/ package com.syncleus.dann.graph; -import java.util.*; - -import com.syncleus.dann.graph.xml.*; -import com.syncleus.dann.xml.NamedValueXml; -import com.syncleus.dann.xml.Namer; -import com.syncleus.dann.xml.XmlSerializable; +import java.util.HashSet; +import java.util.Set; 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<? 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()); - } - } } diff --git a/src/main/java/com/syncleus/dann/graph/AbstractTraversableCloud.java b/src/main/java/com/syncleus/dann/graph/AbstractTraversableCloud.java index c744f1c7e898d0969320e245ca6489321687594d..ae626c0a11e6da28d54d88201953c774252a58f0 100644 --- a/src/main/java/com/syncleus/dann/graph/AbstractTraversableCloud.java +++ b/src/main/java/com/syncleus/dann/graph/AbstractTraversableCloud.java @@ -23,12 +23,6 @@ import java.util.*; import com.syncleus.dann.UnexpectedDannError; import com.syncleus.dann.graph.context.AbstractContextGraphElement; 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; 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 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); - } - } } diff --git a/src/main/java/com/syncleus/dann/graph/Graph.java b/src/main/java/com/syncleus/dann/graph/Graph.java index 3522e65e4f6a1e263830b4b2adeac536b3d4a736..b9e11f995950823f9dd4538a733a4d7e45db96a8 100644 --- a/src/main/java/com/syncleus/dann/graph/Graph.java +++ b/src/main/java/com/syncleus/dann/graph/Graph.java @@ -19,8 +19,6 @@ package com.syncleus.dann.graph; 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.util.List; import java.util.Set; diff --git a/src/main/java/com/syncleus/dann/graph/ImmutableAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graph/ImmutableAdjacencyGraph.java index f4e0a6a876fb2418f94a33facb5c1436a2f5f24c..a010ad85288b46f3dcdfa07cb63ef265c63fbd28 100644 --- a/src/main/java/com/syncleus/dann/graph/ImmutableAdjacencyGraph.java +++ b/src/main/java/com/syncleus/dann/graph/ImmutableAdjacencyGraph.java @@ -18,17 +18,8 @@ ******************************************************************************/ package com.syncleus.dann.graph; -import com.syncleus.dann.xml.Namer; -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.*; import java.util.Map.Entry; -import java.util.Set; 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 newAdjacentNodes.put(neighborNodeEntry.getKey(), new ArrayList<N>(neighborNodeEntry.getValue())); 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 - } } diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/AbstractGraphicalModelAdjacencyGraph.java b/src/main/java/com/syncleus/dann/graphicalmodel/AbstractGraphicalModelAdjacencyGraph.java index 27fe260eca4e69165a72bbb31b960143260f7487..e246e2e42689cb2b147250ab01aefd3ffb31df14 100644 --- a/src/main/java/com/syncleus/dann/graphicalmodel/AbstractGraphicalModelAdjacencyGraph.java +++ b/src/main/java/com/syncleus/dann/graphicalmodel/AbstractGraphicalModelAdjacencyGraph.java @@ -20,11 +20,6 @@ package com.syncleus.dann.graphicalmodel; import java.util.*; 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> { @@ -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>> { private static final long serialVersionUID = -3068604309573134643L; diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/EvidenceMap.java b/src/main/java/com/syncleus/dann/graphicalmodel/EvidenceMap.java index 19d36e4401cfbdb595300c2a2e04c79553c50ad3..512aba47df75d6812ff5370ed1903653e6439aaa 100644 --- a/src/main/java/com/syncleus/dann/graphicalmodel/EvidenceMap.java +++ b/src/main/java/com/syncleus/dann/graphicalmodel/EvidenceMap.java @@ -18,12 +18,10 @@ ******************************************************************************/ package com.syncleus.dann.graphicalmodel; +import java.io.Serializable; 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 final Set<GraphicalModelNode> influencingNodes; @@ -139,132 +137,4 @@ public class EvidenceMap<S> extends HashMap<Map<GraphicalModelNode, Object>, Sta this.verifyInfluencingStates(inputStates); 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); - } - } } diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/GraphicalModelNode.java b/src/main/java/com/syncleus/dann/graphicalmodel/GraphicalModelNode.java index 075d9174937e141e3b113f1bb2526a09557dfe8b..ff9d2afa598ede421f4472bda7a578d7ff8d6e99 100644 --- a/src/main/java/com/syncleus/dann/graphicalmodel/GraphicalModelNode.java +++ b/src/main/java/com/syncleus/dann/graphicalmodel/GraphicalModelNode.java @@ -18,11 +18,10 @@ ******************************************************************************/ package com.syncleus.dann.graphicalmodel; -import com.syncleus.dann.graphicalmodel.xml.GraphicalModelNodeXml; -import com.syncleus.dann.xml.XmlSerializable; +import java.io.Serializable; import java.util.Set; -public interface GraphicalModelNode<S> extends XmlSerializable<GraphicalModelNodeXml, Object> +public interface GraphicalModelNode<S> extends Serializable { Set<S> getLearnedStates(); void setState(S currentState); diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/SimpleGraphicalModelNode.java b/src/main/java/com/syncleus/dann/graphicalmodel/SimpleGraphicalModelNode.java index 5379811c7aeda05bb6c408a082db46b075c815a9..13235c6833add9030d93261a97b00f2f88a2241b 100644 --- a/src/main/java/com/syncleus/dann/graphicalmodel/SimpleGraphicalModelNode.java +++ b/src/main/java/com/syncleus/dann/graphicalmodel/SimpleGraphicalModelNode.java @@ -21,13 +21,6 @@ package com.syncleus.dann.graphicalmodel; import java.util.*; import com.syncleus.dann.graph.BidirectedEdge; 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> { @@ -201,92 +194,4 @@ public class SimpleGraphicalModelNode<S> extends AbstractContextNode<GraphicalMo 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)); - } - } } diff --git a/src/main/java/com/syncleus/dann/graphicalmodel/StateEvidence.java b/src/main/java/com/syncleus/dann/graphicalmodel/StateEvidence.java index e326b6e0c44365f69852a6e8134f77c02307dcef..cc156adeea810449b66886572f93cdc7a718e77c 100644 --- a/src/main/java/com/syncleus/dann/graphicalmodel/StateEvidence.java +++ b/src/main/java/com/syncleus/dann/graphicalmodel/StateEvidence.java @@ -18,13 +18,11 @@ ******************************************************************************/ package com.syncleus.dann.graphicalmodel; +import java.io.Serializable; import java.util.HashMap; 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 long totalEvidence; @@ -67,75 +65,4 @@ public class StateEvidence<S> extends HashMap<S, Integer> implements XmlSerializ 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); - } - } } diff --git a/src/main/java/com/syncleus/dann/xml/Namer.java b/src/main/java/com/syncleus/dann/xml/Namer.java deleted file mode 100644 index a819e42b8ca3ca4275ebd8f93b4c85fe8cd562d6..0000000000000000000000000000000000000000 --- a/src/main/java/com/syncleus/dann/xml/Namer.java +++ /dev/null @@ -1,57 +0,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; - -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); - } -} diff --git a/src/main/java/com/syncleus/dann/xml/XmlSerializable.java b/src/main/java/com/syncleus/dann/xml/XmlSerializable.java deleted file mode 100644 index bcb2274ebd2835286003c7be5a9bc734ef1f143a..0000000000000000000000000000000000000000 --- a/src/main/java/com/syncleus/dann/xml/XmlSerializable.java +++ /dev/null @@ -1,39 +0,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); -} diff --git a/src/main/java/com/syncleus/dann/xml/XmlSerializableAdapter.java b/src/main/java/com/syncleus/dann/xml/XmlSerializableAdapter.java deleted file mode 100644 index 461216f262c22b284e6d2963af867c1d38942893..0000000000000000000000000000000000000000 --- a/src/main/java/com/syncleus/dann/xml/XmlSerializableAdapter.java +++ /dev/null @@ -1,36 +0,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; - -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"); - } -} diff --git a/src/test/java/com/syncleus/dann/graphicalmodel/bayesian/TestSicknessBayesianNetwork.java b/src/test/java/com/syncleus/dann/graphicalmodel/bayesian/TestSicknessBayesianNetwork.java index 7dfa9a16df9e79267a3cfcbc3ca5bd95251ba1ec..dce39859980038a3d020a9bf37a3158e7a3fe98d 100644 --- a/src/test/java/com/syncleus/dann/graphicalmodel/bayesian/TestSicknessBayesianNetwork.java +++ b/src/test/java/com/syncleus/dann/graphicalmodel/bayesian/TestSicknessBayesianNetwork.java @@ -18,38 +18,31 @@ ******************************************************************************/ package com.syncleus.dann.graphicalmodel.bayesian; -import java.io.StringReader; -import java.io.StringWriter; import java.util.*; import com.syncleus.dann.graph.ImmutableDirectedEdge; import com.syncleus.dann.graphicalmodel.GraphicalModelNode; 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 javax.xml.bind.*; -import javax.xml.bind.annotation.XmlRootElement; public class TestSicknessBayesianNetwork { - @XmlRootElement private static enum BooleanState { TRUE, FALSE } - @XmlRootElement private static enum SeasonState { WINTER, SUMMER, SPRING, FALL } - @XmlRootElement private static enum AgeState { BABY, CHILD, TEENAGER, ADULT, SENIOR } - @XmlRootElement private static enum FeverState { LOW, NONE, WARM, HOT @@ -65,26 +58,19 @@ public class TestSicknessBayesianNetwork private GraphicalModelNode<BooleanState> tired = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE); private GraphicalModelNode<BooleanState> sick = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE); - @Test - public void testXml() throws Exception - { - testOverall(); - - //mashall it - JAXBContext context = JAXBContext.newInstance(BayesianNetworkXml.class, TestSicknessBayesianNetwork.FeverState.class, TestSicknessBayesianNetwork.AgeState.class, TestSicknessBayesianNetwork.BooleanState.class, TestSicknessBayesianNetwork.SeasonState.class); - Marshaller marshal = context.createMarshaller(); - - StringWriter writer = new StringWriter(); - marshal.marshal(network.toXml(), writer); - - //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 + public void testXml() throws Exception + { + testOverall(); + + final XStream xstream = new XStream(new StaxDriver()); + final String xml = xstream.toXML(network); + Assert.assertTrue("could not serialize network!", xml != null); + final Object networkObject = xstream.fromXML(xml); + Assert.assertTrue("deserialized object type doesnt match serialized object type", networkObject instanceof MutableBayesianAdjacencyNetwork); + 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()); + } @Test public void testOverallRepeated() diff --git a/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java b/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java index 81b377567bc04cfd9f0b9934e44ec1b0c65cf902..7002555dec65b23f8e14eea4fdd026e5264f5d8f 100644 --- a/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java +++ b/src/test/java/com/syncleus/dann/graphicalmodel/markovrandomfield/TestSicknessRandomMarkovField.java @@ -18,39 +18,32 @@ ******************************************************************************/ 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 com.syncleus.dann.graph.ImmutableUndirectedEdge; import com.syncleus.dann.graphicalmodel.GraphicalModelNode; 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.Test; public class TestSicknessRandomMarkovField { - @XmlRootElement private static enum BooleanState { TRUE, FALSE } - @XmlRootElement private static enum SeasonState { WINTER, SUMMER, SPRING, FALL } - @XmlRootElement private static enum AgeState { BABY, CHILD, TEENAGER, ADULT, SENIOR } - @XmlRootElement private static enum FeverState { LOW, NONE, WARM, HOT @@ -66,28 +59,21 @@ public class TestSicknessRandomMarkovField private GraphicalModelNode<BooleanState> tired = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE); private GraphicalModelNode<BooleanState> sick = new SimpleGraphicalModelNode<BooleanState>(BooleanState.FALSE); - @Test - public void testXml() throws Exception - { - testOverall(); - - //mashall it - JAXBContext context = JAXBContext.newInstance(GraphicalModelXml.class, TestSicknessRandomMarkovField.FeverState.class, TestSicknessRandomMarkovField.AgeState.class, TestSicknessRandomMarkovField.BooleanState.class, TestSicknessRandomMarkovField.SeasonState.class); - Marshaller marshal = context.createMarshaller(); - - StringWriter writer = new StringWriter(); - marshal.marshal(network.toXml(), writer); - - //unmarshall it - StringReader reader = new StringReader(writer.toString()); - GraphicalModelXml xml = JAXB.unmarshal(reader, GraphicalModelXml.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 testXml() throws Exception + { + testOverall(); + + final XStream xstream = new XStream(new StaxDriver()); + final String xml = xstream.toXML(network); + Assert.assertTrue("could not serialize network!", xml != null); + final Object networkObject = xstream.fromXML(xml); + Assert.assertTrue("deserialized object type doesnt match serialized object type", networkObject instanceof MutableMarkovRandomFieldAdjacencyGraph); + 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()); + } + + @Test public void testOverallRepeated() { for(int i = 0; i < 10; i++)