summaryrefslogtreecommitdiffstats
path: root/sources/hv-collector-main/src/main
diff options
context:
space:
mode:
authorpbiniek <pawel.biniek@nokia.com>2019-02-27 23:31:15 +0100
committerpbiniek <pawel.biniek@nokia.com>2019-03-11 12:43:48 +0100
commite9220923d2a13fa787f2f2f7b8bedc60cc9b2324 (patch)
tree9d8b4e9a5ec6da712a2d76b6897c9f66e79e2c44 /sources/hv-collector-main/src/main
parentf938e8a87a33f8db78115a92f5130d6296171c62 (diff)
Added JSON config file format utils
Change-Id: I97fdd72324495b4c838e44c306cbcacac6b11bc1 Signed-off-by: Pawel Biniek <pawel.biniek@nokia.com> Issue-ID: DCAEGEN2-1323
Diffstat (limited to 'sources/hv-collector-main/src/main')
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/ConfigFactory.kt46
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/PartialConfiguration.kt59
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/AddressAdapter.kt50
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/OptionAdapter.kt40
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RouteAdapter.kt43
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RoutingAdapter.kt40
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/SecurityKeysAdapter.kt51
7 files changed, 329 insertions, 0 deletions
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/ConfigFactory.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/ConfigFactory.kt
new file mode 100644
index 00000000..2262b6ff
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/ConfigFactory.kt
@@ -0,0 +1,46 @@
+/*
+ * ============LICENSE_START=======================================================
+ * dcaegen2-collectors-veshv
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.dcae.collectors.veshv.main.config
+
+import arrow.core.Option
+import com.google.gson.GsonBuilder
+import org.onap.dcae.collectors.veshv.main.config.adapters.*
+import org.onap.dcae.collectors.veshv.model.Route
+import org.onap.dcae.collectors.veshv.model.Routing
+import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys
+import java.io.Reader
+import java.net.InetSocketAddress
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since February 2019
+ */
+class ConfigFactory {
+ private val gson = GsonBuilder()
+ .registerTypeAdapter(InetSocketAddress::class.java, AddressAdapter())
+ .registerTypeAdapter(Route::class.java, RouteAdapter())
+ .registerTypeAdapter(Routing::class.java, RoutingAdapter())
+ .registerTypeAdapter(Option::class.java, OptionAdapter())
+ .registerTypeAdapter(SecurityKeys::class.java, SecurityKeysAdapter())
+ .create()
+
+ fun loadConfig(input: Reader): PartialConfiguration =
+ gson.fromJson(input, PartialConfiguration::class.java)
+}
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/PartialConfiguration.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/PartialConfiguration.kt
new file mode 100644
index 00000000..1bccc217
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/PartialConfiguration.kt
@@ -0,0 +1,59 @@
+/*
+ * ============LICENSE_START=======================================================
+ * dcaegen2-collectors-veshv
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.dcae.collectors.veshv.main.config
+
+import arrow.core.Option
+import org.onap.dcae.collectors.veshv.model.Routing
+import org.onap.dcae.collectors.veshv.utils.logging.LogLevel
+import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys
+import java.net.InetSocketAddress
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since February 2019
+ */
+data class PartialConfiguration(
+ val server : Option<PartialServerConfig>,
+ val cbs : Option<PartialCbsConfig>,
+ val security : Option<PartialSecurityConfig>,
+ val kafka : Option<PartialKafkaConfig>,
+ val logLevel : Option<LogLevel>
+)
+data class PartialSecurityConfig(
+ val sslDisable : Option<Boolean>,
+ val keys : Option<SecurityKeys>)
+
+data class PartialCbsConfig(
+ val firstRequestDelaySec : Option<Int>,
+ val requestIntervalSec : Option<Int>
+)
+
+data class PartialServerConfig(
+ val healthCheckApiPort : Option<Int>,
+ val listenPort : Option<Int>,
+ val idleTimeoutSec : Option<Int>,
+ val maximumPayloadSizeBytes : Option<Int>,
+ val dummyMode : Option<Boolean>
+)
+
+data class PartialKafkaConfig(
+ val kafkaServers : Option<Array<InetSocketAddress>>,
+ val routing : Option<Routing>
+)
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/AddressAdapter.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/AddressAdapter.kt
new file mode 100644
index 00000000..6e616f58
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/AddressAdapter.kt
@@ -0,0 +1,50 @@
+/*
+ * ============LICENSE_START=======================================================
+ * dcaegen2-collectors-veshv
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.dcae.collectors.veshv.main.config.adapters
+
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import java.lang.reflect.Type
+import java.net.InetSocketAddress
+
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since February 2019
+ */
+class AddressAdapter : JsonDeserializer<InetSocketAddress> {
+ override fun deserialize(
+ json: JsonElement,
+ typeOfT: Type,
+ context: JsonDeserializationContext?): InetSocketAddress
+ {
+ val portStart = json.asString.lastIndexOf(":")
+ if (portStart > 0) {
+ val address = json.asString.substring(0, portStart)
+ val port = json.asString.substring(portStart + 1)
+ return InetSocketAddress(address, port.toInt())
+ } else throw InvalidAddressException("Cannot parse '" + json.asString + "' to address")
+ }
+
+ class InvalidAddressException(reason:String) : RuntimeException(reason)
+}
+
+
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/OptionAdapter.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/OptionAdapter.kt
new file mode 100644
index 00000000..62d107ab
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/OptionAdapter.kt
@@ -0,0 +1,40 @@
+/*
+ * ============LICENSE_START=======================================================
+ * dcaegen2-collectors-veshv
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.dcae.collectors.veshv.main.config.adapters
+
+import arrow.core.Option
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import java.lang.reflect.ParameterizedType
+import java.lang.reflect.Type
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since March 2019
+ */
+class OptionAdapter : JsonDeserializer<Option<Any>> {
+ override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Option<Any> {
+ val parametrizedType = typeOfT as ParameterizedType
+ val typeParameter = parametrizedType.actualTypeArguments.first()
+ return Option.fromNullable(context.deserialize<Any>(json, typeParameter))
+ }
+
+}
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RouteAdapter.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RouteAdapter.kt
new file mode 100644
index 00000000..a617abca
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RouteAdapter.kt
@@ -0,0 +1,43 @@
+/*
+ * ============LICENSE_START=======================================================
+ * dcaegen2-collectors-veshv
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.dcae.collectors.veshv.main.config.adapters
+
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import org.onap.dcae.collectors.veshv.model.Route
+import org.onap.dcae.collectors.veshv.model.RouteBuilder
+import java.lang.reflect.Type
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since March 2019
+ */
+class RouteAdapter : JsonDeserializer<Route> {
+ override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext?): Route {
+ val jobj = json.asJsonObject
+ return RouteBuilder()
+ .fromDomain(jobj["fromDomain"].asString)
+ .toTopic(jobj["toTopic"].asString)
+ .withFixedPartitioning()
+ .build()
+ }
+
+}
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RoutingAdapter.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RoutingAdapter.kt
new file mode 100644
index 00000000..d0c5ff37
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RoutingAdapter.kt
@@ -0,0 +1,40 @@
+/*
+ * ============LICENSE_START=======================================================
+ * dcaegen2-collectors-veshv
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.dcae.collectors.veshv.main.config.adapters
+
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import com.google.gson.reflect.TypeToken
+import org.onap.dcae.collectors.veshv.model.Route
+import org.onap.dcae.collectors.veshv.model.Routing
+import java.lang.reflect.Type
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since March 2019
+ */
+class RoutingAdapter : JsonDeserializer<Routing> {
+ override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Routing {
+ val parametrizedType = TypeToken.getParameterized(List::class.java, Route::class.java).type
+ return Routing(context.deserialize<List<Route>>(json, parametrizedType))
+ }
+
+}
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/SecurityKeysAdapter.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/SecurityKeysAdapter.kt
new file mode 100644
index 00000000..7c22e0f8
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/SecurityKeysAdapter.kt
@@ -0,0 +1,51 @@
+/*
+ * ============LICENSE_START=======================================================
+ * dcaegen2-collectors-veshv
+ * ================================================================================
+ * Copyright (C) 2019 NOKIA
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.dcae.collectors.veshv.main.config.adapters
+
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import org.onap.dcaegen2.services.sdk.security.ssl.ImmutableSecurityKeys
+import org.onap.dcaegen2.services.sdk.security.ssl.ImmutableSecurityKeysStore
+import org.onap.dcaegen2.services.sdk.security.ssl.Passwords
+import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys
+import java.io.File
+import java.lang.reflect.Type
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since March 2019
+ */
+class SecurityKeysAdapter : JsonDeserializer<SecurityKeys> {
+ override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext?): SecurityKeys {
+ val obj = json.asJsonObject
+ return ImmutableSecurityKeys.builder()
+ .keyStore(ImmutableSecurityKeysStore.of(
+ File(obj["keyStoreFile"].asString).toPath()))
+ .keyStorePassword(
+ Passwords.fromString(obj["keyStorePassword"].asString))
+ .trustStore(ImmutableSecurityKeysStore.of(
+ File(obj["trustStoreFile"].asString).toPath()))
+ .trustStorePassword(
+ Passwords.fromString(obj["trustStorePassword"].asString))
+ .build()
+ }
+
+}