diff options
author | pbiniek <pawel.biniek@nokia.com> | 2019-02-27 23:31:15 +0100 |
---|---|---|
committer | pbiniek <pawel.biniek@nokia.com> | 2019-03-11 12:43:48 +0100 |
commit | e9220923d2a13fa787f2f2f7b8bedc60cc9b2324 (patch) | |
tree | 9d8b4e9a5ec6da712a2d76b6897c9f66e79e2c44 /sources/hv-collector-main/src/main | |
parent | f938e8a87a33f8db78115a92f5130d6296171c62 (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')
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() + } + +} |