diff options
author | 2020-07-18 17:47:37 +0800 | |
---|---|---|
committer | 2020-07-18 17:54:40 +0800 | |
commit | ce0b806a18d8f370e1245c480836d18a04afa243 (patch) | |
tree | 99f670a4e9ef8681e432b5c0a098f5bbc2a72449 | |
parent | 490fc3c1fafe50d5fb0e23db5cfd10730be96866 (diff) |
Added Some Tools to GsonUtil
Change-Id: I66cd546e6cb9af5313e235cde93a7e914ff00b1f
Issue-ID: HOLMES-331
Signed-off-by: GuangrongFu <fu.guangrong@zte.com.cn>
5 files changed, 259 insertions, 47 deletions
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParser.java b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParser.java index c1eede7..377debb 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParser.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParser.java @@ -30,6 +30,8 @@ import java.util.Map.Entry; import java.util.Set;
import java.util.stream.Stream;
+import static org.onap.holmes.common.utils.GsonUtil.getAsString;
+
public class DcaeConfigurationParser {
private static final String RULE_CONTENT_SPLIT = "\\$\\$\\$";
@@ -85,15 +87,9 @@ public class DcaeConfigurationParser { private static SecurityInfo createSecurityInfo(String key, JsonObject entity) {
SecurityInfo securityInfo = new SecurityInfo();
- if (entity.has("type") && !entity.get("type").isJsonNull()) {
- securityInfo.setType(entity.get("type").getAsString());
- }
- if (entity.has("aaf_password") && !entity.get("aaf_password").isJsonNull()) {
- securityInfo.setAafPassword(entity.get("aaf_password").getAsString());
- }
- if (entity.has("aaf_username") && !entity.get("aaf_username").isJsonNull()) {
- securityInfo.setAafUsername(entity.get("aaf_username").getAsString());
- }
+ securityInfo.setType(getAsString(entity, "type"));
+ securityInfo.setAafPassword(getAsString(entity, "aaf_password"));
+ securityInfo.setAafUsername(getAsString(entity, "aaf_username"));
securityInfo.setSecureTopic(!key.endsWith("unsecure"));
fillInDmaapInfo(securityInfo, entity.get("dmaap_info").getAsJsonObject());
return securityInfo;
@@ -101,21 +97,11 @@ public class DcaeConfigurationParser { private static void fillInDmaapInfo(SecurityInfo securityInfo, JsonObject jsonDmaapInfo) {
SecurityInfo.DmaapInfo dmaapInfo = securityInfo.getDmaapInfo();
- if (jsonDmaapInfo.has("location") && !jsonDmaapInfo.get("location").isJsonNull()){
- dmaapInfo.setLocation(jsonDmaapInfo.get("location").getAsString());
- }
- if (jsonDmaapInfo.has("topic_url") && !jsonDmaapInfo.get("topic_url").isJsonNull()) {
- dmaapInfo.setTopicUrl(jsonDmaapInfo.get("topic_url").getAsString());
- }
- if (jsonDmaapInfo.has("client_id") && !jsonDmaapInfo.get("client_id").isJsonNull()) {
- dmaapInfo.setClientId(jsonDmaapInfo.get("client_id").getAsString());
- }
- if (jsonDmaapInfo.has("client_role") && !jsonDmaapInfo.get("client_role").isJsonNull()) {
- dmaapInfo.setClientRole(jsonDmaapInfo.get("client_role").getAsString());
- }
- if (jsonDmaapInfo.has("type") && !jsonDmaapInfo.get("type").isJsonNull()) {
- dmaapInfo.setType(jsonDmaapInfo.get("type").getAsString());
- }
+ dmaapInfo.setLocation(getAsString(jsonDmaapInfo, "location"));
+ dmaapInfo.setTopicUrl(getAsString(jsonDmaapInfo, "topic_url"));
+ dmaapInfo.setClientId(getAsString(jsonDmaapInfo, "client_id"));
+ dmaapInfo.setClientRole(getAsString(jsonDmaapInfo, "client_role"));
+ dmaapInfo.setType(getAsString(jsonDmaapInfo, "type"));
}
private static void fillInRules(DcaeConfigurations ret, JsonObject jsonObject) {
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/utils/GsonUtil.java b/holmes-actions/src/main/java/org/onap/holmes/common/utils/GsonUtil.java index 452aaf8..a5e6461 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/utils/GsonUtil.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/utils/GsonUtil.java @@ -1,5 +1,5 @@ /** - * Copyright 2018 ZTE Corporation. + * Copyright 2018-2020 ZTE Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,28 +17,25 @@ package org.onap.holmes.common.utils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; +import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; -import java.lang.reflect.Type; +import org.apache.commons.lang3.StringUtils; + import java.util.List; import java.util.Map; public class GsonUtil { private static Gson gson = null; + static { if (gson == null) { gson = new GsonBuilder() - .registerTypeAdapter(Integer.class, new JsonDeserializer<Integer>() { - @Override - public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - try { - return json.getAsInt(); - } catch (NumberFormatException e) { - return 0; - } + .registerTypeAdapter(Integer.class, (JsonDeserializer<Integer>) (json, typeOfT, context) -> { + try { + return json.getAsInt(); + } catch (NumberFormatException e) { + return 0; } }) .create(); @@ -65,31 +62,70 @@ public class GsonUtil { return t; } - public static <T> List<T> GsonToList(String gsonString, Class<T> cls) { + public static <T> List<T> jsonToList(String gsonString, Class<T> cls) { List<T> list = null; if (gson != null) { - list = gson.fromJson(gsonString, new TypeToken<List<T>>() { - }.getType()); + list = gson.fromJson(gsonString, TypeToken.getParameterized(List.class, cls).getType()); } return list; } - public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) { + public static <T> List<Map<String, T>> jsonToListMaps(String gsonString, Class<T> cls) { List<Map<String, T>> list = null; if (gson != null) { list = gson.fromJson(gsonString, - new TypeToken<List<Map<String, T>>>() { - }.getType()); + TypeToken.getParameterized(List.class, + TypeToken.getParameterized(Map.class, String.class, cls).getType() + ).getType() + ); } return list; } - public static <T> Map<String, T> GsonToMaps(String gsonString) { + public static <T> Map<String, T> jsonToMap(String gsonString, Class<T> cls) { Map<String, T> map = null; if (gson != null) { - map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() { - }.getType()); + map = gson.fromJson(gsonString, TypeToken.getParameterized(Map.class, String.class, cls).getType()); } return map; } + + public static String getAsString(JsonObject o, String field) { + String ret = null; + + if (field == null) { + field = StringUtils.EMPTY; + } + + if (o.has(field) && !o.get(field).isJsonNull()) { + ret = o.get(field).getAsString(); + } + return ret; + } + + public static long getAsLong(JsonObject o, String field) { + long ret = 0; + + if (field == null) { + field = StringUtils.EMPTY; + } + + if (o.has(field) && !o.get(field).isJsonNull()) { + ret = o.get(field).getAsLong(); + } + return ret; + } + + public static int getAsInt(JsonObject o, String field) { + int ret = 0; + + if (field == null) { + field = StringUtils.EMPTY; + } + + if (o.has(field) && !o.get(field).isJsonNull()) { + ret = o.get(field).getAsInt(); + } + return ret; + } } diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dcae/entity/DcaeConfigurationsTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dcae/entity/DcaeConfigurationsTest.java new file mode 100644 index 0000000..7f1db36 --- /dev/null +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dcae/entity/DcaeConfigurationsTest.java @@ -0,0 +1,45 @@ +/* + * Copyright 2020 ZTE Corporation. + * + * 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 + * + * http://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.onap.holmes.common.dcae.entity; + +import org.junit.Test; + +import java.util.Set; + +import static org.hamcrest.core.Is.is; +import static org.hamcrest.core.IsNull.notNullValue; +import static org.junit.Assert.*; + +public class DcaeConfigurationsTest { + + @Test + public void testAddDefaultRule_null_param() throws Exception { + DcaeConfigurations dcaeConfigurations = new DcaeConfigurations(); + dcaeConfigurations.addDefaultRule(null); + assertThat(dcaeConfigurations.getDefaultRules().size(), is(0)); + } + + @Test + public void testGettersAndSetters() throws Exception { + DcaeConfigurations dcaeConfigurations = new DcaeConfigurations(); + dcaeConfigurations.addSubSecInfo("test", new SecurityInfo()); + assertThat(dcaeConfigurations.getSubSecInfo("test"), notNullValue()); + + Set<String> keys = dcaeConfigurations.getSubKeys(); + assertThat(keys.contains("test"), is(true)); + } +}
\ No newline at end of file diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParserTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParserTest.java index c441942..0c188df 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParserTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParserTest.java @@ -43,7 +43,6 @@ public class DcaeConfigurationParserTest { @Test
public void parse() throws Exception {
DcaeConfigurations obj = DcaeConfigurationParser.parse(readConfigurationsFromFile("dcae.config.json"));
-
assertThat(obj.getDefaultRules().size(), equalTo(1));
assertThat(obj.get("collector.keystore.alias"), equalTo("dynamically generated"));
assertThat(((SecurityInfo) obj.getPubSecInfo("sec_measurement")).getAafPassword(), equalTo("aaf_password"));
diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/utils/GsonUtilTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/utils/GsonUtilTest.java new file mode 100644 index 0000000..ebba1d2 --- /dev/null +++ b/holmes-actions/src/test/java/org/onap/holmes/common/utils/GsonUtilTest.java @@ -0,0 +1,146 @@ +/** + * Copyright 2020 ZTE Corporation. + * + * 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 + * + * http://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.onap.holmes.common.utils; + +import com.google.gson.Gson; +import com.google.gson.JsonParser; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import static org.hamcrest.core.Is.is; +import static org.hamcrest.core.IsEqual.equalTo; +import static org.junit.Assert.assertThat; + +public class GsonUtilTest { + + private final TestBean bean1 = new TestBean("onap1", 10, 10f, 10d); + private final TestBean bean2 = new TestBean("onap2", 20, 20f, 20d); + private final Gson gson = new Gson(); + + @Test + public void beanToJson() { + String expected = gson.toJson(bean1); + String actual = GsonUtil.beanToJson(bean1); + assertThat(actual, equalTo(expected)); + } + + @Test + public void jsonToBean() { + TestBean expected = bean1; + TestBean actual = GsonUtil.jsonToBean(gson.toJson(expected), TestBean.class); + assertThat(expected.getString(), equalTo(actual.getString())); + assertThat(expected.getInteger(), equalTo(actual.getInteger())); + assertThat(expected.getaDouble(), equalTo(actual.getaDouble())); + assertThat(expected.getaFloat(), equalTo(actual.getaFloat())); + } + + @Test + public void jsonToList() { + List<TestBean> expected = Arrays.asList( bean1, bean2); + List<TestBean> actual = GsonUtil.jsonToList(gson.toJson(expected), TestBean.class); + + assertThat(expected.size(), equalTo(actual.size())); + for (TestBean tb : expected) { + assertThat(actual.contains(tb), is(true)); + } + } + + @Test + public void jsonToListMaps() { + List<Map<String, TestBean>> actual = GsonUtil.jsonToListMaps( + "[{\"onap1\":{\"string\":\"onap1\",\"integer\":10,\"aFloat\":10.0,\"aDouble\":10.0}}," + + "{\"onap2\":{\"string\":\"onap2\",\"integer\":20,\"aFloat\":20.0,\"aDouble\":20.0}}]", TestBean.class); + + assertThat(actual.get(0).get("onap1"), equalTo(new TestBean("onap1", 10, 10f, 10d))); + assertThat(actual.get(1).get("onap2"), equalTo(new TestBean("onap2", 20, 20f, 20d))); + } + + @Test + public void jsonToMap() { + Map<String, TestBean> actual = GsonUtil + .jsonToMap("{\"onap1\":{\"string\":\"onap1\",\"integer\":10,\"aFloat\":10.0,\"aDouble\":10.0}}", TestBean.class); + assertThat(actual.get("onap1"), equalTo(new TestBean("onap1", 10, 10f, 10d))); + } + + @Test + public void getAsString() { + assertThat("onap1", + equalTo(GsonUtil.getAsString(JsonParser.parseString(GsonUtil.beanToJson(bean1)).getAsJsonObject(),"string"))); + } + + @Test + public void getAsLong() { + assertThat(10L, + is(GsonUtil.getAsLong(JsonParser.parseString(GsonUtil.beanToJson(bean1)).getAsJsonObject(),"integer"))); + } + + @Test + public void getAsInt() { + assertThat(10, + is(GsonUtil.getAsInt(JsonParser.parseString(GsonUtil.beanToJson(bean1)).getAsJsonObject(),"integer"))); + } +} + +class TestBean { + private String string; + private int integer; + private float aFloat; + private double aDouble; + + public TestBean(String string, int integer, float aFloat, double aDouble) { + this.string = string; + this.integer = integer; + this.aFloat = aFloat; + this.aDouble = aDouble; + } + + public String getString() { + return string; + } + + public int getInteger() { + return integer; + } + + public float getaFloat() { + return aFloat; + } + + public double getaDouble() { + return aDouble; + } + + @Override + public boolean equals(Object o) { + if (o == null || ! (o instanceof TestBean)) { + return false; + } + + return string.equals(((TestBean) o).string) + && integer == ((TestBean) o).integer + && aDouble == ((TestBean) o).aDouble + && aFloat == ((TestBean) o).aFloat; + } + + @Override + public int hashCode() { + return string.hashCode(); + } +}
\ No newline at end of file |