diff --git a/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverter.java b/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverter.java new file mode 100644 index 00000000..61b5b4ec --- /dev/null +++ b/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverter.java @@ -0,0 +1,55 @@ +/* + * Copyright 2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package org.springframework.geode.data.json.converter.support; + +import org.apache.geode.pdx.JSONFormatter; +import org.apache.geode.pdx.PdxInstance; + +import org.springframework.geode.data.json.converter.JsonToPdxConverter; +import org.springframework.lang.NonNull; + +/** + * A {@link JsonToPdxConverter} implementation using the Apache Geode {@link JSONFormatter} to convert + * from a {@literal JSON} {@link String} to a {@link PdxInstance}. + * + * @author John Blum + * @see org.apache.geode.pdx.JSONFormatter + * @see org.apache.geode.pdx.PdxInstance + * @see org.springframework.geode.data.json.converter.JsonToPdxConverter + * @since 1.3.0 + */ +public class JSONFormatterJsonToPdxConverter implements JsonToPdxConverter { + + /** + * @inheritDoc + */ + @Override + public final @NonNull PdxInstance convert(@NonNull String json) { + return convertJsonToPdx(json); + } + + /** + * Converts the given JSON to {@link PdxInstance PDX}. + * + * @param json {@link String} containing JSON to convert to PDX; must not be {@literal null}. + * @return JSON for the given {@link PdxInstance PDX}. + * @see org.apache.geode.pdx.JSONFormatter#fromJSON(String) + * @see org.apache.geode.pdx.PdxInstance + */ + protected @NonNull PdxInstance convertJsonToPdx(@NonNull String json) { + return JSONFormatter.fromJSON(json); + } +} diff --git a/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverterUnitTests.java b/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverterUnitTests.java new file mode 100644 index 00000000..5304b330 --- /dev/null +++ b/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverterUnitTests.java @@ -0,0 +1,57 @@ +/* + * Copyright 2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package org.springframework.geode.data.json.converter.support; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import org.junit.Test; + +import org.apache.geode.pdx.PdxInstance; + +/** + * Unit Tests for {@link JSONFormatterJsonToPdxConverter}. + * + * @author John Blum + * @see org.junit.Test + * @see org.mockito.Mockito + * @see org.apache.geode.pdx.PdxInstance + * @see org.springframework.geode.data.json.converter.support.JSONFormatterJsonToPdxConverter + * @since 1.3.0 + */ +public class JSONFormatterJsonToPdxConverterUnitTests { + + @Test + public void convertCallsConvertJsonToPdx() { + + String json = "{ \"name\": \"Jon Doe\" }"; + + PdxInstance mockPdxInstance = mock(PdxInstance.class); + + JSONFormatterJsonToPdxConverter converter = spy(new JSONFormatterJsonToPdxConverter()); + + doReturn(mockPdxInstance).when(converter).convertJsonToPdx(json); + + assertThat(converter.convert(json)).isEqualTo(mockPdxInstance); + + verify(converter, times(1)).convertJsonToPdx(eq(json)); + } +}