diff --git a/settings.gradle b/settings.gradle index 04043f00..96cab8a8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,11 @@ +pluginManagement { + plugins { + id 'org.jetbrains.kotlin.jvm' version '1.9.22' + } +} +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' +} rootProject.name = 'unit-api' include 'unit-api-core' diff --git a/unit-api-core/build.gradle b/unit-api-core/build.gradle index f5bdfc5b..94cc1208 100644 --- a/unit-api-core/build.gradle +++ b/unit-api-core/build.gradle @@ -1,3 +1,13 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' +} dependencies { implementation("org.reflections:reflections:0.10.2") + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" +} +repositories { + mavenCentral() +} +kotlin { + jvmToolchain(17) } \ No newline at end of file diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/quantities/Luminance.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/quantities/Luminance.java new file mode 100644 index 00000000..2a569edb --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/quantities/Luminance.java @@ -0,0 +1,19 @@ +package com.raynigon.unit.api.core.quantities; + +import javax.measure.Quantity; +import javax.measure.quantity.Area; +import javax.measure.quantity.LuminousIntensity; + +/** + * Luminous intensity per unit area of light traveling in a given direction. + * The system unit for this quantity is "cd/m²" (candela per square meter). + * + * @author Jean-Marie Dautelle + * @author Werner Keil + * @version 1.3 + * + * @see LuminousIntensity + * @see Area + */ +public interface Luminance extends Quantity { +} \ No newline at end of file diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Radian.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Radian.java new file mode 100644 index 00000000..04c0b787 --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Radian.java @@ -0,0 +1,21 @@ +package com.raynigon.unit.api.core.units.si.angle; + +import com.raynigon.unit.api.core.units.general.BaseUnit; +import com.raynigon.unit.api.core.units.general.UnitDimension; +import com.raynigon.unit.api.core.units.si.SISystem; + +import javax.measure.quantity.Angle; +import javax.measure.quantity.SolidAngle; + +public class Radian extends BaseUnit { + + public Radian() { + super( + SISystem.ID, + "rad", + "Radian", + Angle.class, + UnitDimension.NONE + ); + } +} \ No newline at end of file diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Steradian.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Steradian.java new file mode 100644 index 00000000..6c1943fe --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Steradian.java @@ -0,0 +1,20 @@ +package com.raynigon.unit.api.core.units.si.angle; + +import com.raynigon.unit.api.core.units.general.BaseUnit; +import com.raynigon.unit.api.core.units.general.UnitDimension; +import com.raynigon.unit.api.core.units.si.SISystem; + +import javax.measure.quantity.SolidAngle; + +public class Steradian extends BaseUnit { + + public Steradian() { + super( + SISystem.ID, + "sr", + "Steradian", + SolidAngle.class, + UnitDimension.NONE + ); + } +} \ No newline at end of file diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Candela.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Candela.java new file mode 100644 index 00000000..bc2ae7b9 --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Candela.java @@ -0,0 +1,23 @@ +package com.raynigon.unit.api.core.units.si.luminance; + +import com.raynigon.unit.api.core.units.general.AlternateUnit; +import com.raynigon.unit.api.core.units.general.BaseUnit; +import com.raynigon.unit.api.core.units.general.UnitDimension; +import com.raynigon.unit.api.core.units.si.SISystem; +import com.raynigon.unit.api.core.units.si.area.SquareMetre; + +import javax.measure.quantity.Illuminance; +import javax.measure.quantity.LuminousIntensity; + +public class Candela extends BaseUnit { + + public Candela() { + super( + SISystem.ID, + "cd", + "Candela", + LuminousIntensity.class, + UnitDimension.LUMINOUS_INTENSITY + ); + } +} diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/CandelaPerSquareMetre.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/CandelaPerSquareMetre.java new file mode 100644 index 00000000..d18f0d69 --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/CandelaPerSquareMetre.java @@ -0,0 +1,24 @@ +package com.raynigon.unit.api.core.units.si.luminance; + +import com.raynigon.unit.api.core.quantities.Luminance; +import com.raynigon.unit.api.core.units.general.AlternateUnit; +import com.raynigon.unit.api.core.units.general.TransformedUnit; +import com.raynigon.unit.api.core.units.si.SISystem; +import com.raynigon.unit.api.core.units.si.area.SquareMetre; + +import javax.measure.Unit; +import javax.measure.quantity.Illuminance; + +public class CandelaPerSquareMetre extends AlternateUnit { + + @SuppressWarnings("unchecked") + public CandelaPerSquareMetre() { + super( + SISystem.ID, + "lx", + "Lux", + (Unit) (new Candela().divide(new SquareMetre())), + Luminance.class + ); + } +} diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lumen.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lumen.java new file mode 100644 index 00000000..67e872b3 --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lumen.java @@ -0,0 +1,25 @@ +package com.raynigon.unit.api.core.units.si.luminance; + +import com.raynigon.unit.api.core.units.general.AlternateUnit; +import com.raynigon.unit.api.core.units.general.BaseUnit; +import com.raynigon.unit.api.core.units.general.UnitDimension; +import com.raynigon.unit.api.core.units.si.SISystem; +import com.raynigon.unit.api.core.units.si.angle.Steradian; + +import javax.measure.Unit; +import javax.measure.quantity.Illuminance; +import javax.measure.quantity.LuminousFlux; + +public class Lumen extends AlternateUnit { + + @SuppressWarnings("unchecked") + public Lumen() { + super( + SISystem.ID, + "lm", + "Lumen", + (Unit) new Candela().multiply(new Steradian()), + LuminousFlux.class + ); + } +} diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lux.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lux.java new file mode 100644 index 00000000..832b65f3 --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lux.java @@ -0,0 +1,22 @@ +package com.raynigon.unit.api.core.units.si.luminance; + +import com.raynigon.unit.api.core.units.general.AlternateUnit; +import com.raynigon.unit.api.core.units.si.SISystem; +import com.raynigon.unit.api.core.units.si.area.SquareMetre; + +import javax.measure.Unit; +import javax.measure.quantity.Illuminance; + +public class Lux extends AlternateUnit { + + @SuppressWarnings("unchecked") + public Lux() { + super( + SISystem.ID, + "lx", + "Lux", + (Unit) new Lumen().divide(new SquareMetre()), + Illuminance.class + ); + } +}