dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #30803
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 15659: support pr rootNode serialiation configuration, only pretty print is supported right now (and onl...
------------------------------------------------------------
revno: 15659
committer: Morten Olav Hansen <mortenoh@xxxxxxxxx>
branch nick: dhis2
timestamp: Thu 2014-06-12 20:05:28 +0200
message:
support pr rootNode serialiation configuration, only pretty print is supported right now (and only supported in Jackson2JsonNodeSerializer)
added:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/
dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/Configuration.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/Feature.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/SerializationFeature.java
modified:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/serializers/Jackson2JsonNodeSerializer.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/types/RootNode.java
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/AbstractCrudController.java
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== added directory 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config'
=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/Configuration.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/Configuration.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/Configuration.java 2014-06-12 18:05:28 +0000
@@ -0,0 +1,66 @@
+package org.hisp.dhis.node.config;
+
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
+ */
+
+import com.google.common.collect.ForwardingMap;
+import com.google.common.collect.Maps;
+
+import java.util.Map;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public class Configuration extends ForwardingMap<Feature, Boolean>
+{
+ @Override
+ protected Map<Feature, Boolean> delegate()
+ {
+ return Maps.newHashMap();
+ }
+
+ public void enable( Feature feature )
+ {
+ delegate().put( feature, true );
+ }
+
+ public void disable( Feature feature )
+ {
+ delegate().put( feature, false );
+ }
+
+ public boolean isEnabled( Feature feature )
+ {
+ if ( delegate().containsKey( feature ) )
+ {
+ return delegate().get( feature );
+ }
+
+ return feature.defaultState();
+ }
+}
=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/Feature.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/Feature.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/Feature.java 2014-06-12 18:05:28 +0000
@@ -0,0 +1,37 @@
+package org.hisp.dhis.node.config;
+
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
+ */
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public interface Feature
+{
+ boolean defaultState();
+}
=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/SerializationFeature.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/SerializationFeature.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/config/SerializationFeature.java 2014-06-12 18:05:28 +0000
@@ -0,0 +1,53 @@
+package org.hisp.dhis.node.config;
+
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
+ */
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public enum SerializationFeature implements Feature
+{
+ /**
+ * Enable pretty printing for serializers that support it.
+ */
+ PRETTY_PRINT( false );
+
+ private boolean state;
+
+ SerializationFeature( boolean state )
+ {
+ this.state = state;
+ }
+
+ @Override
+ public boolean defaultState()
+ {
+ return state;
+ }
+}
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/serializers/Jackson2JsonNodeSerializer.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/serializers/Jackson2JsonNodeSerializer.java 2014-06-08 11:06:30 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/serializers/Jackson2JsonNodeSerializer.java 2014-06-12 18:05:28 +0000
@@ -31,9 +31,9 @@
import com.fasterxml.jackson.annotation.JsonInclude;
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.AbstractNodeSerializer;
+import org.hisp.dhis.node.config.SerializationFeature;
import org.hisp.dhis.node.types.CollectionNode;
import org.hisp.dhis.node.types.ComplexNode;
import org.hisp.dhis.node.types.RootNode;
@@ -49,7 +49,7 @@
* @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
*/
@Component
-@Scope( value = "prototype", proxyMode = ScopedProxyMode.INTERFACES )
+@Scope(value = "prototype", proxyMode = ScopedProxyMode.INTERFACES)
public class Jackson2JsonNodeSerializer extends AbstractNodeSerializer
{
public static final String CONTENT_TYPE = "application/json";
@@ -59,9 +59,9 @@
static
{
objectMapper.setSerializationInclusion( JsonInclude.Include.NON_NULL );
- objectMapper.configure( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false );
- objectMapper.configure( SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, false );
- objectMapper.configure( SerializationFeature.WRAP_EXCEPTIONS, true );
+ objectMapper.configure( com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false );
+ objectMapper.configure( com.fasterxml.jackson.databind.SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, false );
+ objectMapper.configure( com.fasterxml.jackson.databind.SerializationFeature.WRAP_EXCEPTIONS, true );
objectMapper.getFactory().enable( JsonGenerator.Feature.QUOTE_FIELD_NAMES );
}
@@ -82,7 +82,20 @@
@Override
protected void startSerialize( RootNode rootNode, OutputStream outputStream ) throws Exception
{
- generator = objectMapper.getFactory().createGenerator( outputStream );
+ ObjectMapper mapper = objectMapper.copy();
+
+ if ( rootNode.configuration().isEnabled( SerializationFeature.PRETTY_PRINT ) )
+ {
+ mapper.enable( com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT );
+ }
+
+ generator = mapper.getFactory().createGenerator( outputStream );
+ }
+
+ @Override
+ protected void endSerialize( RootNode rootNode, OutputStream outputStream ) throws Exception
+ {
+ generator = null;
}
@Override
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/types/RootNode.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/types/RootNode.java 2014-06-06 07:40:49 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/node/types/RootNode.java 2014-06-12 18:05:28 +0000
@@ -29,6 +29,7 @@
*/
import org.hisp.dhis.node.Node;
+import org.hisp.dhis.node.config.Configuration;
/**
* @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
@@ -37,6 +38,8 @@
{
private String defaultNamespace;
+ private Configuration configuration = new Configuration();
+
public RootNode( String name )
{
super( name );
@@ -59,4 +62,9 @@
{
this.defaultNamespace = defaultNamespace;
}
+
+ public Configuration configuration()
+ {
+ return configuration;
+ }
}
=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/AbstractCrudController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/AbstractCrudController.java 2014-06-12 15:01:50 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/AbstractCrudController.java 2014-06-12 18:05:28 +0000
@@ -46,6 +46,7 @@
import org.hisp.dhis.hibernate.exception.DeleteAccessDeniedException;
import org.hisp.dhis.hibernate.exception.UpdateAccessDeniedException;
import org.hisp.dhis.importexport.ImportStrategy;
+import org.hisp.dhis.node.config.SerializationFeature;
import org.hisp.dhis.node.types.CollectionNode;
import org.hisp.dhis.node.types.ComplexNode;
import org.hisp.dhis.node.types.RootNode;