Added constructor to specify a property file path directly.

This commit is contained in:
Erik C. Thauvin 2017-11-08 22:09:20 -08:00
parent 95428c22f8
commit b4d411726f
3 changed files with 28 additions and 45 deletions

View file

@ -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);
}

View file

@ -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<String>) {
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

View file

@ -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: <blank>")
@ -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()
}
}
}