diff --git a/src/main/java/net/thauvin/erik/pinboard/JavaExample.java b/src/main/java/net/thauvin/erik/pinboard/JavaExample.java index d5b4ff4..d252652 100644 --- a/src/main/java/net/thauvin/erik/pinboard/JavaExample.java +++ b/src/main/java/net/thauvin/erik/pinboard/JavaExample.java @@ -31,12 +31,8 @@ */ package net.thauvin.erik.pinboard; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Properties; import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.Logger; @@ -44,24 +40,15 @@ import java.util.logging.Logger; public class JavaExample { public static void main(String[] args) { final String url = "http://www.example.com/pinboard"; - final Path properties = Paths.get("local.properties"); + final Path localProps = Paths.get("local.properties"); final PinboardPoster poster; if (args.length == 1) { // API Token is an argument poster = new PinboardPoster(args[0]); - } else if (Files.exists(properties)) { - // API Token is in local.properties (PINBOARD_API_TOKEN) - final Properties p = new Properties(); - try (final InputStream stream = Files.newInputStream(properties)) { - p.load(stream); - } catch (IOException ignore) { - ; - } - poster = new PinboardPoster(p); } else { - // API Token is an environment variable (PINBOARD_API_TOKEN) or empty - poster = new PinboardPoster(); + // API Token is in local.properties or PINBOARD_API_TOKEN environment variable + poster = new PinboardPoster(localProps); } // Set logging levels @@ -72,7 +59,7 @@ public class JavaExample { logger.setLevel(Level.FINE); // Add Pin - if (poster.addPin(url, "Testing", "Extended test", "test kotlin")) { + if (poster.addPin(url, "Testing", "Extended test", "test java")) { System.out.println("Added: " + url); } diff --git a/src/main/kotlin/net/thauvin/erik/pinboard/PinboardPoster.kt b/src/main/kotlin/net/thauvin/erik/pinboard/PinboardPoster.kt index 44b6fd3..495a11d 100644 --- a/src/main/kotlin/net/thauvin/erik/pinboard/PinboardPoster.kt +++ b/src/main/kotlin/net/thauvin/erik/pinboard/PinboardPoster.kt @@ -39,6 +39,7 @@ import org.xml.sax.InputSource import java.io.StringReader import java.net.URL import java.nio.file.Files +import java.nio.file.Path import java.nio.file.Paths import java.util.* import java.util.logging.ConsoleHandler @@ -58,9 +59,21 @@ open class PinboardPoster() { this.apiToken = apiToken } + @Suppress("unused") @JvmOverloads constructor(properties: Properties, key: String = ENV_API_TOKEN) : this() { - this.apiToken = properties.getProperty(key, "") + apiToken = properties.getProperty(key, apiToken) + } + + @JvmOverloads + constructor(propertiesFilePath: Path, key: String = ENV_API_TOKEN) : this() { + if (Files.exists(propertiesFilePath)) { + apiToken = Properties().apply { + Files.newInputStream(propertiesFilePath).use { nis -> + load(nis) + } + }.getProperty(key, apiToken) + } } var apiToken: String = if (System.getenv(ENV_API_TOKEN).isNullOrBlank()) "" else System.getenv(ENV_API_TOKEN) @@ -218,21 +231,14 @@ open class PinboardPoster() { fun main(args: Array) { val url = "http://www.example.com/pinboard" - val properties = Paths.get("local.properties") - val poster = when { - args.size == 1 -> - // API Token is an argument - PinboardPoster(args[0]) - Files.exists(properties) -> - // API Token is in a local.properties (PINBOARD_API_TOKEN) - PinboardPoster( - Properties().apply { - Files.newInputStream(properties).use { fis -> load(fis) } - } - ) - else -> - // API Token is an environment variable (PINBOARD_API_TOKEN) or empty; - PinboardPoster() + val localProp = Paths.get("local.properties") + + val poster = if (args.size == 1) { + // API Token is an argument + PinboardPoster(args[0]) + } else { + // API Token is in local.properties or PINBOARD_API_TOKEN environment variable + PinboardPoster(localProp) } // Set logging levels diff --git a/src/test/kotlin/net/thauvin/erik/pinboard/PinboardPosterTest.kt b/src/test/kotlin/net/thauvin/erik/pinboard/PinboardPosterTest.kt index bfd72e8..06cf351 100644 --- a/src/test/kotlin/net/thauvin/erik/pinboard/PinboardPosterTest.kt +++ b/src/test/kotlin/net/thauvin/erik/pinboard/PinboardPosterTest.kt @@ -33,9 +33,7 @@ package net.thauvin.erik.pinboard import org.testng.Assert import org.testng.annotations.Test -import java.nio.file.Files import java.nio.file.Paths -import java.util.* class PinboardPosterTest { private val url = "http://www.foo.com/" @@ -54,13 +52,13 @@ class PinboardPosterTest { //poster.apiToken = "foo:TESTING" //Assert.assertFalse(poster.addPin(url, desc), "apiToken: ${poster.apiToken}") - poster = pinboardPosterInstance() + poster = PinboardPoster(localProps) Assert.assertTrue(poster.addPin(url, desc), "apiToken: ${Constants.ENV_API_TOKEN}") } @Test fun testDeletePin() { - val poster = pinboardPosterInstance() + val poster = PinboardPoster(localProps) poster.apiEndPoint = "" Assert.assertFalse(poster.deletePin(url), "apiEndPoint: ") @@ -70,12 +68,4 @@ class PinboardPosterTest { Assert.assertFalse(poster.deletePin("foo.com"), "url: foo.com") } - - private fun pinboardPosterInstance(): PinboardPoster { - return if (Files.exists(localProps)) { - PinboardPoster(Properties().apply { Files.newInputStream(localProps).use { fis -> load(fis) } }) - } else { - PinboardPoster() - } - } }