=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/NodeDeserializer.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/NodeDeserializer.java 2014-06-04 11:18:05 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/NodeDeserializer.java 2014-06-04 16:22:56 +0000 @@ -60,11 +60,14 @@ import java.io.IOException; import java.io.InputStream; +import java.util.List; /** * @author Morten Olav Hansen */ public interface NodeDeserializer { + List contentTypes(); + RootNode deserialize( InputStream inputStream ) throws IOException; } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/NodeSerializer.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/NodeSerializer.java 2014-06-01 11:39:39 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/NodeSerializer.java 2014-06-04 16:22:56 +0000 @@ -32,13 +32,14 @@ import java.io.IOException; import java.io.OutputStream; +import java.util.List; /** * @author Morten Olav Hansen */ public interface NodeSerializer { + List contentTypes(); + void serialize( RootNode rootNode, OutputStream outputStream ) throws IOException; - - String contentType(); } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/NodeService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/NodeService.java 2014-06-01 13:52:28 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/NodeService.java 2014-06-04 16:22:56 +0000 @@ -31,15 +31,19 @@ import org.hisp.dhis.node.types.RootNode; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; -import java.util.List; /** * @author Morten Olav Hansen */ public interface NodeService { - List getSerializers(); + NodeSerializer getNodeSerializer( String contentType ); void serialize( RootNode rootNode, String contentType, OutputStream outputStream ) throws IOException; + + NodeDeserializer getNodeDeserializer( String contentType ); + + RootNode deserialize( RootNode rootNode, String contentType, InputStream inputStream ) throws IOException; } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/serializers/JacksonJsonNodeSerializer.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/serializers/JacksonJsonNodeSerializer.java 2014-06-04 11:18:05 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/serializers/JacksonJsonNodeSerializer.java 2014-06-04 16:22:56 +0000 @@ -32,6 +32,7 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.google.common.collect.Lists; import org.hisp.dhis.node.Node; import org.hisp.dhis.node.NodeSerializer; import org.hisp.dhis.node.types.CollectionNode; @@ -42,6 +43,7 @@ import java.io.IOException; import java.io.OutputStream; +import java.util.List; /** * @author Morten Olav Hansen @@ -54,9 +56,9 @@ private final ObjectMapper objectMapper = new ObjectMapper(); @Override - public String contentType() + public List contentTypes() { - return CONTENT_TYPE; + return Lists.newArrayList( CONTENT_TYPE ); } public JacksonJsonNodeSerializer() === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/serializers/StAXNodeSerializer.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/serializers/StAXNodeSerializer.java 2014-06-04 11:18:05 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/serializers/StAXNodeSerializer.java 2014-06-04 16:22:56 +0000 @@ -28,6 +28,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE */ +import com.google.common.collect.Lists; import org.hisp.dhis.node.Node; import org.hisp.dhis.node.NodeSerializer; import org.hisp.dhis.node.types.CollectionNode; @@ -42,6 +43,7 @@ import javax.xml.stream.XMLStreamWriter; import java.io.IOException; import java.io.OutputStream; +import java.util.List; /** * @author Morten Olav Hansen @@ -54,9 +56,9 @@ private final XMLOutputFactory xmlFactory = XMLOutputFactory.newInstance(); @Override - public String contentType() + public List contentTypes() { - return CONTENT_TYPE; + return Lists.newArrayList( CONTENT_TYPE ); } @Override === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/node/DefaultNodeService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/node/DefaultNodeService.java 2014-06-01 13:52:28 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/node/DefaultNodeService.java 2014-06-04 16:22:56 +0000 @@ -35,6 +35,7 @@ import javax.annotation.PostConstruct; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.util.List; import java.util.Map; @@ -47,32 +48,78 @@ @Autowired( required = false ) private List nodeSerializers = Lists.newArrayList(); + @Autowired(required = false) + private List nodeDeserializers = Lists.newArrayList(); + private Map nodeSerializerMap = Maps.newHashMap(); + private Map nodeDeserializerMap = Maps.newHashMap(); + @PostConstruct private void init() { for ( NodeSerializer nodeSerializer : nodeSerializers ) { - nodeSerializerMap.put( nodeSerializer.contentType(), nodeSerializer ); + for ( String contentType : nodeSerializer.contentTypes() ) + { + nodeSerializerMap.put( contentType, nodeSerializer ); + } + } + + for ( NodeDeserializer nodeDeserializer : nodeDeserializers ) + { + for ( String contentType : nodeDeserializer.contentTypes() ) + { + nodeDeserializerMap.put( contentType, nodeDeserializer ); + } } } @Override - public List getSerializers() + public NodeSerializer getNodeSerializer( String contentType ) { - return nodeSerializers; + if ( nodeSerializerMap.containsKey( contentType ) ) + { + nodeSerializerMap.get( contentType ); + } + + return null; } @Override public void serialize( RootNode rootNode, String contentType, OutputStream outputStream ) throws IOException { - if ( !nodeSerializerMap.containsKey( contentType ) ) + NodeSerializer nodeSerializer = getNodeSerializer( contentType ); + + if ( nodeSerializer == null ) { - return; + return; // TODO throw exception? } - NodeSerializer nodeSerializer = nodeSerializerMap.get( contentType ); nodeSerializer.serialize( rootNode, outputStream ); } + + @Override + public NodeDeserializer getNodeDeserializer( String contentType ) + { + if ( nodeDeserializerMap.containsKey( contentType ) ) + { + return nodeDeserializerMap.get( contentType ); + } + + return null; + } + + @Override + public RootNode deserialize( RootNode rootNode, String contentType, InputStream inputStream ) throws IOException + { + NodeDeserializer nodeDeserializer = getNodeDeserializer( contentType ); + + if ( nodeDeserializer == null ) + { + return null; // TODO throw exception? + } + + return nodeDeserializer.deserialize( inputStream ); + } }