diff --git a/modules/admin/admin-event/src/test/java/com/enonic/xp/admin/event/impl/json/EventJsonSerializerTest.java b/modules/admin/admin-event/src/test/java/com/enonic/xp/admin/event/impl/json/EventJsonSerializerTest.java index 1e18dee791c..22986fa2ac7 100644 --- a/modules/admin/admin-event/src/test/java/com/enonic/xp/admin/event/impl/json/EventJsonSerializerTest.java +++ b/modules/admin/admin-event/src/test/java/com/enonic/xp/admin/event/impl/json/EventJsonSerializerTest.java @@ -15,8 +15,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.event.Event; -import com.enonic.xp.json.ObjectMapperHelper; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; diff --git a/modules/admin/admin-impl/src/test/java/com/enonic/xp/admin/impl/StatusApiHandlerTest.java b/modules/admin/admin-impl/src/test/java/com/enonic/xp/admin/impl/StatusApiHandlerTest.java index 23a081a3c16..bcf7d2b96fa 100644 --- a/modules/admin/admin-impl/src/test/java/com/enonic/xp/admin/impl/StatusApiHandlerTest.java +++ b/modules/admin/admin-impl/src/test/java/com/enonic/xp/admin/impl/StatusApiHandlerTest.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; -import com.enonic.xp.json.ObjectMapperHelper; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.server.VersionInfo; import com.enonic.xp.web.WebResponse; diff --git a/modules/app/app-system/build.gradle b/modules/app/app-system/build.gradle index 4897ccc29b9..5f0cbe3775c 100644 --- a/modules/app/app-system/build.gradle +++ b/modules/app/app-system/build.gradle @@ -1,6 +1,7 @@ dependencies { compileOnly project( ':core:core-api' ) compileOnly project( ':script:script-api' ) + compileOnly project( ':core:core-internal' ) testImplementation project( ':tools:testing' ) } diff --git a/modules/app/app-system/src/main/java/com/enonic/xp/app/system/VacuumTaskHandler.java b/modules/app/app-system/src/main/java/com/enonic/xp/app/system/VacuumTaskHandler.java index dc2cbf6c463..0029565d1d7 100644 --- a/modules/app/app-system/src/main/java/com/enonic/xp/app/system/VacuumTaskHandler.java +++ b/modules/app/app-system/src/main/java/com/enonic/xp/app/system/VacuumTaskHandler.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.enonic.xp.app.system.listener.VacuumListenerImpl; -import com.enonic.xp.json.ObjectMapperHelper; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.script.bean.BeanContext; import com.enonic.xp.script.bean.ScriptBean; import com.enonic.xp.task.ProgressReporter; diff --git a/modules/core/core-api/build.gradle b/modules/core/core-api/build.gradle index 9b786373847..06a32ddbf36 100644 --- a/modules/core/core-api/build.gradle +++ b/modules/core/core-api/build.gradle @@ -14,11 +14,11 @@ dependencies { implementation project( ':core:core-internal' ) - implementation libs.jackson.datatype.jsr310 implementation libs.jparsec testFixturesImplementation libs.junit.jupiter.api testFixturesImplementation libs.mockito.core + testFixturesImplementation project( ':core:core-internal' ) testImplementation project( ':core:core-internal' ) } diff --git a/modules/core/core-api/src/main/java/com/enonic/xp/data/PropertySet.java b/modules/core/core-api/src/main/java/com/enonic/xp/data/PropertySet.java index 1cd8918782a..8d3b5cc3dc9 100644 --- a/modules/core/core-api/src/main/java/com/enonic/xp/data/PropertySet.java +++ b/modules/core/core-api/src/main/java/com/enonic/xp/data/PropertySet.java @@ -6,7 +6,9 @@ import java.time.LocalTime; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Function; @@ -325,7 +327,7 @@ public Property setProperty( final PropertyPath path, final Value value ) * If the property with values exists and is not a type of valueType given, an exception will be thrown. * Difference with setProperty is that this method does not set the property value. * - * @param name property name + * @param name property name * @param valueType expected value type */ public void ensureProperty( final String name, final ValueType valueType ) @@ -675,9 +677,7 @@ public Property[] addStrings( final String name, final String... values ) public Property[] addStrings( final String name, final Collection values ) { - return values.stream(). - map( ( value ) -> addProperty( name, ValueFactory.newString( value ) ) ). - toArray( Property[]::new ); + return values.stream().map( ( value ) -> addProperty( name, ValueFactory.newString( value ) ) ).toArray( Property[]::new ); } // setting xml @@ -1436,4 +1436,65 @@ private String enumToString( final Enum e ) return e.toString(); } + static PropertySet fromMap( Map map ) + { + PropertySet propertySet = new PropertySet(); + translate( map, propertySet ); + return propertySet; + } + + static void translate( final Map json, final PropertySet into ) + { + for ( Map.Entry field : json.entrySet() ) + { + addValue( into, field.getKey(), field.getValue() ); + } + } + + private static void addValue( final PropertySet parent, final String key, final Object value ) + { + if ( value instanceof List ) + { + for ( final Object objNode : (List) value ) + { + addValue( parent, key, objNode ); + } + } + else if ( value instanceof Map ) + { + final PropertySet parentSet = parent.addSet( key ); + for ( final Map.Entry next : ( (Map) value ).entrySet() ) + { + addValue( parentSet, next.getKey(), next.getValue() ); + } + } + else + { + parent.addProperty( key, resolveCoreValue( value ) ); + } + } + + private static Value resolveCoreValue( final Object value ) + { + return switch ( value ) + { + case String s -> ValueFactory.newString( s ); + case Integer i -> ValueFactory.newLong( i.longValue() ); + case Float v -> ValueFactory.newDouble( v.doubleValue() ); + case Double v -> ValueFactory.newDouble( v ); + case Boolean b -> ValueFactory.newBoolean( b ); + case Long l -> ValueFactory.newLong( l ); + case Instant instant -> ValueFactory.newDateTime( instant ); + case Date date -> ValueFactory.newDateTime( date.toInstant() ); + case LocalTime localTime -> ValueFactory.newLocalTime( localTime ); + case LocalDateTime localDateTime -> ValueFactory.newLocalDateTime( localDateTime ); + case LocalDate localDate -> ValueFactory.newLocalDate( localDate ); + case GeoPoint geoPoint -> ValueFactory.newGeoPoint( geoPoint ); + case Reference reference -> ValueFactory.newReference( reference ); + case BinaryReference binaryReference -> ValueFactory.newBinaryReference( binaryReference ); + case Link link -> ValueFactory.newLink( link ); + case null -> ValueFactory.newString( null ); + default -> ValueFactory.newString( value.toString() ); + }; + } } diff --git a/modules/core/core-api/src/main/java/com/enonic/xp/data/PropertyTree.java b/modules/core/core-api/src/main/java/com/enonic/xp/data/PropertyTree.java index 5d6738c0883..f969eb7994d 100644 --- a/modules/core/core-api/src/main/java/com/enonic/xp/data/PropertyTree.java +++ b/modules/core/core-api/src/main/java/com/enonic/xp/data/PropertyTree.java @@ -51,6 +51,11 @@ public Map toMap() return root.toMap(); } + public static PropertyTree fromMap( Map map ) + { + return new PropertyTree( PropertySet.fromMap( map ) ); + } + @Override public boolean equals( final Object o ) { diff --git a/modules/core/core-api/src/main/java/com/enonic/xp/issue/FindIssuesParams.java b/modules/core/core-api/src/main/java/com/enonic/xp/issue/FindIssuesParams.java index a703424602d..5b93b4d2bcf 100644 --- a/modules/core/core-api/src/main/java/com/enonic/xp/issue/FindIssuesParams.java +++ b/modules/core/core-api/src/main/java/com/enonic/xp/issue/FindIssuesParams.java @@ -1,9 +1,9 @@ package com.enonic.xp.issue; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.enonic.xp.content.ContentIds; +@Deprecated public final class FindIssuesParams { private final IssueStatus status; @@ -61,7 +61,6 @@ public Integer getSize() return size; } - @JsonIgnore public ContentIds getItems() { return items; diff --git a/modules/core/core-api/src/main/java/com/enonic/xp/repository/IndexMapping.java b/modules/core/core-api/src/main/java/com/enonic/xp/repository/IndexMapping.java index f83a334ee26..517e88eafc9 100644 --- a/modules/core/core-api/src/main/java/com/enonic/xp/repository/IndexMapping.java +++ b/modules/core/core-api/src/main/java/com/enonic/xp/repository/IndexMapping.java @@ -1,38 +1,59 @@ package com.enonic.xp.repository; import java.net.URL; +import java.util.Map; import com.fasterxml.jackson.databind.JsonNode; import com.enonic.xp.annotation.PublicApi; import com.enonic.xp.data.PropertyTree; -import com.enonic.xp.util.JsonHelper; +import com.enonic.xp.core.internal.json.JsonHelper; @PublicApi public class IndexMapping { private final JsonNode jsonNode; + @Deprecated + public IndexMapping( final JsonNode resourceNode ) + { + this.jsonNode = resourceNode; + } + + private IndexMapping( final JsonNode resourceNode, boolean ignore ) + { + this.jsonNode = resourceNode; + } + + @Deprecated public static IndexMapping from( final PropertyTree propertyTree ) { - return new IndexMapping( JsonHelper.from( propertyTree ) ); + return new IndexMapping( JsonHelper.from( propertyTree.toMap() ), false ); } + @Deprecated public static IndexMapping from( final URL url ) { - return new IndexMapping( JsonHelper.from( url ) ); + return new IndexMapping( JsonHelper.from( url ), false ); } + @Deprecated public static IndexMapping from( final String string ) { - return new IndexMapping( JsonHelper.from( string ) ); + return new IndexMapping( JsonHelper.from( string ), false ); } - public IndexMapping( final JsonNode resourceNode ) + public static IndexMapping from( final Map data ) { - this.jsonNode = resourceNode; + return new IndexMapping( JsonHelper.from( data ), false ); + } + + public Map getData() + { + return JsonHelper.toMap( jsonNode ); } + @Deprecated public JsonNode getNode() { return jsonNode; @@ -43,4 +64,11 @@ public String getAsString() return this.jsonNode.toString(); } + public IndexMapping merge( final IndexMapping with ) + { + final JsonNode newJsonNode = this.jsonNode.deepCopy(); + JsonHelper.merge( newJsonNode, with.jsonNode ); + + return new IndexMapping( newJsonNode, false ); + } } diff --git a/modules/core/core-api/src/main/java/com/enonic/xp/repository/IndexSettings.java b/modules/core/core-api/src/main/java/com/enonic/xp/repository/IndexSettings.java index 442b93bdf5e..e4f2b843be7 100644 --- a/modules/core/core-api/src/main/java/com/enonic/xp/repository/IndexSettings.java +++ b/modules/core/core-api/src/main/java/com/enonic/xp/repository/IndexSettings.java @@ -7,38 +7,61 @@ import com.enonic.xp.annotation.PublicApi; import com.enonic.xp.data.PropertyTree; -import com.enonic.xp.util.JsonHelper; +import com.enonic.xp.core.internal.json.JsonHelper; @PublicApi public class IndexSettings { private final JsonNode jsonNode; + @Deprecated + public IndexSettings( final JsonNode resourceNode ) + { + this.jsonNode = resourceNode; + } + + private IndexSettings( final JsonNode resourceNode, final boolean ignore) + { + this.jsonNode = resourceNode; + } + + @Deprecated public static IndexSettings from( final PropertyTree propertyTree ) { - return new IndexSettings( JsonHelper.from( propertyTree ) ); + return new IndexSettings( JsonHelper.from( propertyTree.toMap() ), false ); } + @Deprecated public static IndexSettings from( final URL url ) { - return new IndexSettings( JsonHelper.from( url ) ); + return new IndexSettings( JsonHelper.from( url ), false ); } + @Deprecated public static IndexSettings from( final String string ) { - return new IndexSettings( JsonHelper.from( string ) ); + return new IndexSettings( JsonHelper.from( string ), false ); } public static IndexSettings from( final Map settings ) { - return new IndexSettings( JsonHelper.from( settings ) ); + return new IndexSettings( JsonHelper.from( settings ), false ); } - public IndexSettings( final JsonNode resourceNode ) + public IndexSettings merge( final IndexSettings with ) { - this.jsonNode = resourceNode; + final JsonNode newJsonNode = this.jsonNode.deepCopy(); + JsonHelper.merge( newJsonNode, with.jsonNode ); + + return new IndexSettings( newJsonNode, false ); + } + + public Map getData() + { + return JsonHelper.toMap( jsonNode ); } + @Deprecated public JsonNode getNode() { return jsonNode; diff --git a/modules/core/core-api/src/test/java/com/enonic/xp/json/JsonToPropertyTreeTranslatorTest.java b/modules/core/core-api/src/test/java/com/enonic/xp/json/JsonToPropertyTreeTranslatorTest.java deleted file mode 100644 index 4a66086cc1f..00000000000 --- a/modules/core/core-api/src/test/java/com/enonic/xp/json/JsonToPropertyTreeTranslatorTest.java +++ /dev/null @@ -1,216 +0,0 @@ -package com.enonic.xp.json; - -import java.net.URL; - -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.enonic.xp.data.Property; -import com.enonic.xp.data.PropertyTree; -import com.enonic.xp.data.ValueTypes; -import com.enonic.xp.form.Form; -import com.enonic.xp.form.FormItemSet; -import com.enonic.xp.form.FormOptionSet; -import com.enonic.xp.form.FormOptionSetOption; -import com.enonic.xp.form.Input; -import com.enonic.xp.inputtype.InputTypeName; -import com.enonic.xp.inputtype.InputTypeProperty; -import com.enonic.xp.schema.content.ContentTypeName; -import com.enonic.xp.schema.relationship.RelationshipTypeName; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -public class JsonToPropertyTreeTranslatorTest -{ - private static final ObjectMapper MAPPER = new ObjectMapper(); - - @Test - public void all_input_types() - throws Exception - { - final JsonNode node = loadJson( "allInputTypes" ); - final PropertyTree data = new JsonToPropertyTreeTranslator( createFormForAllInputTypes(), true ).translate( node ); - - final Property media = data.getProperty( "media" ); - assertNotNull( media ); - assertEquals( ValueTypes.PROPERTY_SET.getName(), media.getType().getName() ); - } - - @Test - public void map_array_values() - throws Exception - { - final JsonNode node = loadJson( "allInputTypes" ); - - final PropertyTree data = new JsonToPropertyTreeTranslator( null, false ).translate( node ); - - final Property myArray = data.getProperty( "stringArray" ); - assertNotNull( myArray ); - assertEquals( ValueTypes.STRING.getName(), myArray.getType().getName() ); - - final Property myArray0 = data.getProperty( "stringArray[0]" ); - assertNotNull( myArray0 ); - - final Property myArray1 = data.getProperty( "stringArray[1]" ); - assertNotNull( myArray1 ); - - final Property myArray2 = data.getProperty( "stringArray[2]" ); - assertNotNull( myArray2 ); - } - - @Test - public void map_dateTime() - throws Exception - { - final JsonNode node = loadJson( "allInputTypes" ); - - final PropertyTree data = new JsonToPropertyTreeTranslator( createFormForAllInputTypes(), false ).translate( node ); - - final Property noTimezone = data.getProperty( "localDateTime" ); - assertNotNull( noTimezone ); - assertEquals( ValueTypes.LOCAL_DATE_TIME.getName(), noTimezone.getType().getName() ); - - final Property timezoned = data.getProperty( "dateTime" ); - assertNotNull( timezoned ); - assertEquals( ValueTypes.DATE_TIME.getName(), timezoned.getType().getName() ); - } - - private JsonNode loadJson( final String name ) - throws Exception - { - final String resource = "/" + getClass().getName().replace( '.', '/' ) + "-" + name + ".json"; - final URL url = getClass().getResource( resource ); - - assertNotNull( url, "File [" + resource + "] not found" ); - return MAPPER.readTree( url ); - } - - private Form createFormForAllInputTypes() - { - final FormItemSet set = FormItemSet.create(). - name( "set" ). - addFormItem( Input.create(). - name( "setString" ). - label( "String" ). - inputType( InputTypeName.TEXT_LINE ). - build() ). - addFormItem( Input.create(). - name( "setDouble" ). - label( "Double" ). - inputType( InputTypeName.DOUBLE ). - build() ). - build(); - - final FormOptionSet formOptionSet = FormOptionSet.create(). - name( "myOptionSet" ). - label( "My option set" ). - addOptionSetOption( FormOptionSetOption.create().name( "myOptionSetOption1" ).label( "option label1" ). - addFormItem( - Input.create().name( "myTextLine1" ).label( "myTextLine1" ).inputType( InputTypeName.TEXT_LINE ).build() ).build() ). - addOptionSetOption( FormOptionSetOption.create().name( "myOptionSetOption2" ).label( "option label2" ). - addFormItem( - Input.create().name( "myTextLine2" ).label( "myTextLine2" ).inputType( InputTypeName.TEXT_LINE ).build() ).build() ). - build(); - - return Form.create(). - addFormItem( Input.create(). - name( "textLine" ). - label( "Textline" ). - inputType( InputTypeName.TEXT_LINE ). - build() ). - addFormItem( Input.create(). - name( "stringArray" ). - label( "String array" ). - inputType( InputTypeName.TEXT_LINE ). - build() ). - addFormItem( Input.create(). - name( "double" ). - label( "Double" ). - inputType( InputTypeName.DOUBLE ). - build() ). - addFormItem( Input.create(). - name( "long" ). - label( "Long" ). - inputType( InputTypeName.LONG ). - build() ). - addFormItem( Input.create(). - name( "comboBox" ). - label( "Combobox" ). - inputType( InputTypeName.COMBO_BOX ). - inputTypeProperty( InputTypeProperty.create( "option", "label1" ).attribute( "value", "value1" ).build() ). - inputTypeProperty( InputTypeProperty.create( "option", "label2" ).attribute( "value", "value2" ).build() ). - build() ). - addFormItem( Input.create(). - name( "checkbox" ). - label( "Checkbox" ). - inputType( InputTypeName.CHECK_BOX ). - build() ). - addFormItem( Input.create(). - name( "tag" ). - label( "Tag" ). - inputType( InputTypeName.TAG ). - build() ). - addFormItem( Input.create(). - name( "contentSelector" ). - label( "Content selector" ). - inputType( InputTypeName.CONTENT_SELECTOR ). - inputTypeProperty( InputTypeProperty.create( "allowContentType", ContentTypeName.folder().toString() ).build() ). - inputTypeProperty( InputTypeProperty.create( "relationshipType", RelationshipTypeName.REFERENCE.toString() ).build() ). - build() ). - addFormItem( Input.create(). - name( "contentTypeFilter" ). - label( "Content type filter" ). - inputType( InputTypeName.CONTENT_TYPE_FILTER ). - build() ). - addFormItem( Input.create(). - name( "siteConfigurator" ). - inputType( InputTypeName.SITE_CONFIGURATOR ). - label( "Site configurator" ). - build() ). - addFormItem( Input.create(). - name( "date" ). - label( "Date" ). - inputType( InputTypeName.DATE ). - build() ). - addFormItem( Input.create(). - name( "time" ). - label( "Time" ). - inputType( InputTypeName.TIME ). - build() ). - addFormItem( Input.create(). - name( "geoPoint" ). - label( "Geo point" ). - inputType( InputTypeName.GEO_POINT ). - build() ). - addFormItem( Input.create(). - name( "htmlArea" ). - label( "Html area" ). - inputType( InputTypeName.HTML_AREA ). - build() ). - addFormItem( Input.create(). - name( "localDateTime" ). - label( "Local datetime" ). - inputType( InputTypeName.DATE_TIME ). - inputTypeProperty( InputTypeProperty.create( "timezone", "false" ).build() ). - build() ). - addFormItem( Input.create(). - name( "dateTime" ). - label( "Datetime" ). - inputType( InputTypeName.DATE_TIME ). - inputTypeProperty( InputTypeProperty.create( "timezone", "true" ).build() ). - build() ). - addFormItem( Input.create(). - name( "media" ). - label( "Image Uploader" ). - inputType( InputTypeName.IMAGE_UPLOADER ). - build() ). - addFormItem( set ). - addFormItem( formOptionSet ). - build(); - } - -} - diff --git a/modules/core/core-api/src/testFixtures/java/com/enonic/xp/support/JsonTestHelper.java b/modules/core/core-api/src/testFixtures/java/com/enonic/xp/support/JsonTestHelper.java index 0030fa117a2..20b5c16b2da 100644 --- a/modules/core/core-api/src/testFixtures/java/com/enonic/xp/support/JsonTestHelper.java +++ b/modules/core/core-api/src/testFixtures/java/com/enonic/xp/support/JsonTestHelper.java @@ -10,7 +10,7 @@ import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.databind.ObjectWriter; -import com.enonic.xp.json.ObjectMapperHelper; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/serializer/ContentDataSerializer.java b/modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/serializer/ContentDataSerializer.java index 308c5ca07bc..d45e5192de5 100644 --- a/modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/serializer/ContentDataSerializer.java +++ b/modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/serializer/ContentDataSerializer.java @@ -30,11 +30,11 @@ import com.enonic.xp.content.ValidationErrorCode; import com.enonic.xp.content.ValidationErrors; import com.enonic.xp.content.WorkflowInfo; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.data.PropertyPath; import com.enonic.xp.data.PropertySet; import com.enonic.xp.data.PropertyTree; import com.enonic.xp.icon.Thumbnail; -import com.enonic.xp.json.ObjectMapperHelper; import com.enonic.xp.node.NodeId; import com.enonic.xp.page.Page; import com.enonic.xp.project.ProjectName; diff --git a/modules/core/core-internal/build.gradle b/modules/core/core-internal/build.gradle index e1b1066c2b7..67f03a1ca84 100644 --- a/modules/core/core-internal/build.gradle +++ b/modules/core/core-internal/build.gradle @@ -1,7 +1,9 @@ dependencies { api libs.osgi.core + api libs.jackson.databind compileOnlyApi libs.osgi.service.componentannotations implementation libs.jsoup + implementation libs.jackson.datatype.jsr310 implementation( libs.owaspsanitizer ) { exclude group: 'com.google.guava' diff --git a/modules/core/core-api/src/main/java/com/enonic/xp/util/JsonHelper.java b/modules/core/core-internal/src/main/java/com/enonic/xp/core/internal/json/JsonHelper.java similarity index 72% rename from modules/core/core-api/src/main/java/com/enonic/xp/util/JsonHelper.java rename to modules/core/core-internal/src/main/java/com/enonic/xp/core/internal/json/JsonHelper.java index c59b8ef4951..c10adc5c81a 100644 --- a/modules/core/core-api/src/main/java/com/enonic/xp/util/JsonHelper.java +++ b/modules/core/core-internal/src/main/java/com/enonic/xp/core/internal/json/JsonHelper.java @@ -1,4 +1,4 @@ -package com.enonic.xp.util; +package com.enonic.xp.core.internal.json; import java.io.IOException; import java.net.URL; @@ -10,9 +10,6 @@ import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.enonic.xp.data.PropertyTree; -import com.enonic.xp.json.ObjectMapperHelper; - public class JsonHelper { private static final ObjectMapper MAPPER = ObjectMapperHelper.create(). @@ -26,18 +23,14 @@ public static JsonNode merge( JsonNode mainNode, JsonNode updateNode ) String fieldName = fieldNames.next(); JsonNode jsonNode = mainNode.get( fieldName ); - final boolean fieldExistsAndIsEmbeddedObject = jsonNode != null && jsonNode.isObject(); - if ( fieldExistsAndIsEmbeddedObject ) + if ( jsonNode instanceof ObjectNode ) { merge( jsonNode, updateNode.get( fieldName ) ); } - else + else if ( mainNode instanceof ObjectNode ) { - if ( mainNode instanceof ObjectNode ) - { - JsonNode value = updateNode.get( fieldName ); - ( (ObjectNode) mainNode ).replace( fieldName, value ); - } + JsonNode value = updateNode.get( fieldName ); + ( (ObjectNode) mainNode ).replace( fieldName, value ); } } return mainNode; @@ -60,16 +53,14 @@ public static JsonNode from( final URL url ) } } - public static JsonNode from( final PropertyTree propertyTree ) + public static JsonNode from( final Map settings ) { - final Map settingsMap = propertyTree.toMap(); - - return from( settingsMap ); + return MAPPER.valueToTree( settings ); } - public static JsonNode from( final Map settings ) + public static Map toMap( final JsonNode node ) { - return MAPPER.valueToTree( settings ); + return MAPPER.convertValue( node, Map.class ); } public static JsonNode from( final String json ) diff --git a/modules/core/core-api/src/main/java/com/enonic/xp/json/ObjectMapperHelper.java b/modules/core/core-internal/src/main/java/com/enonic/xp/core/internal/json/ObjectMapperHelper.java similarity index 95% rename from modules/core/core-api/src/main/java/com/enonic/xp/json/ObjectMapperHelper.java rename to modules/core/core-internal/src/main/java/com/enonic/xp/core/internal/json/ObjectMapperHelper.java index 8208a48493d..620c8980688 100644 --- a/modules/core/core-api/src/main/java/com/enonic/xp/json/ObjectMapperHelper.java +++ b/modules/core/core-internal/src/main/java/com/enonic/xp/core/internal/json/ObjectMapperHelper.java @@ -1,4 +1,4 @@ -package com.enonic.xp.json; +package com.enonic.xp.core.internal.json; import java.text.SimpleDateFormat; diff --git a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/upgrade/AbstractDumpUpgrader.java b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/upgrade/AbstractDumpUpgrader.java index 084da77a19c..70483ae3fdc 100644 --- a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/upgrade/AbstractDumpUpgrader.java +++ b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/dump/upgrade/AbstractDumpUpgrader.java @@ -13,8 +13,8 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.dump.DumpUpgradeStepResult; -import com.enonic.xp.json.ObjectMapperHelper; import com.enonic.xp.repo.impl.dump.RepoDumpException; import com.enonic.xp.repo.impl.dump.reader.FileDumpReader; import com.enonic.xp.util.Version; diff --git a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/index/IndexServiceImpl.java b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/index/IndexServiceImpl.java index f1ced094c36..7cc8cb00ae5 100644 --- a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/index/IndexServiceImpl.java +++ b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/index/IndexServiceImpl.java @@ -27,7 +27,6 @@ import com.enonic.xp.repository.IndexSettings; import com.enonic.xp.repository.Repository; import com.enonic.xp.repository.RepositoryId; -import com.enonic.xp.util.JsonHelper; @Component public class IndexServiceImpl @@ -189,7 +188,7 @@ private IndexSettings getSearchIndexSettings( final RepositoryId repositoryId ) if ( indexSettings != null ) { - return new IndexSettings( JsonHelper.merge( defaultIndexSettings.getNode(), indexSettings.getNode() ) ); + return defaultIndexSettings.merge( indexSettings ); } } @@ -207,7 +206,7 @@ private IndexMapping getSearchIndexMapping( final RepositoryId repositoryId ) if ( indexMapping != null ) { - return new IndexMapping( JsonHelper.merge( defaultIndexMapping.getNode(), indexMapping.getNode() ) ); + return defaultIndexMapping.merge( indexMapping ); } } diff --git a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/ImmutableVersionData.java b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/ImmutableVersionData.java index 585bc954cdd..e97f0676845 100644 --- a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/ImmutableVersionData.java +++ b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/ImmutableVersionData.java @@ -15,10 +15,10 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.google.common.io.ByteSource; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.data.ValueType; import com.enonic.xp.data.ValueTypes; import com.enonic.xp.index.ChildOrder; -import com.enonic.xp.json.ObjectMapperHelper; import com.enonic.xp.node.AttachedBinaries; import com.enonic.xp.node.AttachedBinary; import com.enonic.xp.node.NodeId; diff --git a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/NodeVersionJsonSerializer.java b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/NodeVersionJsonSerializer.java index f5ceae1c2d3..b5eb99f9d02 100644 --- a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/NodeVersionJsonSerializer.java +++ b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/node/json/NodeVersionJsonSerializer.java @@ -6,9 +6,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.io.ByteSource; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.index.IndexConfigDocument; import com.enonic.xp.index.PatternIndexConfigDocument; -import com.enonic.xp.json.ObjectMapperHelper; import com.enonic.xp.node.NodeVersion; import com.enonic.xp.security.acl.AccessControlList; diff --git a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/DefaultIndexResourceProvider.java b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/DefaultIndexResourceProvider.java index a51187a80f9..da40ed03230 100644 --- a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/DefaultIndexResourceProvider.java +++ b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/DefaultIndexResourceProvider.java @@ -1,9 +1,6 @@ package com.enonic.xp.repo.impl.repository; import java.net.URL; -import java.util.Objects; - -import com.fasterxml.jackson.databind.JsonNode; import com.enonic.xp.index.IndexType; import com.enonic.xp.repository.IndexException; @@ -11,7 +8,7 @@ import com.enonic.xp.repository.IndexResourceType; import com.enonic.xp.repository.IndexSettings; import com.enonic.xp.repository.RepositoryId; -import com.enonic.xp.util.JsonHelper; +import com.enonic.xp.core.internal.json.JsonHelper; public class DefaultIndexResourceProvider implements IndexResourceProvider @@ -26,28 +23,24 @@ public DefaultIndexResourceProvider( final String resourceBaseFolder ) @Override public IndexMapping getMapping( final RepositoryId repositoryId, final IndexType indexType ) { - final JsonNode defaultMapping = getResource( indexType, IndexResourceType.MAPPING ); - - return new IndexMapping( defaultMapping ); + return IndexMapping.from( JsonHelper.toMap( JsonHelper.from( getResource( indexType, IndexResourceType.MAPPING ) ) ) ); } @Override public IndexSettings getSettings( final RepositoryId repositoryId, final IndexType indexType ) { - final JsonNode defaultSettings = getResource( indexType, IndexResourceType.SETTINGS ); - return new IndexSettings( defaultSettings ); + return IndexSettings.from( JsonHelper.toMap( JsonHelper.from( getResource( indexType, IndexResourceType.SETTINGS ) ) ) ); } - private JsonNode getResource( final IndexType indexType, final IndexResourceType type ) + private URL getResource( final IndexType indexType, final IndexResourceType type ) { String fileName = resourceBaseFolder + "/" + type.getName() + "/" + "default" + "/" + indexType.getName() + "-" + type.getName() + ".json"; try { - final URL resource = DefaultIndexResourceProvider.class.getResource( fileName ); - return JsonHelper.from( Objects.requireNonNull( resource ) ); + return DefaultIndexResourceProvider.class.getResource( fileName ); } catch ( Exception e ) { diff --git a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/JsonToPropertyTreeTranslator.java b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/JsonToPropertyTreeTranslator.java deleted file mode 100644 index a4d0835d538..00000000000 --- a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/JsonToPropertyTreeTranslator.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.enonic.xp.repo.impl.repository; - -import java.util.Iterator; -import java.util.Map; - -import com.fasterxml.jackson.databind.JsonNode; - -import com.enonic.xp.data.PropertySet; -import com.enonic.xp.data.Value; -import com.enonic.xp.data.ValueFactory; - -final class JsonToPropertyTreeTranslator -{ - static void translate( final JsonNode json, final PropertySet into ) - { - final Iterator> fields = json.fields(); - - while ( fields.hasNext() ) - { - final Map.Entry next = fields.next(); - addValue( into, next.getKey(), next.getValue() ); - } - } - - private static void addValue( final PropertySet parent, final String key, final JsonNode value ) - { - if ( value.isArray() ) - { - for ( final JsonNode objNode : value ) - { - addValue( parent, key, objNode ); - } - } - else if ( value.isObject() ) - { - final PropertySet parentSet = parent.addSet( key ); - value.fields().forEachRemaining( ( objectValue ) -> addValue( parentSet, objectValue.getKey(), objectValue.getValue() ) ); - } - else - { - parent.addProperty( key, resolveCoreValue( value ) ); - } - } - - private static Value resolveCoreValue( final JsonNode value ) - { - if ( value.isDouble() ) - { - return ValueFactory.newDouble( value.doubleValue() ); - } - - if ( value.isTextual() ) - { - return ValueFactory.newString( value.textValue() ); - } - - if ( value.isInt() ) - { - return ValueFactory.newLong( (long) value.intValue() ); - } - - if ( value.isLong() ) - { - return ValueFactory.newLong( value.longValue() ); - } - - if ( value.isBoolean() ) - { - return ValueFactory.newBoolean( value.booleanValue() ); - } - - return ValueFactory.newString( value.toString() ); - } -} diff --git a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/NodeRepositoryServiceImpl.java b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/NodeRepositoryServiceImpl.java index ce163693d7f..374ef59241b 100644 --- a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/NodeRepositoryServiceImpl.java +++ b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/NodeRepositoryServiceImpl.java @@ -1,8 +1,6 @@ package com.enonic.xp.repo.impl.repository; -import java.util.Arrays; import java.util.Map; -import java.util.Objects; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; @@ -10,9 +8,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - import com.enonic.xp.index.IndexType; import com.enonic.xp.repo.impl.index.CreateIndexRequest; import com.enonic.xp.repo.impl.index.IndexServiceInternal; @@ -23,7 +18,6 @@ import com.enonic.xp.repository.RepositoryId; import com.enonic.xp.repository.RepositorySettings; import com.enonic.xp.security.SystemConstants; -import com.enonic.xp.util.JsonHelper; @Component public class NodeRepositoryServiceImpl @@ -93,7 +87,7 @@ private IndexSettings mergeWithDefaultSettings( final CreateRepositoryParams par final IndexSettings indexSettings = params.getRepositorySettings().getIndexSettings( indexType ); if ( indexSettings != null ) { - return new IndexSettings( JsonHelper.merge( defaultSettings.getNode(), indexSettings.getNode() ) ); + return defaultSettings.merge( indexSettings ); } return defaultSettings; @@ -109,13 +103,9 @@ private IndexSettings getDefaultSettings( final RepositoryId repositoryId, final try { - final String numberOfReplicasString = indexServiceInternal.getIndexSettings( SystemConstants.SYSTEM_REPO_ID, IndexType.VERSION ) - .getNode() - .get( "index.number_of_replicas" ) - .textValue(); - final int numberOfReplicas = Integer.parseInt( numberOfReplicasString ); - final ObjectNode indexNodeObject = (ObjectNode) defaultSettings.getNode().get( "index" ); - indexNodeObject.put( "number_of_replicas", numberOfReplicas ); + final Object numberOfReplicas = indexServiceInternal.getIndexSettings( SystemConstants.SYSTEM_REPO_ID, IndexType.VERSION ) + .getData().get( "index.number_of_replicas" ); + return defaultSettings.merge( IndexSettings.from( Map.of( "index", Map.of( "number_of_replicas", numberOfReplicas ) ) ) ); } catch ( Exception e ) { @@ -129,18 +119,10 @@ private IndexSettings getDefaultSettings( final RepositoryId repositoryId, final private static Map.Entry mergeWithDefaultMapping( final RepositorySettings repositorySettings, final RepositoryId repositoryId, final IndexType indexType ) { - return Map.entry( indexType, mergeMappings( DEFAULT_INDEX_RESOURCE_PROVIDER.getMapping( repositoryId, indexType ), - repositorySettings.getIndexMappings( indexType ) ) ); - } - - private static IndexMapping mergeMappings( IndexMapping... indexMappings ) - { - JsonNode intermediate = JsonHelper.from( Map.of() ); + final IndexMapping defaultMapping = DEFAULT_INDEX_RESOURCE_PROVIDER.getMapping( repositoryId, indexType ); + final IndexMapping settingsMapping = repositorySettings.getIndexMappings( indexType ); - Arrays.stream( indexMappings ) - .filter( Objects::nonNull ) - .forEach( indexMapping -> JsonHelper.merge( intermediate, indexMapping.getNode() ) ); - return new IndexMapping( intermediate ); + return Map.entry( indexType, settingsMapping != null ? defaultMapping.merge( settingsMapping ) : defaultMapping ); } private static String[] resolveIndexNames( final RepositoryId repositoryId ) diff --git a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/RepositoryNodeTranslator.java b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/RepositoryNodeTranslator.java index e682260404a..88ac4b3bc36 100644 --- a/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/RepositoryNodeTranslator.java +++ b/modules/core/core-repo/src/main/java/com/enonic/xp/repo/impl/repository/RepositoryNodeTranslator.java @@ -126,17 +126,13 @@ private static void toNodeData( final IndexDefinitions indexDefinitions, final P final IndexMapping indexMapping = indexDefinition.getMapping(); if ( indexMapping != null ) { - PropertySet indexMappingPropertySet = data.newSet(); - JsonToPropertyTreeTranslator.translate( indexMapping.getNode(), indexMappingPropertySet ); - indexConfigPropertySet.setSet( MAPPING_KEY, indexMappingPropertySet ); + indexConfigPropertySet.setSet( MAPPING_KEY, PropertyTree.fromMap( indexMapping.getData() ).getRoot().copy( data ) ); } final IndexSettings indexSettings = indexDefinition.getSettings(); if ( indexSettings != null ) { - PropertySet indexMappingPropertySet = data.newSet(); - JsonToPropertyTreeTranslator.translate( indexSettings.getNode(), indexMappingPropertySet ); - indexConfigPropertySet.setSet( SETTINGS_KEY, indexMappingPropertySet ); + indexConfigPropertySet.setSet( SETTINGS_KEY, PropertyTree.fromMap( indexSettings.getData() ).getRoot().copy( data ) ); } } } @@ -185,10 +181,10 @@ private static IndexDefinitions toIndexConfigs( final PropertyTree nodeData ) final IndexDefinition.Builder indexConfig = IndexDefinition.create(); final PropertySet mappingSet = indexConfigSet.getSet( MAPPING_KEY ); - indexConfig.mapping( mappingSet == null ? null : IndexMapping.from( mappingSet.toTree() ) ); + indexConfig.mapping( mappingSet == null ? null : IndexMapping.from( mappingSet.toTree().toMap() ) ); final PropertySet settingsSet = indexConfigSet.getSet( SETTINGS_KEY ); - indexConfig.settings( settingsSet == null ? null : IndexSettings.from( settingsSet.toTree() ) ); + indexConfig.settings( settingsSet == null ? null : IndexSettings.from( settingsSet.toTree().toMap() ) ); indexConfigs.add( indexType, indexConfig.build() ); } diff --git a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/FlattenedPageDataUpgraderTest.java b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/FlattenedPageDataUpgraderTest.java index 90a47685234..35395fb6086 100644 --- a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/FlattenedPageDataUpgraderTest.java +++ b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/FlattenedPageDataUpgraderTest.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.enonic.xp.data.PropertyTree; -import com.enonic.xp.json.JsonToPropertyTreeTranslator; import com.enonic.xp.repo.impl.dump.upgrade.flattenedpage.FlattenedPageDataUpgrader; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/FlattenedPageIndexUpgraderTest.java b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/FlattenedPageIndexUpgraderTest.java index 3ec750383a1..3e8ced8f9ca 100644 --- a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/FlattenedPageIndexUpgraderTest.java +++ b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/FlattenedPageIndexUpgraderTest.java @@ -10,12 +10,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.data.PropertyPath; import com.enonic.xp.data.PropertySet; import com.enonic.xp.data.PropertyTree; import com.enonic.xp.index.PatternIndexConfigDocument; -import com.enonic.xp.json.JsonToPropertyTreeTranslator; -import com.enonic.xp.json.ObjectMapperHelper; import com.enonic.xp.page.DescriptorKey; import com.enonic.xp.repo.impl.dump.upgrade.flattenedpage.FlattenedPageIndexUpgrader; import com.enonic.xp.repo.impl.node.json.IndexConfigDocumentJson; diff --git a/modules/core/core-api/src/main/java/com/enonic/xp/json/JsonToPropertyTreeTranslator.java b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/JsonToPropertyTreeTranslator.java similarity index 97% rename from modules/core/core-api/src/main/java/com/enonic/xp/json/JsonToPropertyTreeTranslator.java rename to modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/JsonToPropertyTreeTranslator.java index 70f60b92270..d6bbff159cb 100644 --- a/modules/core/core-api/src/main/java/com/enonic/xp/json/JsonToPropertyTreeTranslator.java +++ b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/dump/upgrade/JsonToPropertyTreeTranslator.java @@ -1,11 +1,10 @@ -package com.enonic.xp.json; +package com.enonic.xp.repo.impl.dump.upgrade; import java.util.Iterator; import java.util.Map; import com.fasterxml.jackson.databind.JsonNode; -import com.enonic.xp.annotation.PublicApi; import com.enonic.xp.data.Property; import com.enonic.xp.data.PropertySet; import com.enonic.xp.data.PropertyTree; @@ -19,11 +18,6 @@ import com.enonic.xp.inputtype.InputTypes; -/** - * @deprecated As of release 6.9 - */ -@PublicApi -@Deprecated(since = "6.9") public final class JsonToPropertyTreeTranslator { private final Form form; diff --git a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/elasticsearch/query/translator/factory/dsl/QueryBuilderTest.java b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/elasticsearch/query/translator/factory/dsl/QueryBuilderTest.java index 1901243b4e2..79ad6e8cbdd 100644 --- a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/elasticsearch/query/translator/factory/dsl/QueryBuilderTest.java +++ b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/elasticsearch/query/translator/factory/dsl/QueryBuilderTest.java @@ -13,11 +13,11 @@ import com.fasterxml.jackson.databind.ObjectWriter; import com.enonic.xp.core.impl.PropertyTreeMarshallerServiceFactory; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.data.PropertyTree; import com.enonic.xp.form.PropertyTreeMarshallerService; -import com.enonic.xp.json.ObjectMapperHelper; import com.enonic.xp.schema.mixin.MixinService; -import com.enonic.xp.util.JsonHelper; +import com.enonic.xp.core.internal.json.JsonHelper; public abstract class QueryBuilderTest { diff --git a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/node/dao/NodeVersionServiceImplTest.java b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/node/dao/NodeVersionServiceImplTest.java index f3642baebfb..607c6d1eb6d 100644 --- a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/node/dao/NodeVersionServiceImplTest.java +++ b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/node/dao/NodeVersionServiceImplTest.java @@ -19,6 +19,7 @@ import com.enonic.xp.context.Context; import com.enonic.xp.context.ContextAccessor; import com.enonic.xp.context.ContextBuilder; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.data.PropertyArrayJson; import com.enonic.xp.data.PropertySet; import com.enonic.xp.data.PropertyTree; @@ -29,7 +30,6 @@ import com.enonic.xp.index.PatternIndexConfigDocument; import com.enonic.xp.internal.blobstore.MemoryBlobRecord; import com.enonic.xp.internal.blobstore.MemoryBlobStore; -import com.enonic.xp.json.ObjectMapperHelper; import com.enonic.xp.node.NodeId; import com.enonic.xp.node.NodeType; import com.enonic.xp.node.NodeVersion; diff --git a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/node/json/NodeVersionJsonDumpSerializerTest.java b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/node/json/NodeVersionJsonDumpSerializerTest.java index cde78c19fc1..c8b5be37fdc 100644 --- a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/node/json/NodeVersionJsonDumpSerializerTest.java +++ b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/node/json/NodeVersionJsonDumpSerializerTest.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.io.CharSource; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.data.PropertyTree; import com.enonic.xp.data.Value; import com.enonic.xp.index.ChildOrder; @@ -18,7 +19,6 @@ import com.enonic.xp.index.IndexPath; import com.enonic.xp.index.IndexValueProcessor; import com.enonic.xp.index.PatternIndexConfigDocument; -import com.enonic.xp.json.ObjectMapperHelper; import com.enonic.xp.node.AttachedBinaries; import com.enonic.xp.node.AttachedBinary; import com.enonic.xp.node.NodeId; diff --git a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/repository/RepositoryNodeTranslatorTest.java b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/repository/RepositoryNodeTranslatorTest.java index 0c2c28a8bb1..cc3040027b2 100644 --- a/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/repository/RepositoryNodeTranslatorTest.java +++ b/modules/core/core-repo/src/test/java/com/enonic/xp/repo/impl/repository/RepositoryNodeTranslatorTest.java @@ -35,16 +35,16 @@ public void values_not_duplicated() settings( RepositorySettings.create(). indexDefinitions( IndexDefinitions.create(). add( IndexType.VERSION, IndexDefinition.create(). - mapping( IndexMapping.from( indexMapping ) ). - settings( IndexSettings.from( indexSettings ) ). + mapping( IndexMapping.from( indexMapping.toMap() ) ). + settings( IndexSettings.from( indexSettings.toMap() ) ). build() ). add( IndexType.BRANCH, IndexDefinition.create(). - mapping( IndexMapping.from( indexMapping ) ). - settings( IndexSettings.from( indexSettings ) ). + mapping( IndexMapping.from( indexMapping.toMap() ) ). + settings( IndexSettings.from( indexSettings.toMap() ) ). build() ). add( IndexType.COMMIT, IndexDefinition.create(). - mapping( IndexMapping.from( indexMapping ) ). - settings( IndexSettings.from( indexSettings ) ). + mapping( IndexMapping.from( indexMapping.toMap() ) ). + settings( IndexSettings.from( indexSettings.toMap() ) ). build() ). build() ). build() ). diff --git a/modules/core/core-schema/build.gradle b/modules/core/core-schema/build.gradle index 4268312ed16..3d91f32d17f 100644 --- a/modules/core/core-schema/build.gradle +++ b/modules/core/core-schema/build.gradle @@ -1,5 +1,6 @@ dependencies { implementation project( ':core:core-api' ) + implementation project( ':core:core-internal' ) testFixturesApi project( ':core:core-api' ) testImplementation( testFixtures( project(":core:core-app") ) ) diff --git a/modules/core/core-schema/src/main/java/com/enonic/xp/core/impl/form/PropertyTreeMarshallerServiceImpl.java b/modules/core/core-schema/src/main/java/com/enonic/xp/core/impl/form/PropertyTreeMarshallerServiceImpl.java index 6d48750c114..63e2d4d985c 100644 --- a/modules/core/core-schema/src/main/java/com/enonic/xp/core/impl/form/PropertyTreeMarshallerServiceImpl.java +++ b/modules/core/core-schema/src/main/java/com/enonic/xp/core/impl/form/PropertyTreeMarshallerServiceImpl.java @@ -8,10 +8,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.data.PropertyTree; import com.enonic.xp.form.Form; import com.enonic.xp.form.PropertyTreeMarshallerService; -import com.enonic.xp.json.ObjectMapperHelper; import com.enonic.xp.schema.mixin.MixinService; @Component(immediate = true) diff --git a/modules/itest/itest-core/src/test/java/com/enonic/xp/core/index/IndexServiceImplTest.java b/modules/itest/itest-core/src/test/java/com/enonic/xp/core/index/IndexServiceImplTest.java index 1ca441ddf33..b173c1323b6 100644 --- a/modules/itest/itest-core/src/test/java/com/enonic/xp/core/index/IndexServiceImplTest.java +++ b/modules/itest/itest-core/src/test/java/com/enonic/xp/core/index/IndexServiceImplTest.java @@ -286,7 +286,7 @@ public void getIndexSettings_empty() { final IndexSettings indexSettings = this.indexService.getIndexSettings( testRepoId, IndexType.SEARCH ); - assertNull( indexSettings.getNode().get( "index.invalid_path" ) ); + assertNull( indexSettings.getData().get( "index.invalid_path" ) ); } @Test @@ -300,7 +300,7 @@ public void getIndexSettings() final IndexSettings indexSettings = this.indexService.getIndexSettings( testRepoId, IndexType.SEARCH ); - assertEquals( "\"2\"", indexSettings.getNode().get( "index.number_of_replicas" ).toString() ); + assertEquals( "2", indexSettings.getData().get( "index.number_of_replicas" ) ); } } diff --git a/modules/jaxrs/jaxrs-impl/build.gradle b/modules/jaxrs/jaxrs-impl/build.gradle index de5153e9577..8987ebe14cf 100644 --- a/modules/jaxrs/jaxrs-impl/build.gradle +++ b/modules/jaxrs/jaxrs-impl/build.gradle @@ -4,6 +4,7 @@ dependencies { implementation ( libs.resteasy ) { exclude group: 'org.jboss.spec.javax.ws.rs' } + implementation project( ':core:core-internal' ) testFixturesApi project( ':jaxrs:jaxrs-api' ) testFixturesImplementation ( libs.resteasy ) { @@ -12,7 +13,9 @@ dependencies { testFixturesImplementation libs.jetty.client testFixturesImplementation libs.junit.jupiter.api testFixturesImplementation libs.mockito.core + testFixturesImplementation libs.jackson.jaxrs.jsonprovider testFixturesImplementation ( testFixtures( project( ':core:core-api' ) ) ) + testFixturesImplementation project( ':core:core-internal' ) testImplementation( testFixtures( project(":web:web-jetty") ) ) } diff --git a/modules/jaxrs/jaxrs-impl/src/main/java/com/enonic/xp/jaxrs/impl/CommonFeature.java b/modules/jaxrs/jaxrs-impl/src/main/java/com/enonic/xp/jaxrs/impl/CommonFeature.java index 95cd0bbb46f..3050f3dc105 100644 --- a/modules/jaxrs/jaxrs-impl/src/main/java/com/enonic/xp/jaxrs/impl/CommonFeature.java +++ b/modules/jaxrs/jaxrs-impl/src/main/java/com/enonic/xp/jaxrs/impl/CommonFeature.java @@ -3,9 +3,11 @@ import javax.ws.rs.core.Feature; import javax.ws.rs.core.FeatureContext; +import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; + +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.jaxrs.JaxRsComponent; import com.enonic.xp.jaxrs.impl.exception.JsonExceptionMapper; -import com.enonic.xp.jaxrs.impl.json.JsonObjectProvider; import com.enonic.xp.jaxrs.impl.multipart.MultipartFormReader; import com.enonic.xp.web.multipart.MultipartService; @@ -23,7 +25,7 @@ final class CommonFeature public boolean configure( final FeatureContext context ) { context.register( new MultipartFormReader( this.multipartService ) ); - context.register( new JsonObjectProvider() ); + context.register( new JacksonJsonProvider( ObjectMapperHelper.create() ) ); context.register( new JsonExceptionMapper() ); return true; } diff --git a/modules/jaxrs/jaxrs-impl/src/main/java/com/enonic/xp/jaxrs/impl/json/JsonObjectProvider.java b/modules/jaxrs/jaxrs-impl/src/main/java/com/enonic/xp/jaxrs/impl/json/JsonObjectProvider.java deleted file mode 100644 index 29247640b2a..00000000000 --- a/modules/jaxrs/jaxrs-impl/src/main/java/com/enonic/xp/jaxrs/impl/json/JsonObjectProvider.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.enonic.xp.jaxrs.impl.json; - -import javax.ws.rs.ext.Provider; - -import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; - -import com.enonic.xp.json.ObjectMapperHelper; - -@Provider -public final class JsonObjectProvider - extends JacksonJsonProvider -{ - public JsonObjectProvider() - { - super( ObjectMapperHelper.create() ); - } -} diff --git a/modules/jaxrs/jaxrs-impl/src/testFixtures/java/com/enonic/xp/jaxrs/impl/JaxRsResourceTestSupport.java b/modules/jaxrs/jaxrs-impl/src/testFixtures/java/com/enonic/xp/jaxrs/impl/JaxRsResourceTestSupport.java index ee2ec1cb688..da5da89672f 100644 --- a/modules/jaxrs/jaxrs-impl/src/testFixtures/java/com/enonic/xp/jaxrs/impl/JaxRsResourceTestSupport.java +++ b/modules/jaxrs/jaxrs-impl/src/testFixtures/java/com/enonic/xp/jaxrs/impl/JaxRsResourceTestSupport.java @@ -20,13 +20,13 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.enonic.xp.context.ContextAccessor; import com.enonic.xp.context.ContextAccessorSupport; import com.enonic.xp.context.LocalScope; -import com.enonic.xp.jaxrs.impl.json.JsonObjectProvider; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.jaxrs.impl.multipart.MultipartFormReader; -import com.enonic.xp.json.ObjectMapperHelper; import com.enonic.xp.session.Session; import com.enonic.xp.session.SessionMock; import com.enonic.xp.web.multipart.MultipartService; @@ -59,11 +59,10 @@ public final void setUp() throws Exception { this.multipartService = Mockito.mock( MultipartService.class ); - final MultipartFormReader reader = new MultipartFormReader( multipartService ); this.dispatcher = MockDispatcherFactory.createDispatcher(); - this.dispatcher.getProviderFactory().register( JsonObjectProvider.class ); - this.dispatcher.getProviderFactory().register( reader ); + this.dispatcher.getProviderFactory().register( new JacksonJsonProvider( MAPPER ) ); + this.dispatcher.getProviderFactory().register( new MultipartFormReader( multipartService ) ); this.dispatcher.getRegistry().addSingletonResource( getResourceInstance() ); mockCurrentContextHttpRequest(); diff --git a/modules/lib/lib-common/src/main/java/com/enonic/xp/lib/common/JsonToPropertyTreeTranslator.java b/modules/lib/lib-common/src/main/java/com/enonic/xp/lib/common/JsonToPropertyTreeTranslator.java deleted file mode 100644 index 2434b5562df..00000000000 --- a/modules/lib/lib-common/src/main/java/com/enonic/xp/lib/common/JsonToPropertyTreeTranslator.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.enonic.xp.lib.common; - -import java.util.Iterator; -import java.util.Map; - -import com.fasterxml.jackson.databind.JsonNode; - -import com.enonic.xp.data.PropertySet; -import com.enonic.xp.data.PropertyTree; -import com.enonic.xp.data.Value; -import com.enonic.xp.data.ValueFactory; - -public final class JsonToPropertyTreeTranslator -{ - public static PropertyTree translate( final JsonNode json ) - { - final PropertyTree propertyTree = new PropertyTree(); - traverse( json, propertyTree.getRoot() ); - return propertyTree; - } - - private static void traverse( final JsonNode json, final PropertySet parent ) - { - final Iterator> fields = json.fields(); - - while ( fields.hasNext() ) - { - final Map.Entry next = fields.next(); - addValue( parent, next.getKey(), next.getValue() ); - } - } - - private static void addValue( final PropertySet parent, final String key, final JsonNode value ) - { - if ( value.isArray() ) - { - for ( final JsonNode objNode : value ) - { - addValue( parent, key, objNode ); - } - } - else if ( value.isObject() ) - { - final PropertySet parentSet = parent.addSet( key ); - value.fields().forEachRemaining( ( objectValue ) -> addValue( parentSet, objectValue.getKey(), objectValue.getValue() ) ); - } - else - { - parent.addProperty( key, resolveCoreValue( value ) ); - } - } - - private static Value resolveCoreValue( final JsonNode value ) - { - if ( value.isDouble() ) - { - return ValueFactory.newDouble( value.doubleValue() ); - } - - if ( value.isTextual() ) - { - return ValueFactory.newString( value.textValue() ); - } - - if ( value.isInt() ) - { - return ValueFactory.newLong( (long) value.intValue() ); - } - - if ( value.isLong() ) - { - return ValueFactory.newLong( value.longValue() ); - } - - if ( value.isBoolean() ) - { - return ValueFactory.newBoolean( value.booleanValue() ); - } - - return ValueFactory.newString( value.toString() ); - } -} diff --git a/modules/lib/lib-common/src/test/java/com/enonic/xp/lib/common/JsonToPropertyTreeTranslatorTest.java b/modules/lib/lib-common/src/test/java/com/enonic/xp/lib/common/JsonToPropertyTreeTranslatorTest.java deleted file mode 100644 index 0e03c313606..00000000000 --- a/modules/lib/lib-common/src/test/java/com/enonic/xp/lib/common/JsonToPropertyTreeTranslatorTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.enonic.xp.lib.common; - -import java.net.URL; - -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.enonic.xp.data.Property; -import com.enonic.xp.data.PropertyTree; -import com.enonic.xp.data.ValueTypes; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -public class JsonToPropertyTreeTranslatorTest -{ - private static final ObjectMapper MAPPER = new ObjectMapper(); - - @Test - public void all_input_types() - throws Exception - { - final JsonNode node = loadJson( "allInputTypes" ); - final PropertyTree data = JsonToPropertyTreeTranslator.translate( node ); - - final Property media = data.getProperty( "media" ); - assertNotNull( media ); - assertEquals( ValueTypes.PROPERTY_SET.getName(), media.getType().getName() ); - } - - @Test - public void map_array_values() - throws Exception - { - final JsonNode node = loadJson( "stringArray" ); - - final PropertyTree data = JsonToPropertyTreeTranslator.translate( node ); - - final Property myArray = data.getProperty( "stringArray" ); - assertNotNull( myArray ); - assertEquals( ValueTypes.STRING.getName(), myArray.getType().getName() ); - - final Property myArray0 = data.getProperty( "stringArray[0]" ); - assertNotNull( myArray0 ); - - final Property myArray1 = data.getProperty( "stringArray[1]" ); - assertNotNull( myArray1 ); - - final Property myArray2 = data.getProperty( "stringArray[2]" ); - assertNotNull( myArray2 ); - } - - @Test - public void boolean_value() - throws Exception - { - final JsonNode node = loadJson( "allInputTypes" ); - - final PropertyTree data = JsonToPropertyTreeTranslator.translate( node ); - - final Property property = data.getProperty( "checkbox" ); - - assertTrue( property.getValue().isBoolean()); - assertEquals( true, property.getBoolean()); - } - - - private JsonNode loadJson( final String name ) - throws Exception - { - final String resource = "/" + getClass().getName().replace( '.', '/' ) + "-" + name + ".json"; - final URL url = getClass().getResource( resource ); - - assertNotNull( url, "File [" + resource + "] not found" ); - return MAPPER.readTree( url ); - } -} - diff --git a/modules/lib/lib-content/src/main/java/com/enonic/xp/lib/content/QueryContentHandler.java b/modules/lib/lib-content/src/main/java/com/enonic/xp/lib/content/QueryContentHandler.java index 56bb2cece63..ecaba38a402 100644 --- a/modules/lib/lib-content/src/main/java/com/enonic/xp/lib/content/QueryContentHandler.java +++ b/modules/lib/lib-content/src/main/java/com/enonic/xp/lib/content/QueryContentHandler.java @@ -11,8 +11,8 @@ import com.enonic.xp.content.Contents; import com.enonic.xp.content.FindContentIdsByQueryResult; import com.enonic.xp.content.GetContentByIdsParams; +import com.enonic.xp.data.PropertyTree; import com.enonic.xp.lib.common.JsonToFilterMapper; -import com.enonic.xp.lib.common.JsonToPropertyTreeTranslator; import com.enonic.xp.lib.content.mapper.ContentsResultMapper; import com.enonic.xp.query.aggregation.AggregationQuery; import com.enonic.xp.query.expr.ConstraintExpr; @@ -26,7 +26,6 @@ import com.enonic.xp.query.parser.QueryParser; import com.enonic.xp.schema.content.ContentTypeNames; import com.enonic.xp.script.ScriptValue; -import com.enonic.xp.util.JsonHelper; @SuppressWarnings("unused") public final class QueryContentHandler @@ -94,14 +93,14 @@ else if ( sort.isValue() ) else if ( sort.isObject() ) { - return List.of( DslOrderExpr.from( JsonToPropertyTreeTranslator.translate( JsonHelper.from( sort.getMap() ) ) ) ); + return List.of( DslOrderExpr.from( PropertyTree.fromMap( sort.getMap() ) ) ); } else if ( sort.isArray() ) { return sort.getArray() .stream() - .map( expr -> DslOrderExpr.from( JsonToPropertyTreeTranslator.translate( JsonHelper.from( expr.getMap() ) ) ) ) + .map( expr -> DslOrderExpr.from( PropertyTree.fromMap( expr.getMap() ) ) ) .collect( Collectors.toList() ); } @@ -120,7 +119,7 @@ else if ( query.isValue() ) } else if ( query.isObject() ) { - return DslExpr.from( JsonToPropertyTreeTranslator.translate( JsonHelper.from( query.getMap() ) ) ); + return DslExpr.from( PropertyTree.fromMap( query.getMap() ) ); } throw new IllegalArgumentException( "query must be a String or JSON object" ); diff --git a/modules/lib/lib-node/build.gradle b/modules/lib/lib-node/build.gradle index 814e80529f3..914beccf8e8 100644 --- a/modules/lib/lib-node/build.gradle +++ b/modules/lib/lib-node/build.gradle @@ -5,5 +5,6 @@ dependencies { implementation project( ':lib:lib-value' ) implementation project( ':lib:lib-common' ) + testImplementation project( ':core:core-internal' ) testImplementation project( ':tools:testing' ) } diff --git a/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/AbstractFindNodesQueryHandler.java b/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/AbstractFindNodesQueryHandler.java index 57f61b93029..88123905c62 100644 --- a/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/AbstractFindNodesQueryHandler.java +++ b/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/AbstractFindNodesQueryHandler.java @@ -4,8 +4,8 @@ import java.util.Map; import java.util.stream.Collectors; +import com.enonic.xp.data.PropertyTree; import com.enonic.xp.lib.common.JsonToFilterMapper; -import com.enonic.xp.lib.common.JsonToPropertyTreeTranslator; import com.enonic.xp.node.NodeQuery; import com.enonic.xp.query.aggregation.AggregationQueries; import com.enonic.xp.query.expr.ConstraintExpr; @@ -18,7 +18,6 @@ import com.enonic.xp.query.parser.QueryParser; import com.enonic.xp.query.suggester.SuggestionQueries; import com.enonic.xp.script.ScriptValue; -import com.enonic.xp.util.JsonHelper; abstract class AbstractFindNodesQueryHandler extends AbstractNodeHandler @@ -92,7 +91,7 @@ else if ( query.isValue() ) } else if ( query.isObject() ) { - return DslExpr.from( JsonToPropertyTreeTranslator.translate( JsonHelper.from( query.getMap() ) ) ); + return DslExpr.from( PropertyTree.fromMap( query.getMap() ) ); } throw new IllegalArgumentException( "query must be a String or JSON object" ); } @@ -109,15 +108,13 @@ private List buildOrderExpr() } else if ( sort.isObject() ) { - - return List.of( DslOrderExpr.from( JsonToPropertyTreeTranslator.translate( JsonHelper.from( sort.getMap() ) ) ) ); - + return List.of( DslOrderExpr.from( PropertyTree.fromMap( sort.getMap() ) ) ); } else if ( sort.isArray() ) { return sort.getArray() .stream() - .map( expr -> DslOrderExpr.from( JsonToPropertyTreeTranslator.translate( JsonHelper.from( expr.getMap() ) ) ) ) + .map( expr -> DslOrderExpr.from( PropertyTree.fromMap( expr.getMap() ) ) ) .collect( Collectors.toList() ); } diff --git a/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/AbstractNodeHandler.java b/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/AbstractNodeHandler.java index 9f7e6b2eef1..bcbec795dbb 100644 --- a/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/AbstractNodeHandler.java +++ b/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/AbstractNodeHandler.java @@ -95,6 +95,5 @@ public B nodeService( final NodeService val ) nodeService = val; return (B) this; } - } } diff --git a/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/NodeHandler.java b/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/NodeHandler.java index e401b7c3498..54c1b5ec0c0 100644 --- a/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/NodeHandler.java +++ b/modules/lib/lib-node/src/main/java/com/enonic/xp/lib/node/NodeHandler.java @@ -36,7 +36,10 @@ public NodeHandler( final Context context, final NodeService nodeService ) @SuppressWarnings("unused") public Object create( final ScriptValue params ) { - return execute( CreateNodeHandler.create().nodeService( this.nodeService ).params( params ).build() ); + return execute( CreateNodeHandler.create() + .nodeService( this.nodeService ) + .params( params ) + .build() ); } @SuppressWarnings("unused") @@ -64,7 +67,10 @@ public Object get( final GetNodeHandlerParams params ) @SuppressWarnings("unused") public Object delete( final String[] keys ) { - return execute( DeleteNodeHandler.create().nodeService( this.nodeService ).keys( NodeKeys.from( keys ) ).build() ); + return execute( DeleteNodeHandler.create() + .nodeService( this.nodeService ) + .keys( NodeKeys.from( keys ) ) + .build() ); } @SuppressWarnings("unused") diff --git a/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/IndexConfigFactoryTest.java b/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/IndexConfigFactoryTest.java index da26caa97e9..6d049a0a49a 100644 --- a/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/IndexConfigFactoryTest.java +++ b/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/IndexConfigFactoryTest.java @@ -4,7 +4,6 @@ import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.ImmutableSortedSet; import com.enonic.xp.data.PropertyPath; @@ -15,10 +14,10 @@ import com.enonic.xp.index.IndexValueProcessor; import com.enonic.xp.index.PathIndexConfig; import com.enonic.xp.index.PatternIndexConfigDocument; -import com.enonic.xp.lib.common.JsonToPropertyTreeTranslator; -import com.enonic.xp.util.JsonHelper; +import com.enonic.xp.core.internal.json.JsonHelper; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -107,9 +106,7 @@ public void unknown_alias() private IndexConfigDocument create( final String json ) { - final JsonNode node = JsonHelper.from( json ); - - final PropertyTree properties = JsonToPropertyTreeTranslator.translate( node ); + final PropertyTree properties = PropertyTree.fromMap( JsonHelper.toMap( JsonHelper.from( json ) ) ); return new IndexConfigFactory( properties.getRoot() ).create(); } @@ -133,7 +130,7 @@ private PatternIndexConfigDocument createFullConfig() " \"indexValueProcessors\": []\n" + " }\n" + " }\n" + " ]\n" + " }" ); - assertTrue( indexConfigDoc instanceof PatternIndexConfigDocument ); + assertInstanceOf( PatternIndexConfigDocument.class, indexConfigDoc ); return (PatternIndexConfigDocument) indexConfigDoc; } diff --git a/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/PermissionsFactoryTest.java b/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/PermissionsFactoryTest.java index 2370addc40c..5e481ffb53d 100644 --- a/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/PermissionsFactoryTest.java +++ b/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/PermissionsFactoryTest.java @@ -4,16 +4,13 @@ import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; - import com.enonic.xp.data.PropertyTree; -import com.enonic.xp.lib.common.JsonToPropertyTreeTranslator; import com.enonic.xp.security.PrincipalKey; import com.enonic.xp.security.RoleKeys; import com.enonic.xp.security.acl.AccessControlEntry; import com.enonic.xp.security.acl.AccessControlList; import com.enonic.xp.security.acl.Permission; -import com.enonic.xp.util.JsonHelper; +import com.enonic.xp.core.internal.json.JsonHelper; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -110,9 +107,7 @@ private void checkDenied( final AccessControlList acl, final String principalKey private AccessControlList create( final String json ) { - final JsonNode node = JsonHelper.from( json ); - - final PropertyTree properties = JsonToPropertyTreeTranslator.translate( node ); + final PropertyTree properties = PropertyTree.fromMap( JsonHelper.toMap( JsonHelper.from( json ) ) ); return new PermissionsFactory( properties.getRoot().getSets( "_permissions" ) ).create(); } diff --git a/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/mapper/BaseMapperTest.java b/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/mapper/BaseMapperTest.java index d8644de51ed..79d488a093a 100644 --- a/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/mapper/BaseMapperTest.java +++ b/modules/lib/lib-node/src/test/java/com/enonic/xp/lib/node/mapper/BaseMapperTest.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.enonic.xp.json.ObjectMapperHelper; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.node.NodeBranchEntry; import com.enonic.xp.node.NodeId; import com.enonic.xp.node.NodePath; diff --git a/modules/lib/lib-repo/src/main/java/com/enonic/xp/lib/repo/CreateRepositoryHandler.java b/modules/lib/lib-repo/src/main/java/com/enonic/xp/lib/repo/CreateRepositoryHandler.java index d16c8e7cee2..2a89d8e85a8 100644 --- a/modules/lib/lib-repo/src/main/java/com/enonic/xp/lib/repo/CreateRepositoryHandler.java +++ b/modules/lib/lib-repo/src/main/java/com/enonic/xp/lib/repo/CreateRepositoryHandler.java @@ -5,9 +5,7 @@ import java.util.function.Supplier; import java.util.stream.Collectors; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - +import com.enonic.xp.data.PropertyTree; import com.enonic.xp.index.ChildOrder; import com.enonic.xp.index.IndexType; import com.enonic.xp.lib.repo.mapper.RepositoryMapper; @@ -32,8 +30,6 @@ public class CreateRepositoryHandler implements ScriptBean { - private static final ObjectMapper MAPPER = new ObjectMapper(); - private RepositoryId repositoryId; private IndexDefinitions indexDefinitions; @@ -87,11 +83,13 @@ public void setIndexDefinitions( final ScriptValue data ) if ( indexDefinitionMap != null ) { final Map indexDefinitionSettingsMap = (Map) indexDefinitionMap.get( "settings" ); - IndexSettings indexSettings = - indexDefinitionSettingsMap == null ? null : new IndexSettings( createJson( indexDefinitionSettingsMap ) ); + IndexSettings indexSettings; + indexSettings = + indexDefinitionSettingsMap == null ? null : IndexSettings.from( indexDefinitionSettingsMap ); final Map indexDefinitionMappingMap = (Map) indexDefinitionMap.get( "mapping" ); - IndexMapping indexMapping = - indexDefinitionMappingMap == null ? null : new IndexMapping( createJson( indexDefinitionMappingMap ) ); + IndexMapping indexMapping; + indexMapping = + indexDefinitionMappingMap == null ? null : IndexMapping.from( indexDefinitionMappingMap ); final IndexDefinition indexDefinition = IndexDefinition.create().settings( indexSettings ).mapping( indexMapping ).build(); indexDefinitionsBuilder.add( indexType, indexDefinition ); @@ -154,11 +152,6 @@ private List resolvePermissions( ScriptValue permissions ) collect( Collectors.toUnmodifiableList() ); } - private JsonNode createJson( final Map value ) - { - return MAPPER.valueToTree( value ); - } - @Override public void initialize( final BeanContext context ) { diff --git a/modules/lib/lib-repo/src/main/java/com/enonic/xp/lib/repo/mapper/RepositoryMapper.java b/modules/lib/lib-repo/src/main/java/com/enonic/xp/lib/repo/mapper/RepositoryMapper.java index 437880d6582..276ea85507d 100644 --- a/modules/lib/lib-repo/src/main/java/com/enonic/xp/lib/repo/mapper/RepositoryMapper.java +++ b/modules/lib/lib-repo/src/main/java/com/enonic/xp/lib/repo/mapper/RepositoryMapper.java @@ -1,11 +1,8 @@ package com.enonic.xp.lib.repo.mapper; -import com.fasterxml.jackson.databind.JsonNode; - import com.enonic.xp.branch.Branches; import com.enonic.xp.data.PropertyTree; import com.enonic.xp.index.IndexType; -import com.enonic.xp.lib.common.JsonToPropertyTreeTranslator; import com.enonic.xp.lib.common.PropertyTreeMapper; import com.enonic.xp.repository.IndexDefinition; import com.enonic.xp.repository.IndexDefinitions; @@ -31,7 +28,7 @@ public void serialize( final MapGenerator gen ) gen.value( "transient", repository.isTransient() ); serialize( gen, repository.getBranches() ); serialize( gen, repository.getSettings() ); - serialize( gen, repository.getData() ); + serialize( "data", gen, repository.getData() ); } private void serialize( final MapGenerator gen, final Branches branches ) @@ -48,9 +45,9 @@ private void serialize( final MapGenerator gen, final RepositorySettings setting gen.end(); } - private void serialize( final MapGenerator gen, final PropertyTree repositoryData ) + private void serialize( String field, final MapGenerator gen, final PropertyTree repositoryData ) { - gen.map( "data" ); + gen.map( field ); new PropertyTreeMapper( repositoryData ).serialize( gen ); gen.end(); } @@ -69,17 +66,12 @@ private void serialize( final MapGenerator gen, final IndexDefinitions indexDefi if ( indexDefinition.getSettings() != null ) { - gen.map( "settings" ); - serialize( gen, indexDefinition.getSettings().getNode() ); - gen.end(); + serialize( "settings", gen, PropertyTree.fromMap( indexDefinition.getSettings().getData() ) ); } if ( indexDefinition.getMapping() != null ) { - - gen.map( "mapping" ); - serialize( gen, indexDefinition.getMapping().getNode() ); - gen.end(); + serialize( "mapping", gen, PropertyTree.fromMap( indexDefinition.getMapping().getData() ) ); } gen.end(); @@ -88,10 +80,4 @@ private void serialize( final MapGenerator gen, final IndexDefinitions indexDefi gen.end(); } } - - private void serialize( final MapGenerator gen, final JsonNode jsonNode ) - { - final PropertyTree propertyTree = JsonToPropertyTreeTranslator.translate( jsonNode ); - new PropertyTreeMapper( propertyTree ).serialize( gen ); - } } diff --git a/modules/server/server-rest/src/main/java/com/enonic/xp/impl/server/rest/ModelToStringHelper.java b/modules/server/server-rest/src/main/java/com/enonic/xp/impl/server/rest/ModelToStringHelper.java index 6d434847b4c..c4df04e23ac 100644 --- a/modules/server/server-rest/src/main/java/com/enonic/xp/impl/server/rest/ModelToStringHelper.java +++ b/modules/server/server-rest/src/main/java/com/enonic/xp/impl/server/rest/ModelToStringHelper.java @@ -3,7 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.enonic.xp.json.ObjectMapperHelper; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; public final class ModelToStringHelper { diff --git a/modules/tools/testing/src/main/java/com/enonic/xp/testing/helper/JsonAssert.java b/modules/tools/testing/src/main/java/com/enonic/xp/testing/helper/JsonAssert.java index 8bbc4115fd2..aeb1e6531cd 100644 --- a/modules/tools/testing/src/main/java/com/enonic/xp/testing/helper/JsonAssert.java +++ b/modules/tools/testing/src/main/java/com/enonic/xp/testing/helper/JsonAssert.java @@ -5,7 +5,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.enonic.xp.json.ObjectMapperHelper; +import com.enonic.xp.core.internal.json.ObjectMapperHelper; import com.enonic.xp.script.serializer.JsonMapGenerator; import com.enonic.xp.script.serializer.MapSerializable;