From 6495af037c391e72d16a959aa38bb4f06be0fd86 Mon Sep 17 00:00:00 2001 From: Alexander Buntakov Date: Tue, 8 Jun 2021 19:48:08 +0300 Subject: [PATCH] add common-measure --- README.md | 8 +++++ build.gradle.kts | 3 ++ common-measure-spring/build.gradle.kts | 10 ++++++ .../common/measure/EnableTouchinMeasure.kt | 8 +++++ .../components/DistancePropertyConverter.kt | 24 +++++++++++++ .../configurations/MeasureConfiguration.kt | 8 +++++ common-measure/build.gradle.kts | 11 ++++++ .../ru/touchin/common/measure/MeasureUtils.kt | 35 +++++++++++++++++++ settings.gradle.kts | 2 ++ 9 files changed, 109 insertions(+) create mode 100644 common-measure-spring/build.gradle.kts create mode 100644 common-measure-spring/src/main/kotlin/ru/touchin/common/measure/EnableTouchinMeasure.kt create mode 100644 common-measure-spring/src/main/kotlin/ru/touchin/common/measure/components/DistancePropertyConverter.kt create mode 100644 common-measure-spring/src/main/kotlin/ru/touchin/common/measure/configurations/MeasureConfiguration.kt create mode 100644 common-measure/build.gradle.kts create mode 100644 common-measure/src/main/kotlin/ru/touchin/common/measure/MeasureUtils.kt diff --git a/README.md b/README.md index f017337..8b57964 100644 --- a/README.md +++ b/README.md @@ -87,3 +87,11 @@ Interceptor для логирования запросов/ответов. ## response-wrapper-spring-web Добавляет обертку для успешного ответа + +## common-measure + +Утилиты для работы с `measure` + +## common-measure-spring + +Возможность задавать `measure` через `properties` diff --git a/build.gradle.kts b/build.gradle.kts index 87675fa..9ddc8ae 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -61,6 +61,9 @@ subprojects { dependency("org.mockito:mockito-inline:2.13.0") dependency("com.github.zafarkhaja:java-semver:0.9.0") + + dependency("javax.measure:unit-api:2.1.2") + dependency("tech.units:indriya:2.1.2") } } diff --git a/common-measure-spring/build.gradle.kts b/common-measure-spring/build.gradle.kts new file mode 100644 index 0000000..7ef248f --- /dev/null +++ b/common-measure-spring/build.gradle.kts @@ -0,0 +1,10 @@ +plugins { + id("kotlin") + id("kotlin-spring") +} + +dependencies { + api(project(":common-measure")) + + implementation("org.springframework.boot:spring-boot") +} diff --git a/common-measure-spring/src/main/kotlin/ru/touchin/common/measure/EnableTouchinMeasure.kt b/common-measure-spring/src/main/kotlin/ru/touchin/common/measure/EnableTouchinMeasure.kt new file mode 100644 index 0000000..0bfa74a --- /dev/null +++ b/common-measure-spring/src/main/kotlin/ru/touchin/common/measure/EnableTouchinMeasure.kt @@ -0,0 +1,8 @@ +package ru.touchin.common.measure + +import org.springframework.context.annotation.Import +import ru.touchin.common.measure.configurations.MeasureConfiguration + +@Suppress("unused") +@Import(value = [MeasureConfiguration::class]) +annotation class EnableTouchinMeasure diff --git a/common-measure-spring/src/main/kotlin/ru/touchin/common/measure/components/DistancePropertyConverter.kt b/common-measure-spring/src/main/kotlin/ru/touchin/common/measure/components/DistancePropertyConverter.kt new file mode 100644 index 0000000..8c46591 --- /dev/null +++ b/common-measure-spring/src/main/kotlin/ru/touchin/common/measure/components/DistancePropertyConverter.kt @@ -0,0 +1,24 @@ +@file:Suppress("unused") + +package ru.touchin.common.measure.components + +import org.springframework.boot.context.properties.ConfigurationPropertiesBinding +import org.springframework.core.convert.converter.Converter +import org.springframework.stereotype.Component +import tech.units.indriya.quantity.Quantities +import javax.measure.Quantity +import javax.measure.quantity.Length + +@Component +@ConfigurationPropertiesBinding +class DistancePropertyConverter : Converter> { + + override fun convert(source: String): Quantity? { + if (source.isEmpty()) { + return null + } + + return Quantities.getQuantity(source).asType(Length::class.java) + } + +} diff --git a/common-measure-spring/src/main/kotlin/ru/touchin/common/measure/configurations/MeasureConfiguration.kt b/common-measure-spring/src/main/kotlin/ru/touchin/common/measure/configurations/MeasureConfiguration.kt new file mode 100644 index 0000000..1ccb427 --- /dev/null +++ b/common-measure-spring/src/main/kotlin/ru/touchin/common/measure/configurations/MeasureConfiguration.kt @@ -0,0 +1,8 @@ +package ru.touchin.common.measure.configurations + +import org.springframework.context.annotation.ComponentScan +import org.springframework.context.annotation.Configuration + +@Configuration +@ComponentScan("ru.touchin.common.measure") +class MeasureConfiguration diff --git a/common-measure/build.gradle.kts b/common-measure/build.gradle.kts new file mode 100644 index 0000000..6107ab9 --- /dev/null +++ b/common-measure/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + id("kotlin") + id("kotlin-spring") +} + +dependencies { + api("javax.measure:unit-api") + api("tech.units:indriya") + + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") +} diff --git a/common-measure/src/main/kotlin/ru/touchin/common/measure/MeasureUtils.kt b/common-measure/src/main/kotlin/ru/touchin/common/measure/MeasureUtils.kt new file mode 100644 index 0000000..7bf82ce --- /dev/null +++ b/common-measure/src/main/kotlin/ru/touchin/common/measure/MeasureUtils.kt @@ -0,0 +1,35 @@ +@file:Suppress("unused") + +package ru.touchin.common.measure + +import tech.units.indriya.unit.Units +import javax.measure.MetricPrefix +import javax.measure.Quantity +import javax.measure.Unit +import javax.measure.quantity.Length + +object MeasureUtils { + + private val Kilometer: Unit = MetricPrefix.KILO(Units.METRE) + + fun Quantity.toKilometers(): Double { + return to(Kilometer).value.toDouble() + } + + fun Quantity.isMore(quantity: Quantity): Boolean { + return this.subtract(quantity).value.toDouble() > 0 + } + + fun Quantity.isMoreOrEquals(quantity: Quantity): Boolean { + return this.subtract(quantity).value.toDouble() >= 0 + } + + fun Quantity.isLess(quantity: Quantity): Boolean { + return !isMoreOrEquals(quantity) + } + + fun Quantity.isLessOrEquals(quantity: Quantity): Boolean { + return !isMore(quantity) + } + +} diff --git a/settings.gradle.kts b/settings.gradle.kts index e2e5cd0..06680f8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -25,6 +25,8 @@ include("common-spring-jpa") include("common-spring-web") include("common-spring-test") include("common-spring-test-jpa") +include("common-measure") +include("common-measure-spring") include("logger") include("logger-spring") include("logger-spring-web")