8e6bafc410bea8fdd3db72c8b29281245ec9ac86
[dcaegen2/collectors/hv-ves.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * dcaegen2-collectors-veshv
4  * ================================================================================
5  * Copyright (C) 2019 NOKIA
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.dcae.collectors.veshv.config.impl
21
22
23 import arrow.core.Option
24 import arrow.core.Some
25 import arrow.core.getOrElse
26 import arrow.core.toOption
27 import kotlin.reflect.KProperty0
28 import kotlin.reflect.KProperty1
29
30 /**
31  * @author Pawel Biniek <pawel.biniek@nokia.com>
32  * @since March 2019
33  */
34 internal class ConfigurationMerger {
35     fun merge(base: PartialConfiguration, update: PartialConfiguration): PartialConfiguration =
36             PartialConfiguration(
37                     listenPort = base.listenPort.updateToGivenOrNone(update.listenPort),
38                     idleTimeoutSec = base.idleTimeoutSec.updateToGivenOrNone(update.idleTimeoutSec),
39                     maxPayloadSizeBytes = base.maxPayloadSizeBytes.updateToGivenOrNone(update.maxPayloadSizeBytes),
40
41                     firstRequestDelaySec = base.firstRequestDelaySec.updateToGivenOrNone(update.firstRequestDelaySec),
42                     requestIntervalSec = base.requestIntervalSec.updateToGivenOrNone(update.requestIntervalSec),
43
44                     sslDisable = base.sslDisable.updateToGivenOrNone(update.sslDisable),
45                     keyStoreFile = base.keyStoreFile.updateToGivenOrNone(update.keyStoreFile),
46                     keyStorePassword = base.keyStorePassword.updateToGivenOrNone(update.keyStorePassword),
47                     trustStoreFile = base.trustStoreFile.updateToGivenOrNone(update.trustStoreFile),
48                     trustStorePassword = base.trustStorePassword.updateToGivenOrNone(update.trustStorePassword),
49
50                     routing = base.routing.updateToGivenOrNone(update.routing),
51
52                     logLevel = base.logLevel.updateToGivenOrNone(update.logLevel)
53             )
54
55     private fun <T> Option<T>.updateToGivenOrNone(update: Option<T>) =
56             update.getOrElse(this::orNull).toOption()
57
58 }
59
60
61