From 318f436d1a6cc1a6236fdb8e51cbb32c52126db6 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 2 Apr 2023 18:38:56 -0700 Subject: [PATCH 1/7] Updated readme --- .idea/vcs.xml | 6 ++++ README.md | 71 +++++++++++++++++++++++++++++----------------- examples/README.md | 4 +-- 3 files changed, 53 insertions(+), 28 deletions(-) create mode 100644 .idea/vcs.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index c119f25..e7a8308 100755 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ [![License (3-Clause BSD)](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg?style=flat-square)](http://opensource.org/licenses/BSD-3-Clause) [![GitHub CI](https://github.com/rife2/bld-property-file/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-property-file/actions/workflows/bld.yml) - An extension for creating or modifying [property files](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html) with [bld](https://github.com/rife2/rife2/wiki/What-Is-Bld). It is inspired by the [ant PropertyFile task](https://ant.apache.org/manual/Tasks/propertyfile.html). ```java @@ -18,34 +17,54 @@ public void updateMajor() throws Exception { } ``` +Assuming the following `version.properties` file: -To invoke the `updateMajor` command: - -```sh -./bld updateMajor +```ini +# version.properties +version.major=1 +version.minor=0 +version.patch=1 ``` -## PropertyFileOperation +Invoking the `updateMajor` command: -Attribute | Description | Required -:---------------|:----------------------------------------------------------|:-------- -`file` | The location of the properties files to modify. | Yes -`comment` | Comment to be inserted at the top of the properties file. | No -`failOnWarning` | If set to `true`, will fail on any warnings. | No +```sh +./bld updateMajor ... +``` + +would update the properties to: + +```ini +# version.properties +version.major=2 +version.minor=0 +version.patch=0 +``` +- [View Examples](https://github.com/rife2/bld-property-file/tree/master/examples) + +## Property File + +The `PropertyFileOperation` class is used to configure the [properties file](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html) location, etc. + +Attribute | Description | Required +:---------------|:-----------------------------------------------------------------|:-------- +`file` | The location of the properties files to modify. | Yes +`comment` | Comment to be inserted at the top of the properties file. | No +`failOnWarning` | If set to `true`, will cause executiion to fail on any warnings. | No ## Entry -The `entry` function is used to specify edits to be made to the properties file. +The `Entry` class is used to specify modifications to be made to the [properties file](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html). -Attribute | Description -:-----------|:----------------------------------------------------------------------------------------------------------------- -`key` | The name of the property name/value pair. -`value` | The value of the property. -`default` | The initial value to set for the property if not already defined. For `Type.DATE`, the `now` keyword can be used. -`type` | Tread the value as `Types.INT`, `Types.DATE`, or `Types.STRING`. If none specified, `Types.STRING` is assumed. -`operation` | See [operations](#operations). -`pattern` | For `Types.INT` and `Types.DATE` only. If present, will parse the value as [DecimalFormat](https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html) or [SimpleDateFormat](https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html) patterns, respectively. -`unit` | The unit value to be applied to `Operations.ADD` and `Operations.SUBTRACT` for `Types.DATE`. See [Units](#units). +Attribute | Description +:--------------|:----------------------------------------------------------------------------------------------------------------- +`key` | The name of the property name/value pair. +`value` | The value of the property. +`defaultVlaue` | The initial value to set for the property if not already defined. For `Type.DATE`, the `now` keyword can be used. +`type` | Tread the value as `Types.INT`, `Types.DATE`, or `Types.STRING`. If none specified, `Types.STRING` is assumed. +`operation` | See [operations](#operations). +`pattern` | For `Types.INT` and `Types.DATE` only. If present, will parse the value as [DecimalFormat](https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html) or [SimpleDateFormat](https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html) patterns, respectively. +`unit` | The unit value to be applied to `Operations.ADD` and `Operations.SUBTRACT` for `Types.DATE`. See [Units](#units). `key` is required. `value` or `default` are required unless the `operation` is `Operations.DELETE`. @@ -78,10 +97,10 @@ The following units are available for `Types.DATE` with `Operations.ADD` and `Op The rules used when setting a property value are: * If only `value` is specified, the property is set to it regardless of its previous value. -* If only `default` is specified and the property previously existed, it is unchanged. -* If only `default` is specified and the property did not exist, the property is set to `default`. -* If `value` and `default` are both specified and the property previously existed, the property is set to `value`. -* If `value` and `default` are both specified and the property did not exist, the property is set to `default`. +* If only `defaultValue` is specified and the property previously existed, it is unchanged. +* If only `defaultValue` is specified and the property did not exist, the property is set to `defaultValue`. +* If `value` and `defaultValue` are both specified and the property previously existed, the property is set to `value`. +* If `value` and `defaultValue` are both specified and the property did not exist, the property is set to `defaultValue`. Operations occur after the rules are evaluated. @@ -89,4 +108,4 @@ Operations occur after the rules are evaluated. * The comments and layout of the original property file will not be preserved. * The `jdkproperties` parameter is not implemented. -* The default `Entry.Types.DATE` pattern is `yyyy-MM-dd HH:mm` and not `yyyy/MM/dd HH:mm`. \ No newline at end of file +* The default `Types.DATE` pattern is `yyyy-MM-dd HH:mm` and not `yyyy/MM/dd HH:mm`. \ No newline at end of file diff --git a/examples/README.md b/examples/README.md index cce7e7f..cf9d2eb 100644 --- a/examples/README.md +++ b/examples/README.md @@ -2,10 +2,10 @@ ## Compile -First make sure the project is compiled, by issuing the following command: +First make sure the project up-to-date and compiled: ```shell -./bld compile +./bld download compile ``` ## Run From c53230dd610400bf28179a802f8120943762870f Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 2 Apr 2023 18:40:15 -0700 Subject: [PATCH 2/7] Added JDK 20 to GitHub workflow --- .github/workflows/bld.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index 94c4f66..b94976b 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - java-version: [ 17, 19 ] + java-version: [ 17, 19, 20 ] steps: - name: Checkout source repository @@ -19,7 +19,7 @@ jobs: - name: Set up JDK ${{ matrix.java-version }} uses: actions/setup-java@v3 with: - distribution: 'temurin' + distribution: 'zulu' java-version: ${{ matrix.java-version }} - name: Grant execute permission for bld From 29ccd1cbdf924b5c61ce8cef78d54b6fb2da0078 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 3 Apr 2023 02:17:11 -0700 Subject: [PATCH 3/7] Added build.date to examples --- examples/.idea/libraries/bld.xml | 10 ++--- examples/.idea/misc.xml | 6 +++ examples/.vscode/settings.json | 2 +- examples/README.md | 29 ++++++++++--- examples/lib/bld/bld-wrapper.jar | Bin 24013 -> 24362 bytes examples/lib/bld/bld-wrapper.properties | 7 ++-- .../com/example/PropertyFileExampleBuild.java | 39 +++++++++++++----- .../com/example/PropertyFileExampleMain.java | 2 +- .../com/example/PropertyFileExampleTest.java | 4 +- examples/version.properties | 5 --- 10 files changed, 71 insertions(+), 33 deletions(-) delete mode 100644 examples/version.properties diff --git a/examples/.idea/libraries/bld.xml b/examples/.idea/libraries/bld.xml index 657c6e2..a0a25eb 100644 --- a/examples/.idea/libraries/bld.xml +++ b/examples/.idea/libraries/bld.xml @@ -2,15 +2,15 @@ - + + - + + - - - + diff --git a/examples/.idea/misc.xml b/examples/.idea/misc.xml index 542659b..4af0048 100644 --- a/examples/.idea/misc.xml +++ b/examples/.idea/misc.xml @@ -1,5 +1,11 @@ + + + + + + diff --git a/examples/.vscode/settings.json b/examples/.vscode/settings.json index 44ad385..bce4c6c 100644 --- a/examples/.vscode/settings.json +++ b/examples/.vscode/settings.json @@ -7,7 +7,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.rife2/dist/rife2-1.5.11.jar", + "${HOME}/.rife2/dist/rife2-1.5.14.jar", "lib/compile/*.jar", "lib/runtime/*.jar", "lib/test/*.jar" diff --git a/examples/README.md b/examples/README.md index cf9d2eb..96a664a 100644 --- a/examples/README.md +++ b/examples/README.md @@ -16,11 +16,10 @@ To run the examples, issue one of the following command or combination there off ./bld updateMinor run ./bld updatePatch run ``` -Upon execution, the content of the `verison.properties` file will be displayed, reflecting the modification to the -`version.major`, `version.minor` or `version.patch` properties. +Upon execution, the `version.properties` file will be created and displayed: ```shell -./bld updatePatch run +./bld updateMajor run ``` ```shell @@ -28,8 +27,28 @@ Upon execution, the content of the `verison.properties` file will be displayed, | version.properties | +---------------------------+ # -#Sun Apr 02 17:19:10 PDT 2023 +#Sun Apr 02 23:51:39 PDT 2023 +build.date=2023-04-02 version.major=1 version.minor=0 -version.patch=1 +version.patch=0 +``` + +Subsequent commands will reflect the modifications to the +`version.major`, `version.minor` or `version.patch` properties: + +```shell +./bld upatePatch run +``` + +```shell ++---------------------------+ +| version.properties | ++---------------------------+ +# +#Sun Apr 02 23:55:09 PDT 2023 +build.date=2023-04-02 +version.major=1 +version.minor=0 +version.patch=10 ``` diff --git a/examples/lib/bld/bld-wrapper.jar b/examples/lib/bld/bld-wrapper.jar index 050a6bd719986825b8b189c8294dae7440d6b562..b372bbca395b12e4b934742e6e1e4c43c56ac962 100644 GIT binary patch delta 11608 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 diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index ccddd15..b61179e 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,6 @@ #Sun Apr 02 10:32:44 PDT 2023 bld.extension=com.uwyn.rife2:bld-property-file:0.9.0 -bld.repositories=https\://repo1.maven.org/maven2/,/home/erik/.m2/repository +bld.repositories=MAVEN_LOCAL,https\://repo1.maven.org/maven2/ +bld.downloadExtensionSources=true rife2.downloadLocation= -rife2.version=1.5.11 - - +rife2.version=1.5.14 \ No newline at end of file diff --git a/examples/src/bld/java/com/example/PropertyFileExampleBuild.java b/examples/src/bld/java/com/example/PropertyFileExampleBuild.java index 5ff2531..e3e88a6 100644 --- a/examples/src/bld/java/com/example/PropertyFileExampleBuild.java +++ b/examples/src/bld/java/com/example/PropertyFileExampleBuild.java @@ -2,10 +2,10 @@ package com.example; import rife.bld.BuildCommand; import rife.bld.Project; -import rife.bld.extension.propertyFile.Entry; -import rife.bld.extension.propertyFile.Entry.Operations; -import rife.bld.extension.propertyFile.Entry.Types; -import rife.bld.extension.propertyFile.PropertyFileOperation; +import rife.bld.extension.propertyfile.Entry; +import rife.bld.extension.propertyfile.Entry.Operations; +import rife.bld.extension.propertyfile.Entry.Types; +import rife.bld.extension.propertyfile.PropertyFileOperation; import java.util.List; @@ -14,6 +14,7 @@ import static rife.bld.dependencies.Repository.SONATYPE_SNAPSHOTS; import static rife.bld.dependencies.Scope.test; public class PropertyFileExampleBuild extends Project { + final Entry buildDateEntry = new Entry("build.date").value("now").pattern("yyyy-MM-dd").type(Types.DATE); public PropertyFileExampleBuild() { pkg = "com.example"; @@ -33,30 +34,48 @@ public class PropertyFileExampleBuild extends Project { new PropertyFileExampleBuild().start(args); } - @BuildCommand + @BuildCommand(summary = "Updates major version") public void updateMajor() throws Exception { new PropertyFileOperation(this) .file("version.properties") - .entry(new Entry("version.major").defaultValue(1).type(Types.INT).operation(Operations.ADD)) + // set the major version to 1 if it doesn't exist, increase by 1 + .entry(new Entry("version.major").defaultValue(0).type(Types.INT).operation(Operations.ADD)) + // set the minor version to 0 .entry(new Entry("version.minor").value(0)) + // set the patch version to 0 .entry(new Entry("version.patch").value(0)) + // set the build date to the current date + .entry(buildDateEntry) .execute(); } - @BuildCommand + @BuildCommand(summary = "Updates minor version") public void updateMinor() throws Exception { new PropertyFileOperation(this) .file("version.properties") - .entry(new Entry("version.minor").defaultValue(0).type(Types.INT).operation(Operations.ADD)) + // set the major version to 1 if it doesn't exist + .entry(new Entry("version.major").defaultValue(1)) + // set the minor version to 0 if it doesn't exist, increase by 1 + .entry(new Entry("version.minor").defaultValue(-1).type(Types.INT).operation(Operations.ADD)) + // set the patch version to 0 .entry(new Entry("version.patch").value(0)) + // set the build date to the current date + .entry(buildDateEntry) .execute(); } - @BuildCommand + @BuildCommand(summary = "Updates patch version") public void updatePatch() throws Exception { new PropertyFileOperation(this) .file("version.properties") - .entry(new Entry("version.patch").defaultValue(0).type(Types.INT).operation(Operations.ADD)) + // set the major version to 1 if it doesn't exist + .entry(new Entry("version.major").defaultValue(1)) + // set the minor version to 0 if it doesn't exist + .entry(new Entry("version.minor").defaultValue(0)) + // set the patch version to 10 if it doesn't exist, increase by 10 + .entry(new Entry("version.patch").defaultValue(0).type(Types.INT).operation(Operations.ADD).value(10)) + // set the build date to the current date + .entry(buildDateEntry) .execute(); } } \ No newline at end of file diff --git a/examples/src/main/java/com/example/PropertyFileExampleMain.java b/examples/src/main/java/com/example/PropertyFileExampleMain.java index b23e1e8..df451ba 100644 --- a/examples/src/main/java/com/example/PropertyFileExampleMain.java +++ b/examples/src/main/java/com/example/PropertyFileExampleMain.java @@ -21,7 +21,7 @@ public class PropertyFileExampleMain { } } - public String getMessage() { + String getMessage() { return "Hello World!"; } } \ No newline at end of file diff --git a/examples/src/test/java/com/example/PropertyFileExampleTest.java b/examples/src/test/java/com/example/PropertyFileExampleTest.java index 7eedb4a..7ea91a3 100644 --- a/examples/src/test/java/com/example/PropertyFileExampleTest.java +++ b/examples/src/test/java/com/example/PropertyFileExampleTest.java @@ -2,9 +2,9 @@ package com.example; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; -public class PropertyFileExampleTest { +class PropertyFileExampleTest { @Test void verifyHello() { assertEquals("Hello World!", new PropertyFileExampleMain().getMessage()); diff --git a/examples/version.properties b/examples/version.properties deleted file mode 100644 index 435570e..0000000 --- a/examples/version.properties +++ /dev/null @@ -1,5 +0,0 @@ -# -#Sun Apr 02 17:19:10 PDT 2023 -version.major=1 -version.minor=0 -version.patch=1 From 93c1738364bb7d71e60c876e86c0c8f4c93ad705 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 3 Apr 2023 02:18:19 -0700 Subject: [PATCH 4/7] Cleaned up tests --- .../PropertyFileUtilsTest.java | 97 ++++++++----------- 1 file changed, 42 insertions(+), 55 deletions(-) rename src/test/java/rife/bld/extension/{propertyFile => propertyfile}/PropertyFileUtilsTest.java (63%) diff --git a/src/test/java/rife/bld/extension/propertyFile/PropertyFileUtilsTest.java b/src/test/java/rife/bld/extension/propertyfile/PropertyFileUtilsTest.java similarity index 63% rename from src/test/java/rife/bld/extension/propertyFile/PropertyFileUtilsTest.java rename to src/test/java/rife/bld/extension/propertyfile/PropertyFileUtilsTest.java index ee03704..4448272 100644 --- a/src/test/java/rife/bld/extension/propertyFile/PropertyFileUtilsTest.java +++ b/src/test/java/rife/bld/extension/propertyfile/PropertyFileUtilsTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package rife.bld.extension.propertyFile; +package rife.bld.extension.propertyfile; import org.junit.jupiter.api.Test; import rife.tools.Localization; @@ -36,65 +36,52 @@ import static org.assertj.core.api.Assertions.assertThatCode; */ class PropertyFileUtilsTest { final Properties p = new Properties(); + final String t = "test"; @Test void currentValueTest() { - String prev; - String value; - String defaultValue = null; + String prev = "previous"; + String value = "value"; + String defaultValue = "defaultValue"; var operation = Entry.Operations.SET; // If only value is specified, the property is set to it regardless of its previous value. - prev = "previous"; - value = "value"; - assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)).as("currentValue(prev,value,defaultValue,operation)").isEqualTo(value); + assertThat(PropertyFileUtils.currentValue(prev, value, null, operation)) + .as(String.format("currentValue(%s,%s,%s,%s)", prev, value, defaultValue, operation)).isEqualTo(value); // If only defaultValue is specified and the property previously existed, it is unchanged. - prev = "previous"; - value = null; - defaultValue = "defaultValue"; - assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)).as("currentValue(prev,value,defaultValue,operation)").isEqualTo(prev); + assertThat(PropertyFileUtils.currentValue(prev, null, defaultValue, operation)) + .as(String.format("currentValue(%s,%s,%s,%s)", prev, value, defaultValue, operation)).isEqualTo(prev); // If only defaultValue is specified and the property did not exist, the property is set to defaultValue. - prev = null; - defaultValue = "defaultValue"; - assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)).as("currentValue(prev,value,defaultValue,operation)").isEqualTo(defaultValue); + assertThat(PropertyFileUtils.currentValue(null, null, defaultValue, operation)) + .as(String.format("currentValue(%s,%s,%s,%s)", prev, value, defaultValue, operation)).isEqualTo(defaultValue); // If value and defaultValue are both specified and the property previously existed, the property is set to value. - prev = "previous"; - value = "value"; - defaultValue = "defaultValue"; - assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)).as("currentValue(prev,value,defaultValue,operation)").isEqualTo(value); + assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)) + .as(String.format("currentValue(%s,%s,%s,%s)", prev, value, defaultValue, operation)).isEqualTo(value); // If value and defaultValue are both specified and the property did not exist, the property is set to defaultValue. - prev = null; - value = "value"; - defaultValue = "defaultValue"; - assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)).as("currentValue(prev,value,defaultValue,operation)").isEqualTo(defaultValue); + assertThat(PropertyFileUtils.currentValue(null, value, defaultValue, operation)) + .as(String.format("currentValue(%s,%s,%s,%s)", prev, value, defaultValue, operation)).isEqualTo(defaultValue); // ADD operation = Entry.Operations.ADD; - value = "value"; - defaultValue = "defaultValue"; - assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)).as("currentValue(prev,value,defaultValue,operation)").isEqualTo(defaultValue); + assertThat(PropertyFileUtils.currentValue(null, value, defaultValue, operation)) + .as(String.format("currentValue(%s,%s,%s,%s)", prev, value, defaultValue, operation)).isEqualTo(defaultValue); - prev = "prev"; - value = "value"; - defaultValue = null; - assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)).as("currentValue(prev,value,defaultValue,operation)").isEqualTo(prev); + assertThat(PropertyFileUtils.currentValue(prev, value, null, operation)) + .as(String.format("currentValue(%s,%s,%s,%s)", prev, value, defaultValue, operation)).isEqualTo(prev); - prev = null; - value = "value"; - assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)).as("currentValue(prev,value,defaultValue,operation)").isEqualTo(""); + assertThat(PropertyFileUtils.currentValue(null, value, null, operation)) + .as(String.format("currentValue(%s,%s,%s,%s)", prev, value, defaultValue, operation)).isEqualTo(""); - value = "value"; - defaultValue = "defaultValue"; - assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)).as("currentValue(prev,value,defaultValue,operation)").isEqualTo(defaultValue); + assertThat(PropertyFileUtils.currentValue(null, value, defaultValue, operation)) + .as(String.format("currentValue(%s,%s,%s,%s)", prev, value, defaultValue, operation)).isEqualTo(defaultValue); - value = null; - defaultValue = null; - assertThat(PropertyFileUtils.currentValue(prev, value, defaultValue, operation)).as("currentValue(prev,value,defaultValue,operation)").isEqualTo(""); + assertThat(PropertyFileUtils.currentValue(null, null, null, operation)) + .as(String.format("currentValue(%s,%s,%s,%s)", prev, value, defaultValue, operation)).isEqualTo(""); } @Test @@ -115,38 +102,38 @@ class PropertyFileUtilsTest { @Test void processIntTest() { var entry = new Entry("version.patch").value("a").type(Entry.Types.INT); - assertThat(PropertyFileUtils.processInt(p, entry, false)).as("parseInt(entry.getKey(), a)"); + assertThat(PropertyFileUtils.processInt(t, p, entry, false)).as("parseInt(entry.getKey(), a)"); // ADD entry.setOperation(Entry.Operations.ADD); entry.setValue("1"); entry.setDefaultValue("-1"); - PropertyFileUtils.processInt(p, entry, true); + PropertyFileUtils.processInt(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processInt(entry.getKey(), 0)").isEqualTo("0"); entry.setKey("anint"); entry.setValue(null); entry.setDefaultValue("0"); - PropertyFileUtils.processInt(p, entry, true); + PropertyFileUtils.processInt(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processInt(entry.getKey(), 1)").isEqualTo("1"); - PropertyFileUtils.processInt(p, entry, true); + PropertyFileUtils.processInt(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processInt(entry.getKey(), 2)").isEqualTo("2"); entry.setKey("formated.int"); entry.setValue(null); entry.setDefaultValue("0013"); entry.setPattern("0000"); - PropertyFileUtils.processInt(p, entry, true); + PropertyFileUtils.processInt(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processInt(entry.getKey(), 0014)").isEqualTo("0014"); - PropertyFileUtils.processInt(p, entry, true); + PropertyFileUtils.processInt(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processInt(entry.getKey(), 0015)").isEqualTo("0015"); entry.setKey("formated.int"); entry.setValue("2"); entry.setDefaultValue("0013"); entry.setPattern("0000"); - PropertyFileUtils.processInt(p, entry, true); + PropertyFileUtils.processInt(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processInt(entry.getKey(), 0017)").isEqualTo("0017"); // SUBTRACT @@ -154,7 +141,7 @@ class PropertyFileUtilsTest { entry.setValue(null); entry.setDefaultValue("0013"); entry.setPattern("0000"); - PropertyFileUtils.processInt(p, entry, true); + PropertyFileUtils.processInt(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processInt(entry.getKey(), 0016)").isEqualTo("0016"); } @@ -165,36 +152,36 @@ class PropertyFileUtilsTest { var dayInt = Integer.parseInt(day); entry.setValue("a"); - assertThat(PropertyFileUtils.processDate(p, entry, false)).as("processDate(entry.getKey(), a)").isFalse(); + assertThat(PropertyFileUtils.processDate(t, p, entry, false)).as("processDate(entry.getKey(), a)").isFalse(); entry.setValue("99"); - PropertyFileUtils.processDate(p, entry, true); + PropertyFileUtils.processDate(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processDate(entry.getKey(), 99)").isEqualTo("99"); entry.setValue("now"); - PropertyFileUtils.processDate(p, entry, true); + PropertyFileUtils.processDate(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processDate(entry.getKey(), now)").isEqualTo(day); // ADD entry.setOperation(Entry.Operations.ADD); entry.setValue("1"); - PropertyFileUtils.processDate(p, entry, true); + PropertyFileUtils.processDate(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processDate(entry.getKey(), now+1)").isEqualTo(String.valueOf(dayInt + 1)); entry.setValue("2"); - PropertyFileUtils.processDate(p, entry, true); + PropertyFileUtils.processDate(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processDate(entry.getKey(), now+3)").isEqualTo(String.valueOf(dayInt + 3)); // SUBTRACT entry.setOperation(Entry.Operations.SUBTRACT); entry.setValue("3"); - PropertyFileUtils.processDate(p, entry, true); + PropertyFileUtils.processDate(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processDate(entry.getKey(), now-3)").isEqualTo(String.valueOf(dayInt)); entry.setOperation(Entry.Operations.SUBTRACT); entry.setValue("2"); - PropertyFileUtils.processDate(p, entry, true); + PropertyFileUtils.processDate(t, p, entry, true); assertThat(p.getProperty(entry.getKey())).as("processDate(entry.getKey(), now-2)").isEqualTo(String.valueOf(dayInt - 2)); } @@ -210,10 +197,10 @@ class PropertyFileUtilsTest { assertThatCode(() -> PropertyFileUtils.saveProperties(tmp, "Generated file - do not modify!", p)) .as("save properties").doesNotThrowAnyException(); - assertThat(PropertyFileUtils.loadProperties(tmp, p)).as("load properties").isTrue(); + assertThat(PropertyFileUtils.loadProperties(t, tmp, p)).as("load properties").isTrue(); assertThat(p.getProperty(test)).as("read property").isEqualTo(test); tmp.deleteOnExit(); } -} +} \ No newline at end of file From a44acb8801e9ffad0101d1034e2c7b48d47b0a28 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 3 Apr 2023 02:19:20 -0700 Subject: [PATCH 5/7] Added build.date to README example --- README.md | 72 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index e7a8308..44d334e 100755 --- a/README.md +++ b/README.md @@ -10,74 +10,80 @@ An extension for creating or modifying [property files](https://docs.oracle.com/ public void updateMajor() throws Exception { new PropertyFileOperation(this) .file("version.properties") - .entry(new Entry("version.major").defaultValue(1).type(Types.INT).operation(Operations.ADD)) + .entry(new Entry("version.major").defaultValue(0).type(Types.INT).operation(Operations.ADD)) .entry(new Entry("version.minor").value(0)) .entry(new Entry("version.patch").value(0)) + .entry(new Entry("build.date").value("now").pattern("yyyy-MM-dd").type(Types.DATE)) .execute(); } ``` -Assuming the following `version.properties` file: - -```ini -# version.properties -version.major=1 -version.minor=0 -version.patch=1 -``` - -Invoking the `updateMajor` command: +Invoking the `updateMajor` command, will create the `version.propertees`file: ```sh ./bld updateMajor ... ``` -would update the properties to: +```ini +# version.properties +build.date=2023-04-02 +version.major=1 +version.minor=0 +version.patch=0 +``` + +Invoking the `updateMajor` command again, will increase the `version.major` property: + +```sh +./bld updateMajor ... +``` ```ini # version.properties +build.date=2023-04-02 version.major=2 version.minor=0 version.patch=0 ``` + - [View Examples](https://github.com/rife2/bld-property-file/tree/master/examples) ## Property File The `PropertyFileOperation` class is used to configure the [properties file](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html) location, etc. -Attribute | Description | Required -:---------------|:-----------------------------------------------------------------|:-------- -`file` | The location of the properties files to modify. | Yes -`comment` | Comment to be inserted at the top of the properties file. | No -`failOnWarning` | If set to `true`, will cause executiion to fail on any warnings. | No +| Attribute | Description | Required | +|:----------------|:-----------------------------------------------------------------|:---------| +| `file` | The location of the properties files to modify. | Yes | +| `comment` | Comment to be inserted at the top of the properties file. | No | +| `failOnWarning` | If set to `true`, will cause executiion to fail on any warnings. | No | ## Entry The `Entry` class is used to specify modifications to be made to the [properties file](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html). -Attribute | Description -:--------------|:----------------------------------------------------------------------------------------------------------------- -`key` | The name of the property name/value pair. -`value` | The value of the property. -`defaultVlaue` | The initial value to set for the property if not already defined. For `Type.DATE`, the `now` keyword can be used. -`type` | Tread the value as `Types.INT`, `Types.DATE`, or `Types.STRING`. If none specified, `Types.STRING` is assumed. -`operation` | See [operations](#operations). -`pattern` | For `Types.INT` and `Types.DATE` only. If present, will parse the value as [DecimalFormat](https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html) or [SimpleDateFormat](https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html) patterns, respectively. -`unit` | The unit value to be applied to `Operations.ADD` and `Operations.SUBTRACT` for `Types.DATE`. See [Units](#units). +| Attribute | Description | +|:---------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `key` | The name of the property name/value pair. | +| `value` | The value of the property. | +| `defaultVlaue` | The initial value to set for the property if not already defined. For `Type.DATE`, the `now` keyword can be used. | +| `type` | Tread the value as `Types.INT`, `Types.DATE`, or `Types.STRING`. If none specified, `Types.STRING` is assumed. | +| `operation` | See [operations](#operations). | +| `pattern` | For `Types.INT` and `Types.DATE` only. If present, will parse the value as [DecimalFormat](https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html) or [SimpleDateFormat](https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html) patterns, respectively. | +| `unit` | The unit value to be applied to `Operations.ADD` and `Operations.SUBTRACT` for `Types.DATE`. See [Units](#units). | -`key` is required. `value` or `default` are required unless the `operation` is `Operations.DELETE`. +`key` is required. `value` or `defaultValue` are required unless the `operation` is `Operations.DELETE`. ## Operations The following operations are available: -Operation | Description -:---------------------|:------------------------------------------------------------------------- -`Operations.ADD` | Adds a value to an entry. -`Operations.DELETE` | Deletes an entry. -`Operations.SET` | Sets the entry value. This is the default operation. -`Operations.SUBTRACT` | Subtracts a value from the entry. For `Types.INT` and `Types.DATE` only. +| Operation | Description | +|:-----------------------|:--------------------------------------------------------------------------| +| `Operations.ADD` | Adds a value to an entry. | +| `Operations.DELETE` | Deletes an entry. | +| `Operations.SET` | Sets the entry value. This is the default operation. | +| `Operations.SUBTRACT` | Subtracts a value from the entry. For `Types.INT` and `Types.DATE` only. | ## Units From 10c5dc73480166b3cb61bf028d5eaf91f3490660 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 3 Apr 2023 02:20:09 -0700 Subject: [PATCH 6/7] Updated to RIFE2 1.5.14 --- .idea/libraries/bld.xml | 4 ++-- .vscode/launch.json | 2 +- .vscode/settings.json | 2 +- bld | 2 +- bld.bat | 2 +- lib/bld/bld-wrapper.jar | Bin 24013 -> 24362 bytes lib/bld/bld-wrapper.properties | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 657c6e2..f713fc9 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,11 +2,11 @@ - + - + diff --git a/.vscode/launch.json b/.vscode/launch.json index e13f368..d4838b5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,7 +5,7 @@ "type": "java", "name": "Run Main", "request": "launch", - "mainClass": "rife.bld.extension.propertyFile.PropertyFileOperation" + "mainClass": "rife.bld.extension.propertyfile.PropertyFileOperation" }, { "type": "java", diff --git a/.vscode/settings.json b/.vscode/settings.json index 44ad385..bce4c6c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.rife2/dist/rife2-1.5.11.jar", + "${HOME}/.rife2/dist/rife2-1.5.14.jar", "lib/compile/*.jar", "lib/runtime/*.jar", "lib/test/*.jar" diff --git a/bld b/bld index 94044a2..460941b 100755 --- a/bld +++ b/bld @@ -1,2 +1,2 @@ #!/usr/bin/env sh -java -jar "$(dirname "$0")/lib/bld/bld-wrapper.jar" "$0" --build rife.bld.extension.propertyFile.PropertyFileBuild "$@" \ No newline at end of file +java -jar "$(dirname "$0")/lib/bld/bld-wrapper.jar" "$0" --build rife.bld.extension.propertyfile.PropertyFileBuild "$@" \ No newline at end of file diff --git a/bld.bat b/bld.bat index cc4a868..91acc4b 100644 --- a/bld.bat +++ b/bld.bat @@ -1,4 +1,4 @@ @echo off set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. -java -jar "%DIRNAME%/lib/bld/bld-wrapper.jar" "%0" --build rife.bld.extension.propertyFile.PropertyFileBuild %* \ No newline at end of file +java -jar "%DIRNAME%/lib/bld/bld-wrapper.jar" "%0" --build rife.bld.extension.propertyfile.PropertyFileBuild %* \ No newline at end of file diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 02b522b7397f9fb906cc08025bbf0284f0e55cd3..d80796e4e6c406e63e91b88641c8ff145ba9c7a1 100644 GIT binary patch delta 11620 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 delta 11353 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 diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 84e9308..f40fc3f 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,2 +1,2 @@ #Sat Apr 01 10:09:33 PDT 2023 -rife2.version=1.5.11 +rife2.version=1.5.14 From 00cd80894d2db9681c7faccbd2550d37427b50a9 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 3 Apr 2023 02:22:32 -0700 Subject: [PATCH 7/7] Added the command name to warnings --- .../PropertyFileBuild.java | 4 +- .../{propertyFile => propertyfile}/Entry.java | 8 +- .../PropertyFileOperation.java | 29 ++++--- .../PropertyFileUtils.java | 76 +++++++++---------- 4 files changed, 62 insertions(+), 55 deletions(-) rename src/bld/java/rife/bld/extension/{propertyFile => propertyfile}/PropertyFileBuild.java (97%) rename src/main/java/rife/bld/extension/{propertyFile => propertyfile}/Entry.java (97%) rename src/main/java/rife/bld/extension/{propertyFile => propertyfile}/PropertyFileOperation.java (78%) rename src/main/java/rife/bld/extension/{propertyFile => propertyfile}/PropertyFileUtils.java (77%) diff --git a/src/bld/java/rife/bld/extension/propertyFile/PropertyFileBuild.java b/src/bld/java/rife/bld/extension/propertyfile/PropertyFileBuild.java similarity index 97% rename from src/bld/java/rife/bld/extension/propertyFile/PropertyFileBuild.java rename to src/bld/java/rife/bld/extension/propertyfile/PropertyFileBuild.java index d452cb7..0708b54 100644 --- a/src/bld/java/rife/bld/extension/propertyFile/PropertyFileBuild.java +++ b/src/bld/java/rife/bld/extension/propertyfile/PropertyFileBuild.java @@ -1,4 +1,4 @@ -package rife.bld.extension.propertyFile; +package rife.bld.extension.propertyfile; import rife.bld.Project; import rife.bld.publish.PublishDeveloper; @@ -35,7 +35,7 @@ public class PropertyFileBuild extends Project { downloadSources = true; repositories = List.of(MAVEN_CENTRAL, SONATYPE_SNAPSHOTS); scope(compile) - .include(dependency("com.uwyn.rife2", "rife2", version(1, 5, 11))); + .include(dependency("com.uwyn.rife2", "rife2", version(1, 5, 15))); scope(test) .include(dependency("org.jsoup", "jsoup", version(1, 15, 4))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 9, 2))) diff --git a/src/main/java/rife/bld/extension/propertyFile/Entry.java b/src/main/java/rife/bld/extension/propertyfile/Entry.java similarity index 97% rename from src/main/java/rife/bld/extension/propertyFile/Entry.java rename to src/main/java/rife/bld/extension/propertyfile/Entry.java index 99c1903..7dafd76 100644 --- a/src/main/java/rife/bld/extension/propertyFile/Entry.java +++ b/src/main/java/rife/bld/extension/propertyfile/Entry.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package rife.bld.extension.propertyFile; +package rife.bld.extension.propertyfile; /** *

Declares the edits to be made to a {@link java.util.Properties Properties} file.

@@ -174,6 +174,8 @@ public class Entry { * * @param key the {@link java.util.Properties property} key */ + + @SuppressWarnings("unused") public Entry key(String key) { setKey(key); return this; @@ -184,6 +186,7 @@ public class Entry { * * @param value the {@link java.util.Properties property} value */ + @SuppressWarnings("unused") public Entry value(Object value) { if (value != null) { setValue(String.valueOf(value)); @@ -200,6 +203,7 @@ public class Entry { * * @param defaultValue the default value */ + @SuppressWarnings("unused") public Entry defaultValue(Object defaultValue) { if (defaultValue != null) { setDefaultValue(String.valueOf(defaultValue)); @@ -224,6 +228,7 @@ public class Entry { * * @param operation the entry {@link Operations Operation} */ + @SuppressWarnings("unused") public Entry operation(Operations operation) { setOperation(operation); return this; @@ -247,6 +252,7 @@ public class Entry { * * @param unit the {@link Units unit} */ + @SuppressWarnings("unused") public Entry unit(Units unit) { setUnit(unit); return this; diff --git a/src/main/java/rife/bld/extension/propertyFile/PropertyFileOperation.java b/src/main/java/rife/bld/extension/propertyfile/PropertyFileOperation.java similarity index 78% rename from src/main/java/rife/bld/extension/propertyFile/PropertyFileOperation.java rename to src/main/java/rife/bld/extension/propertyfile/PropertyFileOperation.java index 80306c2..1692a99 100644 --- a/src/main/java/rife/bld/extension/propertyFile/PropertyFileOperation.java +++ b/src/main/java/rife/bld/extension/propertyfile/PropertyFileOperation.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package rife.bld.extension.propertyFile; +package rife.bld.extension.propertyfile; import rife.bld.Project; -import rife.bld.extension.propertyFile.Entry.Operations; -import rife.bld.extension.propertyFile.Entry.Types; +import rife.bld.extension.propertyfile.Entry.Operations; +import rife.bld.extension.propertyfile.Entry.Types; import rife.bld.operations.AbstractOperation; import java.io.File; @@ -50,6 +50,7 @@ public class PropertyFileOperation extends AbstractOperation success = PropertyFileUtils.processDate(properties, entry, failOnWarning); - case INT -> success = PropertyFileUtils.processInt(properties, entry, failOnWarning); + case DATE -> + success = PropertyFileUtils.processDate(commandName, properties, entry, failOnWarning); + case INT -> + success = PropertyFileUtils.processInt(commandName, properties, entry, failOnWarning); default -> success = PropertyFileUtils.processString(properties, entry); } } diff --git a/src/main/java/rife/bld/extension/propertyFile/PropertyFileUtils.java b/src/main/java/rife/bld/extension/propertyfile/PropertyFileUtils.java similarity index 77% rename from src/main/java/rife/bld/extension/propertyFile/PropertyFileUtils.java rename to src/main/java/rife/bld/extension/propertyfile/PropertyFileUtils.java index dd7af8b..f3d6869 100644 --- a/src/main/java/rife/bld/extension/propertyFile/PropertyFileUtils.java +++ b/src/main/java/rife/bld/extension/propertyfile/PropertyFileUtils.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package rife.bld.extension.propertyFile; +package rife.bld.extension.propertyfile; -import rife.bld.extension.propertyFile.Entry.Operations; -import rife.bld.extension.propertyFile.Entry.Units; +import rife.bld.extension.propertyfile.Entry.Operations; +import rife.bld.extension.propertyfile.Entry.Units; import rife.tools.Localization; import javax.imageio.IIOException; @@ -62,11 +62,12 @@ public final class PropertyFileUtils { /** * Processes a date {@link Properties property}. * - * @param p the {@link Properties property} - * @param entry the {@link Entry} containing the {@link Properties property} edits + * @param command the issuing command + * @param p the {@link Properties property} + * @param entry the {@link Entry} containing the {@link Properties property} edits * @return {@code true} if successful */ - public static boolean processDate(Properties p, Entry entry, boolean failOnWarning) { + public static boolean processDate(String command, Properties p, Entry entry, boolean failOnWarning) { var success = true; var cal = Calendar.getInstance(); var value = PropertyFileUtils.currentValue(p.getProperty(entry.getKey()), entry.getValue(), @@ -85,7 +86,8 @@ public final class PropertyFileUtils { try { cal.setTime(fmt.parse(value)); } catch (ParseException pe) { - warn("Date parse exception for: " + entry.getKey() + " --> " + pe.getMessage(), pe, failOnWarning); + warn(command, "Non-date value for \"" + entry.getKey() + "\" --> " + pe.getMessage(), + pe, failOnWarning); success = false; } } @@ -99,10 +101,12 @@ public final class PropertyFileUtils { offset *= -1; } } catch (NumberFormatException nfe) { - warn("Non-integer value for: " + entry.getKey() + " --> " + nfe.getMessage(), nfe, failOnWarning); + warn(command, "Non-date value for \"" + entry.getKey() + "\" --> " + nfe.getMessage(), nfe, + failOnWarning); success = false; } + //noinspection MagicConstant cal.add(calendarFields.getOrDefault(entry.getUnit(), Calendar.DATE), offset); } @@ -158,25 +162,15 @@ public final class PropertyFileUtils { return result; } - /** - * Ensure that the given value is an integer. - * - * @param value the value - * @return the parsed value - * @throws NumberFormatException if the value could not be parsed as an integer - */ - static String parseInt(String value) throws NumberFormatException { - return String.valueOf(Integer.parseInt(value)); - } - /** * Processes an integer {@link Properties property}. * - * @param p the {@link Properties property} - * @param entry the {@link Entry} containing the {@link Properties property} edits + * @param command the issuing command + * @param p the {@link Properties property} + * @param entry the {@link Entry} containing the {@link Properties property} edits * @return {@code true} if successful */ - public static boolean processInt(Properties p, Entry entry, boolean failOnWarning) { + public static boolean processInt(String command, Properties p, Entry entry, boolean failOnWarning) { var success = true; int intValue; try { @@ -187,13 +181,13 @@ public final class PropertyFileUtils { if (value.isBlank()) { intValue = fmt.parse("0").intValue(); } else { - intValue = fmt.parse(parseInt(value)).intValue(); + intValue = fmt.parse(value).intValue(); } if (entry.getOperation() != Entry.Operations.SET) { var opValue = 1; if (entry.getValue() != null) { - opValue = fmt.parse(parseInt(entry.getValue())).intValue(); + opValue = fmt.parse(entry.getValue()).intValue(); } if (entry.getOperation() == Entry.Operations.ADD) { intValue += opValue; @@ -202,11 +196,9 @@ public final class PropertyFileUtils { } } p.setProperty(entry.getKey(), fmt.format(intValue)); - } catch (NumberFormatException nfe) { - warn("Number format exception for: " + entry.getKey() + " --> " + nfe.getMessage(), nfe, failOnWarning); - success = false; - } catch (ParseException pe) { - warn("Number parsing exception for: " + entry.getKey() + " --> " + pe.getMessage(), pe, failOnWarning); + } catch (NumberFormatException | ParseException e) { + warn(command, "Non-integer value for \"" + entry.getKey() + "\" --> " + e.getMessage(), e, + failOnWarning); success = false; } @@ -238,27 +230,29 @@ public final class PropertyFileUtils { /** * Logs a warning. * + * @param command the issuing command * @param message the message to log */ - static void warn(String message) { + static void warn(String command, String message) { if (LOGGER.isLoggable(Level.WARNING)) { - LOGGER.warning(message); + LOGGER.warning('[' + command + "] " + message); } } /** * Logs a warning. * + * @param command The command name * @param message the message log * @param e the related exception * @param failOnWarning skips logging the exception if set to {@code false} */ - static void warn(String message, Exception e, boolean failOnWarning) { + static void warn(String command, String message, Exception e, boolean failOnWarning) { if (LOGGER.isLoggable(Level.WARNING)) { if (failOnWarning) { - LOGGER.log(Level.WARNING, message, e); + LOGGER.log(Level.WARNING, '[' + command + "] " + message, e); } else { - LOGGER.warning(message); + LOGGER.warning('[' + command + "] " + message); } } } @@ -266,26 +260,24 @@ public final class PropertyFileUtils { /** * Loads a {@link Properties properties} file. * - * @param file the file location. - * @param p the {@link Properties properties} to load into. + * @param command the issuing command + * @param file the file location. + * @param p the {@link Properties properties} to load into. * @return {@code true} if successful */ - public static boolean loadProperties(File file, Properties p) { + public static boolean loadProperties(String command, File file, Properties p) { boolean success = true; if (file != null) { if (file.exists()) { try (var propStream = Files.newInputStream(file.toPath(), StandardOpenOption.READ)) { p.load(propStream); } catch (IOException ioe) { - warn("Could not load properties file: " + ioe.getMessage(), ioe, true); + warn(command, "Could not load properties file: " + ioe.getMessage(), ioe, true); success = false; } - } else { - warn("The '" + file + "' properties file could not be found."); - success = false; } } else { - warn("Please specify the properties file location."); + warn(command, "Please specify the properties file location."); success = false; } return success;