Compare commits
No commits in common. "master" and "0.9.5" have entirely different histories.
34 changed files with 597 additions and 676 deletions
41
.github/workflows/bld.yml
vendored
41
.github/workflows/bld.yml
vendored
|
@ -4,48 +4,29 @@ on: [ push, pull_request, workflow_dispatch ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-bld-project:
|
build-bld-project:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
java-version: [ 17, 21, 24 ]
|
java-version: [ 17, 20 ]
|
||||||
kotlin-version: [ 1.9.25, 2.0.21, 2.1.20 ]
|
|
||||||
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source repository
|
- name: Checkout source repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Set up JDK ${{ matrix.java-version }}
|
- name: Set up JDK ${{ matrix.java-version }}
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
distribution: "zulu"
|
distribution: 'zulu'
|
||||||
java-version: ${{ matrix.java-version }}
|
java-version: ${{ matrix.java-version }}
|
||||||
|
|
||||||
- name: Download dependencies [examples]
|
- name: Grant execute permission for bld
|
||||||
working-directory: examples
|
run: chmod +x bld
|
||||||
|
|
||||||
|
- name: Download the dependencies
|
||||||
run: ./bld download
|
run: ./bld download
|
||||||
|
|
||||||
- name: Compile run [examples]
|
- name: Run tests with bld
|
||||||
working-directory: examples
|
|
||||||
run: ./bld compile run
|
|
||||||
|
|
||||||
- name: Update version properties and run [examples]
|
|
||||||
working-directory: examples
|
|
||||||
run: |
|
|
||||||
./bld update-major run
|
|
||||||
./bld update-minor run
|
|
||||||
./bld update-patch run
|
|
||||||
./bld update-release run
|
|
||||||
|
|
||||||
- name: Delete version properties and run [examples]
|
|
||||||
working-directory: examples
|
|
||||||
run: ./bld delete-version run
|
|
||||||
|
|
||||||
- name: Download dependencies
|
|
||||||
run: ./bld download
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: ./bld compile test
|
run: ./bld compile test
|
12
.github/workflows/pages.yml
vendored
12
.github/workflows/pages.yml
vendored
|
@ -30,14 +30,14 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source repository
|
- name: Checkout source repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Set up JDK 17
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
distribution: "zulu"
|
distribution: 'zulu'
|
||||||
java-version: 17
|
java-version: 17
|
||||||
|
|
||||||
- name: Build Javadocs
|
- name: Build Javadocs
|
||||||
|
@ -47,11 +47,11 @@ jobs:
|
||||||
uses: actions/configure-pages@v3
|
uses: actions/configure-pages@v3
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-pages-artifact@v3
|
uses: actions/upload-pages-artifact@v1
|
||||||
with:
|
with:
|
||||||
# Upload generated Javadocs repository
|
# Upload generated Javadocs repository
|
||||||
path: "build/javadoc/"
|
path: 'build/javadoc/'
|
||||||
|
|
||||||
- name: Deploy to GitHub Pages
|
- name: Deploy to GitHub Pages
|
||||||
id: deployment
|
id: deployment
|
||||||
uses: actions/deploy-pages@v4
|
uses: actions/deploy-pages@v1
|
6
.idea/bld.xml
generated
6
.idea/bld.xml
generated
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="BldConfiguration">
|
|
||||||
<events />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
2
.idea/copyright/Apache_License.xml
generated
2
.idea/copyright/Apache_License.xml
generated
|
@ -1,6 +1,6 @@
|
||||||
<component name="CopyrightManager">
|
<component name="CopyrightManager">
|
||||||
<copyright>
|
<copyright>
|
||||||
<option name="notice" value="Copyright 2023-&#36;today.year the original author or authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." />
|
<option name="notice" value="Copyright 2023-Copyright &#36;today.yearamp;#36;today.year the original author or authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." />
|
||||||
<option name="myName" value="Apache License" />
|
<option name="myName" value="Apache License" />
|
||||||
</copyright>
|
</copyright>
|
||||||
</component>
|
</component>
|
13
.idea/icon.svg
generated
13
.idea/icon.svg
generated
|
@ -1,13 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
||||||
<svg width="100%" height="100%" viewBox="0 0 179 108" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
|
||||||
<g transform="matrix(1,0,0,1,-210.511,-96.3382)">
|
|
||||||
<g transform="matrix(1,0,0,1,-23.3386,-649.816)">
|
|
||||||
<g transform="matrix(0.221288,0,0,0.24,73.9536,390.254)">
|
|
||||||
<path d="M722.568,1482.92L722.568,1921.1L808.968,1921.1L808.968,1888.7C822.168,1907.9 846.168,1930.1 893.568,1930.1C933.168,1930.1 961.968,1917.5 985.368,1893.5C1012.97,1865.9 1027.37,1827.5 1027.37,1786.1C1027.37,1741.7 1011.17,1705.1 985.368,1680.5C961.968,1658.3 928.968,1644.5 892.368,1644.5C862.968,1644.5 830.568,1654.1 808.968,1683.5L808.968,1482.92L722.568,1482.92ZM871.368,1718.9C888.768,1718.9 903.768,1723.7 917.568,1736.9C930.168,1748.9 938.568,1766.3 938.568,1787.9C938.568,1807.7 930.168,1825.1 917.568,1837.1C904.368,1849.7 887.568,1855.7 872.568,1855.7C856.368,1855.7 837.168,1849.1 823.368,1835.9C813.168,1826.3 803.568,1810.1 803.568,1787.9C803.568,1765.1 812.568,1749.5 822.768,1738.7C836.568,1724.3 852.768,1718.9 871.368,1718.9Z" style="fill:rgb(35,146,255);fill-rule:nonzero;"/>
|
|
||||||
<rect x="1083.77" y="1482.92" width="86.4" height="438.182" style="fill:rgb(250,144,82);fill-rule:nonzero;"/>
|
|
||||||
<path d="M1531.37,1482.92L1444.97,1482.92L1444.97,1683.5C1423.37,1654.1 1390.97,1644.5 1361.57,1644.5C1324.97,1644.5 1291.97,1658.3 1268.57,1680.5C1242.77,1705.1 1226.57,1741.7 1226.57,1786.1C1226.57,1827.5 1240.97,1865.9 1268.57,1893.5C1291.97,1917.5 1320.77,1930.1 1360.37,1930.1C1407.77,1930.1 1431.77,1907.9 1444.97,1888.7L1444.97,1921.1L1531.37,1921.1L1531.37,1482.92ZM1382.57,1718.9C1401.17,1718.9 1417.37,1724.3 1431.17,1738.7C1441.37,1749.5 1450.37,1765.1 1450.37,1787.9C1450.37,1810.1 1440.77,1826.3 1430.57,1835.9C1416.77,1849.1 1397.57,1855.7 1381.37,1855.7C1366.37,1855.7 1349.57,1849.7 1336.37,1837.1C1323.77,1825.1 1315.37,1807.7 1315.37,1787.9C1315.37,1766.3 1323.77,1748.9 1336.37,1736.9C1350.17,1723.7 1365.17,1718.9 1382.57,1718.9Z" style="fill:rgb(35,146,255);fill-rule:nonzero;"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
4
.idea/libraries/bld.xml
generated
4
.idea/libraries/bld.xml
generated
|
@ -2,12 +2,12 @@
|
||||||
<library name="bld">
|
<library name="bld">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1-sources.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0-sources.jar!/" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<excluded>
|
<excluded>
|
||||||
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
||||||
|
|
4
.idea/libraries/compile.xml
generated
4
.idea/libraries/compile.xml
generated
|
@ -7,7 +7,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/compile" />
|
<root url="file://$PROJECT_DIR$/lib/compile" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
.idea/libraries/runtime.xml
generated
4
.idea/libraries/runtime.xml
generated
|
@ -7,7 +7,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
.idea/libraries/test.xml
generated
4
.idea/libraries/test.xml
generated
|
@ -7,7 +7,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/test" />
|
<root url="file://$PROJECT_DIR$/lib/test" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
@ -9,7 +9,7 @@
|
||||||
],
|
],
|
||||||
"java.configuration.updateBuildConfiguration": "automatic",
|
"java.configuration.updateBuildConfiguration": "automatic",
|
||||||
"java.project.referencedLibraries": [
|
"java.project.referencedLibraries": [
|
||||||
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
"${HOME}/.bld/dist/bld-1.9.0.jar",
|
||||||
"lib/**/*.jar"
|
"lib/**/*.jar"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
19
README.md
19
README.md
|
@ -2,22 +2,14 @@
|
||||||
|
|
||||||
[](https://opensource.org/licenses/Apache-2.0)
|
[](https://opensource.org/licenses/Apache-2.0)
|
||||||
[](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
|
[](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
|
||||||
[](https://rife2.com/bld)
|
[](https://rife2.com/bld)
|
||||||
[](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-property-file)
|
[](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-property-file)
|
||||||
[](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-property-file)
|
[](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-property-file)
|
||||||
[](https://github.com/rife2/bld-property-file/actions/workflows/bld.yml)
|
[](https://github.com/rife2/bld-property-file/actions/workflows/bld.yml)
|
||||||
|
|
||||||
To install the latest version, add the following to the `lib/bld/bld-wrapper.properties` file:
|
To install, please refer to the [extensions documentation](https://github.com/rife2/bld/wiki/Extensions).
|
||||||
|
|
||||||
```properties
|
To create or modifying [property files](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html) with [bld](https://rife2.com/bld), add the follwing to your build file:
|
||||||
bld.extension-property-file=com.uwyn.rife2:bld-property-file
|
|
||||||
```
|
|
||||||
|
|
||||||
For more information, please refer to the [extensions](https://github.com/rife2/bld/wiki/Extensions) documentation.
|
|
||||||
|
|
||||||
## Create or Modify Property Files
|
|
||||||
|
|
||||||
To create or modify [property files](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html) with [bld](https://rife2.com/bld), add the follwing to your build file:
|
|
||||||
|
|
||||||
```java
|
```java
|
||||||
@BuildCommand
|
@BuildCommand
|
||||||
|
@ -78,11 +70,10 @@ The [PropertyFileOperation](https://rife2.github.io/bld-property-file/rife/bld/e
|
||||||
The [Entry](https://rife2.github.io/bld-property-file/rife/bld/extension/propertyfile/Entry.html) class is used to specify modifications to a [String property](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html).
|
The [Entry](https://rife2.github.io/bld-property-file/rife/bld/extension/propertyfile/Entry.html) class is used to specify modifications to a [String property](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html).
|
||||||
|
|
||||||
| Function | Description/Example |
|
| Function | Description/Example |
|
||||||
|:-----------------|:--------------------------------------------------------------------------------------------------------------------------------------------------|
|
|:-----------------|:--------------------------------------------------------------------------------------------------------|
|
||||||
| `defaultValue()` | The value to be used if the property doesn't exist. |
|
| `defaultValue()` | The value to be used if the property doesn't exist. |
|
||||||
| `delete()` | Delete the property. |
|
| `delete()` | Delete the property. |
|
||||||
| `modify()` | `modify("-foo", String::concat)`<br/>`modify("-foo", (v, s) -> v + s)`<br/>`modify((v, s) -> v.trim())` |
|
| `modify()` | `modify("-foo", String::concat)`<br/>`modify("-foo", (v, s) -> v + s)`<br/>`modify((v, s) -> v.trim())` | Modify an entry value. |
|
||||||
| `pattern()` | If present, will parse the value as a [Formatter](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Formatter.html) pattern. |
|
|
||||||
| `set()` | The value to set the property to, regardless of its previous value. |
|
| `set()` | The value to set the property to, regardless of its previous value. |
|
||||||
|
|
||||||
## EntryDate
|
## EntryDate
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
<!-- BEST PRACTICES -->
|
<!-- BEST PRACTICES -->
|
||||||
<rule ref="category/java/bestpractices.xml">
|
<rule ref="category/java/bestpractices.xml">
|
||||||
<exclude name="AvoidPrintStackTrace"/>
|
<exclude name="AvoidPrintStackTrace"/>
|
||||||
|
<exclude name="JUnit4TestShouldUseTestAnnotation"/>
|
||||||
|
<exclude name="JUnitTestContainsTooManyAsserts"/>
|
||||||
<exclude name="GuardLogStatement"/>
|
<exclude name="GuardLogStatement"/>
|
||||||
<exclude name="UnitTestContainsTooManyAsserts"/>
|
|
||||||
<exclude name="UnitTestShouldUseTestAnnotation"/>
|
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
<rule ref="category/java/bestpractices.xml/MissingOverride">
|
<rule ref="category/java/bestpractices.xml/MissingOverride">
|
||||||
|
@ -24,8 +24,8 @@
|
||||||
<rule ref="category/java/codestyle.xml">
|
<rule ref="category/java/codestyle.xml">
|
||||||
<exclude name="AtLeastOneConstructor"/>
|
<exclude name="AtLeastOneConstructor"/>
|
||||||
<exclude name="ClassNamingConventions"/>
|
<exclude name="ClassNamingConventions"/>
|
||||||
<exclude name="CommentDefaultAccessModifier"/>
|
|
||||||
<exclude name="ConfusingTernary"/>
|
<exclude name="ConfusingTernary"/>
|
||||||
|
<exclude name="CommentDefaultAccessModifier"/>
|
||||||
<exclude name="FieldNamingConventions"/>
|
<exclude name="FieldNamingConventions"/>
|
||||||
<exclude name="LocalVariableCouldBeFinal"/>
|
<exclude name="LocalVariableCouldBeFinal"/>
|
||||||
<exclude name="LongVariable"/>
|
<exclude name="LongVariable"/>
|
||||||
|
@ -35,15 +35,8 @@
|
||||||
<exclude name="ShortClassName"/>
|
<exclude name="ShortClassName"/>
|
||||||
<exclude name="ShortMethodName"/>
|
<exclude name="ShortMethodName"/>
|
||||||
<exclude name="ShortVariable"/>
|
<exclude name="ShortVariable"/>
|
||||||
<exclude name="UseExplicitTypes"/>
|
|
||||||
<exclude name="UseUnderscoresInNumericLiterals"/>
|
|
||||||
<exclude name="UselessParentheses"/>
|
<exclude name="UselessParentheses"/>
|
||||||
</rule>
|
<exclude name="UseUnderscoresInNumericLiterals"/>
|
||||||
|
|
||||||
<rule ref="category/java/codestyle.xml/UnnecessaryImport">
|
|
||||||
<properties>
|
|
||||||
<property name="violationSuppressRegex" value="Unused (static|.*\.\*).*"/>
|
|
||||||
</properties>
|
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
<!-- DESIGN -->
|
<!-- DESIGN -->
|
||||||
|
@ -53,6 +46,8 @@
|
||||||
<exclude name="AvoidUncheckedExceptionsInSignatures"/>
|
<exclude name="AvoidUncheckedExceptionsInSignatures"/>
|
||||||
<exclude name="CognitiveComplexity"/>
|
<exclude name="CognitiveComplexity"/>
|
||||||
<exclude name="CyclomaticComplexity"/>
|
<exclude name="CyclomaticComplexity"/>
|
||||||
|
<exclude name="ExcessiveClassLength"/>
|
||||||
|
<exclude name="ExcessiveMethodLength"/>
|
||||||
<exclude name="ExcessiveParameterList"/>
|
<exclude name="ExcessiveParameterList"/>
|
||||||
<exclude name="ExcessivePublicCount"/>
|
<exclude name="ExcessivePublicCount"/>
|
||||||
<exclude name="GodClass"/>
|
<exclude name="GodClass"/>
|
||||||
|
|
4
examples/.idea/libraries/bld.xml
generated
4
examples/.idea/libraries/bld.xml
generated
|
@ -2,12 +2,12 @@
|
||||||
<library name="bld">
|
<library name="bld">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0.jar!/" />
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1-sources.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.0-sources.jar!/" />
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/bld" recursive="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/bld" recursive="false" />
|
||||||
|
|
4
examples/.idea/libraries/compile.xml
generated
4
examples/.idea/libraries/compile.xml
generated
|
@ -7,7 +7,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/compile" />
|
<root url="file://$PROJECT_DIR$/lib/compile" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
examples/.idea/libraries/runtime.xml
generated
4
examples/.idea/libraries/runtime.xml
generated
|
@ -7,7 +7,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
examples/.idea/libraries/test.xml
generated
4
examples/.idea/libraries/test.xml
generated
|
@ -7,7 +7,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/test" />
|
<root url="file://$PROJECT_DIR$/lib/test" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
2
examples/.vscode/settings.json
vendored
2
examples/.vscode/settings.json
vendored
|
@ -9,7 +9,7 @@
|
||||||
],
|
],
|
||||||
"java.configuration.updateBuildConfiguration": "automatic",
|
"java.configuration.updateBuildConfiguration": "automatic",
|
||||||
"java.project.referencedLibraries": [
|
"java.project.referencedLibraries": [
|
||||||
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
"${HOME}/.bld/dist/bld-1.9.0.jar",
|
||||||
"lib/**/*.jar"
|
"lib/**/*.jar"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,18 +3,3 @@
|
||||||
```console
|
```console
|
||||||
./bld compile run
|
./bld compile run
|
||||||
```
|
```
|
||||||
|
|
||||||
# Update Version Properties
|
|
||||||
|
|
||||||
```console
|
|
||||||
./bld update-major run
|
|
||||||
./bld update-minor run
|
|
||||||
./bld update-patch run
|
|
||||||
./bld update-release run
|
|
||||||
```
|
|
||||||
|
|
||||||
# Delete Version Properties
|
|
||||||
|
|
||||||
```console
|
|
||||||
./bld delete-version run
|
|
||||||
```
|
|
Binary file not shown.
|
@ -1,6 +1,6 @@
|
||||||
#Sun Apr 02 10:32:44 PDT 2023
|
#Sun Apr 02 10:32:44 PDT 2023
|
||||||
|
bld.extension=com.uwyn.rife2:bld-property-file:0.9.5
|
||||||
|
bld.repositories=MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||||
bld.downloadExtensionSources=true
|
bld.downloadExtensionSources=true
|
||||||
bld.downloadLocation=
|
bld.downloadLocation=
|
||||||
bld.extension=com.uwyn.rife2:bld-property-file:0.9.9
|
bld.version=1.9.0
|
||||||
bld.repositories=MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
|
||||||
bld.version=2.2.1
|
|
||||||
|
|
|
@ -42,15 +42,15 @@ public class PropertyFileExampleBuild extends Project {
|
||||||
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
|
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
|
||||||
|
|
||||||
scope(test)
|
scope(test)
|
||||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1)))
|
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2)))
|
||||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1)));
|
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
new PropertyFileExampleBuild().start(args);
|
new PropertyFileExampleBuild().start(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@BuildCommand(value = "update-major", summary = "Updates major version")
|
@BuildCommand(summary = "Updates major version")
|
||||||
public void updateMajor() throws Exception {
|
public void updateMajor() throws Exception {
|
||||||
new PropertyFileOperation()
|
new PropertyFileOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
|
@ -66,7 +66,7 @@ public class PropertyFileExampleBuild extends Project {
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@BuildCommand(value = "update-minor", summary = "Updates minor version")
|
@BuildCommand(summary = "Updates minor version")
|
||||||
public void updateMinor() throws Exception {
|
public void updateMinor() throws Exception {
|
||||||
new PropertyFileOperation()
|
new PropertyFileOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
|
@ -82,7 +82,7 @@ public class PropertyFileExampleBuild extends Project {
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@BuildCommand(value = "update-patch", summary = "Updates patch version")
|
@BuildCommand(summary = "Updates patch version")
|
||||||
public void updatePatch() throws Exception {
|
public void updatePatch() throws Exception {
|
||||||
new PropertyFileOperation()
|
new PropertyFileOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
|
@ -98,7 +98,7 @@ public class PropertyFileExampleBuild extends Project {
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@BuildCommand(value = "update-release", summary = "Updates the release")
|
@BuildCommand(summary = "Updates the release")
|
||||||
public void updateRelease() throws Exception {
|
public void updateRelease() throws Exception {
|
||||||
new PropertyFileOperation()
|
new PropertyFileOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
|
@ -107,11 +107,10 @@ public class PropertyFileExampleBuild extends Project {
|
||||||
.entry(new EntryDate("release").now().pattern("yyyyMMddHHmmss"))
|
.entry(new EntryDate("release").now().pattern("yyyyMMddHHmmss"))
|
||||||
// prepend 'beta.' to the release
|
// prepend 'beta.' to the release
|
||||||
.entry(new Entry("release").modify("beta.", (v, s) -> s + v))
|
.entry(new Entry("release").modify("beta.", (v, s) -> s + v))
|
||||||
.entry(buildDateEntry)
|
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@BuildCommand(value = "delete-version", summary = "Delete version properties")
|
@BuildCommand(summary = "Delete version properties")
|
||||||
public void deleteVersion() throws Exception {
|
public void deleteVersion() throws Exception {
|
||||||
new PropertyFileOperation()
|
new PropertyFileOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#
|
#
|
||||||
#Mon Jan 13 22:23:02 PST 2025
|
#Sun Oct 22 14:31:42 PDT 2023
|
||||||
build.date=2025-01-13
|
release=beta.20231022143142
|
||||||
release=beta.20250113222132
|
version.major=1
|
||||||
version.major=3
|
version.minor=0
|
||||||
version.minor=1
|
version.patch=1
|
||||||
version.patch=20
|
|
||||||
|
|
Binary file not shown.
|
@ -1,6 +1,7 @@
|
||||||
bld.downloadExtensionJavadoc=false
|
bld.downloadExtensionJavadoc=false
|
||||||
bld.downloadExtensionSources=true
|
bld.downloadExtensionSources=true
|
||||||
bld.downloadLocation=
|
bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.7
|
||||||
bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.2
|
bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.3
|
||||||
bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||||
bld.version=2.2.1
|
bld.downloadLocation=
|
||||||
|
bld.version=1.9.0
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -18,14 +18,17 @@ package rife.bld.extension.propertyfile;
|
||||||
|
|
||||||
import rife.bld.BuildCommand;
|
import rife.bld.BuildCommand;
|
||||||
import rife.bld.Project;
|
import rife.bld.Project;
|
||||||
|
import rife.bld.extension.JacocoReportOperation;
|
||||||
import rife.bld.extension.PmdOperation;
|
import rife.bld.extension.PmdOperation;
|
||||||
import rife.bld.publish.PublishDeveloper;
|
import rife.bld.publish.PublishDeveloper;
|
||||||
import rife.bld.publish.PublishLicense;
|
import rife.bld.publish.PublishLicense;
|
||||||
import rife.bld.publish.PublishScm;
|
import rife.bld.publish.PublishScm;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static rife.bld.dependencies.Repository.*;
|
import static rife.bld.dependencies.Repository.MAVEN_CENTRAL;
|
||||||
|
import static rife.bld.dependencies.Repository.RIFE2_RELEASES;
|
||||||
import static rife.bld.dependencies.Scope.compile;
|
import static rife.bld.dependencies.Scope.compile;
|
||||||
import static rife.bld.dependencies.Scope.test;
|
import static rife.bld.dependencies.Scope.test;
|
||||||
import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING;
|
import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING;
|
||||||
|
@ -34,19 +37,19 @@ public class PropertyFileBuild extends Project {
|
||||||
public PropertyFileBuild() {
|
public PropertyFileBuild() {
|
||||||
pkg = "rife.bld.extension";
|
pkg = "rife.bld.extension";
|
||||||
name = "bld-property-file";
|
name = "bld-property-file";
|
||||||
version = version(0, 9, 9);
|
version = version(0, 9, 5);
|
||||||
|
|
||||||
javaRelease = 17;
|
javaRelease = 17;
|
||||||
downloadSources = true;
|
downloadSources = true;
|
||||||
autoDownloadPurge = true;
|
autoDownloadPurge = true;
|
||||||
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS);
|
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
|
||||||
|
|
||||||
scope(compile)
|
scope(compile)
|
||||||
.include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1)));
|
.include(dependency("com.uwyn.rife2", "bld", version(1, 9, 0)));
|
||||||
scope(test)
|
scope(test)
|
||||||
.include(dependency("org.jsoup", "jsoup", version(1, 19, 1)))
|
.include(dependency("org.jsoup", "jsoup", version(1, 17, 2)))
|
||||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1)))
|
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2)))
|
||||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1)))
|
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2)))
|
||||||
.include(dependency("org.assertj:assertj-joda-time:2.2.0"));
|
.include(dependency("org.assertj:assertj-joda-time:2.2.0"));
|
||||||
|
|
||||||
javadocOperation()
|
javadocOperation()
|
||||||
|
@ -58,7 +61,6 @@ public class PropertyFileBuild extends Project {
|
||||||
|
|
||||||
publishOperation()
|
publishOperation()
|
||||||
.repository(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2"))
|
.repository(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2"))
|
||||||
.repository(repository("github"))
|
|
||||||
.info()
|
.info()
|
||||||
.groupId("com.uwyn.rife2")
|
.groupId("com.uwyn.rife2")
|
||||||
.artifactId("bld-property-file")
|
.artifactId("bld-property-file")
|
||||||
|
@ -80,7 +82,7 @@ public class PropertyFileBuild extends Project {
|
||||||
.license(
|
.license(
|
||||||
new PublishLicense()
|
new PublishLicense()
|
||||||
.name("The Apache License, Version 2.0")
|
.name("The Apache License, Version 2.0")
|
||||||
.url("https://www.apache.org/licenses/LICENSE-2.0.txt")
|
.url("http://www.apache.org/licenses/LICENSE-2.0.txt")
|
||||||
)
|
)
|
||||||
.scm(
|
.scm(
|
||||||
new PublishScm().connection("scm:git:https://github.com/rife2/bld-property-file.git")
|
new PublishScm().connection("scm:git:https://github.com/rife2/bld-property-file.git")
|
||||||
|
@ -94,8 +96,15 @@ public class PropertyFileBuild extends Project {
|
||||||
new PropertyFileBuild().start(args);
|
new PropertyFileBuild().start(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@BuildCommand(summary = "Generates JaCoCo Reports")
|
||||||
|
public void jacoco() throws IOException {
|
||||||
|
new JacocoReportOperation()
|
||||||
|
.fromProject(this)
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
|
|
||||||
@BuildCommand(summary = "Runs PMD analysis")
|
@BuildCommand(summary = "Runs PMD analysis")
|
||||||
public void pmd() throws Exception {
|
public void pmd() {
|
||||||
new PmdOperation()
|
new PmdOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
.failOnViolation(true)
|
.failOnViolation(true)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -25,59 +25,62 @@ import java.util.function.BiFunction;
|
||||||
* @author <a href="https://github.com/gbevin">Geert Bevin</a>
|
* @author <a href="https://github.com/gbevin">Geert Bevin</a>
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
public class Entry extends EntryBase<Entry> {
|
public class Entry extends EntryBase {
|
||||||
private String modifyValue_ = "";
|
|
||||||
private BiFunction<String, String, String> modify_;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new {@link Entry entry}.
|
* Instantiates a new Entry.
|
||||||
*
|
*
|
||||||
* @param key the required property key
|
* @param key the key
|
||||||
*/
|
*/
|
||||||
public Entry(String key) {
|
public Entry(String key) {
|
||||||
super(key);
|
super(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the modify function.
|
* <p>Sets the initial value to set the {@link java.util.Properties property} to, if not already defined.</p>
|
||||||
*
|
*
|
||||||
* @return the modify function
|
* @param defaultValue the default value
|
||||||
|
* @return the entry
|
||||||
*/
|
*/
|
||||||
protected BiFunction<String, String, String> modify() {
|
@SuppressWarnings("unused")
|
||||||
return modify_;
|
public Entry defaultValue(Object defaultValue) {
|
||||||
|
setDefaultValue(defaultValue);
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the modify function.
|
* Sets the {@link Entry entry} up for deletion.
|
||||||
*
|
*
|
||||||
* @param modify the modify function
|
* @return the entry
|
||||||
|
*/
|
||||||
|
public Entry delete() {
|
||||||
|
setDelete(true);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link Entry entry}.
|
||||||
|
*
|
||||||
|
* @param modify the modification function
|
||||||
|
* @return the entry
|
||||||
*/
|
*/
|
||||||
public Entry modify(BiFunction<String, String, String> modify) {
|
public Entry modify(BiFunction<String, String, String> modify) {
|
||||||
modify_ = modify;
|
setModify(modify);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the modify function.
|
* Creates a new {@link Entry entry}.
|
||||||
*
|
*
|
||||||
* @param value the value to perform a modification with
|
* @param value the value to perform a modification with
|
||||||
* @param modify the modify function
|
* @param modify the modification function
|
||||||
|
* @return the entry
|
||||||
*/
|
*/
|
||||||
public Entry modify(String value, BiFunction<String, String, String> modify) {
|
public Entry modify(String value, BiFunction<String, String, String> modify) {
|
||||||
modifyValue_ = value;
|
setModifyValue(value);
|
||||||
modify_ = modify;
|
setModify(modify);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the value to be used in the {@link #modify_} function.
|
|
||||||
*
|
|
||||||
* @return the modify value
|
|
||||||
*/
|
|
||||||
protected String modifyValue() {
|
|
||||||
return modifyValue_;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the new {@link java.util.Properties property} value.
|
* Sets the new {@link java.util.Properties property} value.
|
||||||
*
|
*
|
||||||
|
@ -85,7 +88,7 @@ public class Entry extends EntryBase<Entry> {
|
||||||
* @return the entry
|
* @return the entry
|
||||||
*/
|
*/
|
||||||
public Entry set(Object s) {
|
public Entry set(Object s) {
|
||||||
newValue(s);
|
setNewValue(s);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
package rife.bld.extension.propertyfile;
|
package rife.bld.extension.propertyfile;
|
||||||
|
|
||||||
|
import java.util.function.BiFunction;
|
||||||
import java.util.function.IntFunction;
|
import java.util.function.IntFunction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,14 +26,17 @@ import java.util.function.IntFunction;
|
||||||
* @author <a href="https://github.com/gbevin">Geert Bevin</a>
|
* @author <a href="https://github.com/gbevin">Geert Bevin</a>
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"unchecked", "PMD.AbstractClassWithoutAbstractMethod"})
|
@SuppressWarnings("PMD.DataClass")
|
||||||
public abstract class EntryBase<T> {
|
public class EntryBase {
|
||||||
private IntFunction<Integer> calc_;
|
private IntFunction<Integer> calc;
|
||||||
private Object defaultValue_;
|
private Object defaultValue;
|
||||||
private boolean isDelete_;
|
private boolean isDelete;
|
||||||
private String key_;
|
private String key;
|
||||||
private Object newValue_;
|
private BiFunction<String, String, String> modify;
|
||||||
private Object pattern_;
|
private String modifyValue = "";
|
||||||
|
private Object newValue;
|
||||||
|
private String pattern = "";
|
||||||
|
private EntryDate.Units unit = EntryDate.Units.DAY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new {@link EntryBase entry}.
|
* Creates a new {@link EntryBase entry}.
|
||||||
|
@ -40,7 +44,7 @@ public abstract class EntryBase<T> {
|
||||||
* @param key the required property key
|
* @param key the required property key
|
||||||
*/
|
*/
|
||||||
public EntryBase(String key) {
|
public EntryBase(String key) {
|
||||||
key_ = key;
|
this.key = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -48,18 +52,8 @@ public abstract class EntryBase<T> {
|
||||||
*
|
*
|
||||||
* @return the calc function
|
* @return the calc function
|
||||||
*/
|
*/
|
||||||
protected IntFunction<Integer> calc() {
|
protected IntFunction<Integer> getCalc() {
|
||||||
return calc_;
|
return calc;
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the calculation function.
|
|
||||||
*
|
|
||||||
* @param calc the calc function
|
|
||||||
*/
|
|
||||||
public T calc(IntFunction<Integer> calc) {
|
|
||||||
calc_ = calc;
|
|
||||||
return (T) this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -67,26 +61,62 @@ public abstract class EntryBase<T> {
|
||||||
*
|
*
|
||||||
* @return the default value
|
* @return the default value
|
||||||
*/
|
*/
|
||||||
protected Object defaultValue() {
|
protected Object getDefaultValue() {
|
||||||
return defaultValue_;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the initial value to set the {@link java.util.Properties property} to, if not already defined.
|
* Returns the key of the {@link java.util.Properties property}.
|
||||||
*
|
*
|
||||||
* @param defaultValue the default value
|
* @return the key
|
||||||
*/
|
*/
|
||||||
public T defaultValue(Object defaultValue) {
|
protected String getKey() {
|
||||||
defaultValue_ = defaultValue;
|
return key;
|
||||||
return (T) this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates that the {@link java.util.Properties property} is to be deleted.
|
* Returns the modify function.
|
||||||
|
*
|
||||||
|
* @return the modify function
|
||||||
*/
|
*/
|
||||||
public T delete() {
|
protected BiFunction<String, String, String> getModify() {
|
||||||
isDelete_ = true;
|
return modify;
|
||||||
return (T) this;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value to be used in the {@link #modify} function.
|
||||||
|
*
|
||||||
|
* @return the modify value
|
||||||
|
*/
|
||||||
|
protected String getModifyValue() {
|
||||||
|
return modifyValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the new value to set the {@link java.util.Properties property)} to.
|
||||||
|
*
|
||||||
|
* @return the new value
|
||||||
|
*/
|
||||||
|
public Object getNewValue() {
|
||||||
|
return newValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the pattern.
|
||||||
|
*
|
||||||
|
* @return the pattern
|
||||||
|
*/
|
||||||
|
protected String getPattern() {
|
||||||
|
return pattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link EntryDate.Units unit}.
|
||||||
|
*
|
||||||
|
* @return the unit
|
||||||
|
*/
|
||||||
|
protected EntryDate.Units getUnit() {
|
||||||
|
return unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -95,16 +125,7 @@ public abstract class EntryBase<T> {
|
||||||
* @return {@code true} or {@code false}
|
* @return {@code true} or {@code false}
|
||||||
*/
|
*/
|
||||||
protected boolean isDelete() {
|
protected boolean isDelete() {
|
||||||
return isDelete_;
|
return isDelete;
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the key of the {@link java.util.Properties property}.
|
|
||||||
*
|
|
||||||
* @return the key
|
|
||||||
*/
|
|
||||||
protected String key() {
|
|
||||||
return key_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -113,18 +134,75 @@ public abstract class EntryBase<T> {
|
||||||
* @param key the {@link java.util.Properties property} key
|
* @param key the {@link java.util.Properties property} key
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public T key(String key) {
|
@SuppressWarnings("unused")
|
||||||
key_ = key;
|
public EntryBase key(String key) {
|
||||||
return (T) this;
|
setKey(key);
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the new value to set the {@link java.util.Properties property)} to.
|
* Sets the calculation function.
|
||||||
*
|
*
|
||||||
* @return the new value
|
* @param calc the calc function
|
||||||
*/
|
*/
|
||||||
protected Object newValue() {
|
protected void setCalc(IntFunction<Integer> calc) {
|
||||||
return newValue_;
|
this.calc = calc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the initial value to set the {@link java.util.Properties property} to, if not already defined.
|
||||||
|
*
|
||||||
|
* @param defaultValue the default value
|
||||||
|
*/
|
||||||
|
protected void setDefaultValue(Object defaultValue) {
|
||||||
|
this.defaultValue = defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether the {@link java.util.Properties property} should be deleted.
|
||||||
|
*
|
||||||
|
* @param delete {@code true} or {@code false}
|
||||||
|
*/
|
||||||
|
protected void setDelete(boolean delete) {
|
||||||
|
isDelete = delete;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the key of the {@link java.util.Properties property}.
|
||||||
|
*
|
||||||
|
* @param key the {@link java.util.Properties property} key
|
||||||
|
*/
|
||||||
|
protected void setKey(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the modify function.
|
||||||
|
*
|
||||||
|
* @param modify the modify function
|
||||||
|
*/
|
||||||
|
protected void setModify(BiFunction<String, String, String> modify) {
|
||||||
|
this.modify = modify;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the modify function.
|
||||||
|
*
|
||||||
|
* @param value the value to perform a modification with
|
||||||
|
* @param modify the modify function
|
||||||
|
*/
|
||||||
|
protected void setModify(String value, BiFunction<String, String, String> modify) {
|
||||||
|
this.modifyValue = value;
|
||||||
|
this.modify = modify;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the modify value.
|
||||||
|
*
|
||||||
|
* @param value the modify value.
|
||||||
|
*/
|
||||||
|
protected void setModifyValue(String value) {
|
||||||
|
this.modifyValue = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -132,26 +210,26 @@ public abstract class EntryBase<T> {
|
||||||
*
|
*
|
||||||
* @param newValue the new value
|
* @param newValue the new value
|
||||||
*/
|
*/
|
||||||
protected void newValue(Object newValue) {
|
public void setNewValue(Object newValue) {
|
||||||
newValue_ = newValue;
|
this.newValue = newValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the pattern.
|
* Sets the {@link java.text.DecimalFormat DecimalFormat} or {@link java.time.format.DateTimeFormatter DateTimeFormatter}
|
||||||
*
|
* pattern to be used with {@link EntryDate} or {@link EntryInt} respectively.
|
||||||
* @return the pattern
|
|
||||||
*/
|
|
||||||
protected Object pattern() {
|
|
||||||
return pattern_;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the {@link java.util.Formatter} pattern.
|
|
||||||
*
|
*
|
||||||
* @param pattern the pattern
|
* @param pattern the pattern
|
||||||
*/
|
*/
|
||||||
public T pattern(Object pattern) {
|
protected void setPattern(String pattern) {
|
||||||
pattern_ = pattern;
|
this.pattern = pattern;
|
||||||
return (T) this;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link EntryDate.Units unit} value to apply to calculations.
|
||||||
|
*
|
||||||
|
* @param unit the {@link EntryDate.Units unit}
|
||||||
|
*/
|
||||||
|
protected void setUnit(EntryDate.Units unit) {
|
||||||
|
this.unit = unit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -19,6 +19,7 @@ package rife.bld.extension.propertyfile;
|
||||||
import java.time.*;
|
import java.time.*;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.function.IntFunction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Declares the modifications to be made to a {@link java.util.Properties Date-based property}.
|
* Declares the modifications to be made to a {@link java.util.Properties Date-based property}.
|
||||||
|
@ -26,11 +27,9 @@ import java.util.Date;
|
||||||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
public class EntryDate extends EntryBase<EntryDate> {
|
public class EntryDate extends EntryBase {
|
||||||
private EntryDate.Units unit_ = EntryDate.Units.DAY;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new {@link EntryDate entry}.
|
* Creates a new date {@link Entry entry}.
|
||||||
*
|
*
|
||||||
* @param key the required property key
|
* @param key the required property key
|
||||||
*/
|
*/
|
||||||
|
@ -38,23 +37,46 @@ public class EntryDate extends EntryBase<EntryDate> {
|
||||||
super(key);
|
super(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new {@link EntryDate entry}.
|
||||||
|
*
|
||||||
|
* @param calc the calculation function
|
||||||
|
* @return this instance
|
||||||
|
*/
|
||||||
|
public EntryDate calc(IntFunction<Integer> calc) {
|
||||||
|
setCalc(calc);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link EntryDate entry} up for deletion.
|
||||||
|
*
|
||||||
|
* @return this instance
|
||||||
|
*/
|
||||||
|
public EntryDate delete() {
|
||||||
|
setDelete(true);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the new {@link java.util.Properties property} value to now.
|
* Sets the new {@link java.util.Properties property} value to now.
|
||||||
*
|
*
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryDate now() {
|
public EntryDate now() {
|
||||||
newValue("now");
|
setNewValue("now");
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the {@link java.time.format.DateTimeFormatter DateTimeFormatter} pattern.
|
* Sets the pattern for {@link EntryInt} and {@link EntryDate} to{@link java.text.DecimalFormat DecimalFormat} and
|
||||||
|
* {@link java.time.format.DateTimeFormatter DateTimeFormatter} respectively.
|
||||||
*
|
*
|
||||||
* @param pattern the pattern
|
* @param pattern the pattern
|
||||||
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryDate pattern(String pattern) {
|
public EntryDate pattern(String pattern) {
|
||||||
super.pattern(pattern);
|
setPattern(pattern);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +87,7 @@ public class EntryDate extends EntryBase<EntryDate> {
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryDate set(Instant instant) {
|
public EntryDate set(Instant instant) {
|
||||||
newValue(instant);
|
setNewValue(instant);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +98,7 @@ public class EntryDate extends EntryBase<EntryDate> {
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryDate set(LocalDate date) {
|
public EntryDate set(LocalDate date) {
|
||||||
newValue(date);
|
setNewValue(date);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +109,7 @@ public class EntryDate extends EntryBase<EntryDate> {
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryDate set(LocalDateTime date) {
|
public EntryDate set(LocalDateTime date) {
|
||||||
newValue(date);
|
setNewValue(date);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +120,7 @@ public class EntryDate extends EntryBase<EntryDate> {
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryDate set(ZonedDateTime date) {
|
public EntryDate set(ZonedDateTime date) {
|
||||||
newValue(date);
|
setNewValue(date);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +131,7 @@ public class EntryDate extends EntryBase<EntryDate> {
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryDate set(LocalTime time) {
|
public EntryDate set(LocalTime time) {
|
||||||
newValue(time);
|
setNewValue(time);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,7 +142,7 @@ public class EntryDate extends EntryBase<EntryDate> {
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryDate set(Calendar cal) {
|
public EntryDate set(Calendar cal) {
|
||||||
newValue(cal);
|
setNewValue(cal);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,19 +153,10 @@ public class EntryDate extends EntryBase<EntryDate> {
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryDate set(Date date) {
|
public EntryDate set(Date date) {
|
||||||
newValue(date);
|
setNewValue(date);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the {@link EntryDate.Units unit}.
|
|
||||||
*
|
|
||||||
* @return the unit
|
|
||||||
*/
|
|
||||||
public EntryDate.Units unit() {
|
|
||||||
return unit_;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the {@link Units unit} value to apply to calculations for {@link EntryDate}.
|
* Sets the {@link Units unit} value to apply to calculations for {@link EntryDate}.
|
||||||
*
|
*
|
||||||
|
@ -151,7 +164,7 @@ public class EntryDate extends EntryBase<EntryDate> {
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryDate unit(Units unit) {
|
public EntryDate unit(Units unit) {
|
||||||
unit_ = unit;
|
setUnit(unit);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -16,15 +16,17 @@
|
||||||
|
|
||||||
package rife.bld.extension.propertyfile;
|
package rife.bld.extension.propertyfile;
|
||||||
|
|
||||||
|
import java.util.function.IntFunction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Declares the modifications to be made to an {@link java.util.Properties Integer-based property}.
|
* Declares the modifications to be made to an {@link java.util.Properties Integer-based property}.
|
||||||
*
|
*
|
||||||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
public class EntryInt extends EntryBase<EntryInt> {
|
public class EntryInt extends EntryBase {
|
||||||
/**
|
/**
|
||||||
* Creates a new {@link EntryInt entry}.
|
* Creates a new date {@link Entry entry}.
|
||||||
*
|
*
|
||||||
* @param key the required property key
|
* @param key the required property key
|
||||||
*/
|
*/
|
||||||
|
@ -33,12 +35,35 @@ public class EntryInt extends EntryBase<EntryInt> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the {@link java.text.DecimalFormat DecimalFormat} pattern.
|
* Creates a new {@link EntryInt entry}.
|
||||||
*
|
*
|
||||||
* @param pattern the pattern
|
* @param calc the calculation function.
|
||||||
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryInt pattern(String pattern) {
|
public EntryInt calc(IntFunction<Integer> calc) {
|
||||||
super.pattern(pattern);
|
setCalc(calc);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the initial value to set the {@link java.util.Properties property} to, if not already defined.
|
||||||
|
*
|
||||||
|
* @param defaultValue the default value
|
||||||
|
* @return this instance
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public EntryInt defaultValue(Object defaultValue) {
|
||||||
|
setDefaultValue(defaultValue);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the {@link EntryInt entry} up for deletion.
|
||||||
|
*
|
||||||
|
* @return this instance
|
||||||
|
*/
|
||||||
|
public EntryInt delete() {
|
||||||
|
setDelete(true);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +74,7 @@ public class EntryInt extends EntryBase<EntryInt> {
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public EntryInt set(int i) {
|
public EntryInt set(int i) {
|
||||||
newValue(i);
|
setNewValue(i);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -18,15 +18,11 @@ package rife.bld.extension.propertyfile;
|
||||||
|
|
||||||
import rife.bld.BaseProject;
|
import rife.bld.BaseProject;
|
||||||
import rife.bld.operations.AbstractOperation;
|
import rife.bld.operations.AbstractOperation;
|
||||||
import rife.bld.operations.exceptions.ExitStatusException;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates or applies edits to a {@link Properties Properties} file.
|
* Creates or applies edits to a {@link Properties Properties} file.
|
||||||
|
@ -35,12 +31,11 @@ import java.util.logging.Logger;
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
public class PropertyFileOperation extends AbstractOperation<PropertyFileOperation> {
|
public class PropertyFileOperation extends AbstractOperation<PropertyFileOperation> {
|
||||||
private static final Logger LOGGER = Logger.getLogger(PropertyFileOperation.class.getName());
|
private final List<EntryBase> entries = new ArrayList<>();
|
||||||
private final List<EntryBase<?>> entries_ = new ArrayList<>();
|
private String comment = "";
|
||||||
private String comment_ = "";
|
private boolean failOnWarning;
|
||||||
private boolean failOnWarning_;
|
private File file;
|
||||||
private File file_;
|
private BaseProject project;
|
||||||
private BaseProject project_;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the comment to be inserted at the top of the {@link java.util.Properties} file.
|
* Sets the comment to be inserted at the top of the {@link java.util.Properties} file.
|
||||||
|
@ -48,8 +43,9 @@ public class PropertyFileOperation extends AbstractOperation<PropertyFileOperati
|
||||||
* @param comment the header comment
|
* @param comment the header comment
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
public PropertyFileOperation comment(String comment) {
|
public PropertyFileOperation comment(String comment) {
|
||||||
comment_ = comment;
|
this.comment = comment;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,8 +56,9 @@ public class PropertyFileOperation extends AbstractOperation<PropertyFileOperati
|
||||||
* @param entry the {@link Entry entry}
|
* @param entry the {@link Entry entry}
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public PropertyFileOperation entry(EntryBase<?> entry) {
|
@SuppressWarnings("unused")
|
||||||
entries_.add(entry);
|
public PropertyFileOperation entry(EntryBase entry) {
|
||||||
|
entries.add(entry);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,49 +67,38 @@ public class PropertyFileOperation extends AbstractOperation<PropertyFileOperati
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void execute() throws Exception {
|
public void execute() throws Exception {
|
||||||
if (project_ == null) {
|
var commandName = project.getCurrentCommandName();
|
||||||
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) {
|
|
||||||
LOGGER.log(Level.SEVERE, "A project is required");
|
|
||||||
}
|
|
||||||
throw new ExitStatusException(ExitStatusException.EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
var commandName = project_.getCurrentCommandName();
|
|
||||||
var properties = new Properties();
|
var properties = new Properties();
|
||||||
var success = true;
|
var success = false;
|
||||||
|
|
||||||
if (file_ == null) {
|
if (file == null) {
|
||||||
warn(commandName, "A properties file must be specified.");
|
PropertyFileUtils.warn(commandName, "A properties file must be specified.");
|
||||||
} else {
|
} else {
|
||||||
success = PropertyFileUtils.loadProperties(commandName, file_, properties, silent());
|
success = PropertyFileUtils.loadProperties(commandName, file, properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
for (var entry : entries_) {
|
for (var entry : entries) {
|
||||||
if (entry.key().isBlank()) {
|
if (entry.getKey().isBlank()) {
|
||||||
warn(commandName, "An entry key must specified.");
|
PropertyFileUtils.warn(commandName, "An entry key must specified.");
|
||||||
} else {
|
} else {
|
||||||
var key = entry.key();
|
var key = entry.getKey();
|
||||||
Object value = entry.newValue();
|
Object value = entry.getNewValue();
|
||||||
Object defaultValue = entry.defaultValue();
|
Object defaultValue = entry.getDefaultValue();
|
||||||
var p = properties.getProperty(key);
|
var p = properties.getProperty(key);
|
||||||
if (entry.isDelete()) {
|
if (entry.isDelete()) {
|
||||||
properties.remove(key);
|
properties.remove(key);
|
||||||
} else if ((value == null || String.valueOf(value).isBlank())
|
} else if ((value == null || String.valueOf(value).isBlank())
|
||||||
&& (defaultValue == null || String.valueOf(defaultValue).isBlank())
|
&& (defaultValue == null || String.valueOf(defaultValue).isBlank())
|
||||||
&& (p == null || p.isBlank())) {
|
&& (p == null || p.isBlank())) {
|
||||||
warn(commandName, "An entry must be set or have a default value: " + key);
|
PropertyFileUtils.warn(commandName, "An entry must be set or have a default value: " + key);
|
||||||
} else {
|
} else {
|
||||||
try {
|
|
||||||
if (entry instanceof EntryDate) {
|
if (entry instanceof EntryDate) {
|
||||||
PropertyFileUtils.processDate(properties, (EntryDate) entry);
|
success = PropertyFileUtils.processDate(commandName, properties, (EntryDate) entry, failOnWarning);
|
||||||
} else if (entry instanceof EntryInt) {
|
} else if (entry instanceof EntryInt) {
|
||||||
PropertyFileUtils.processInt(properties, (EntryInt) entry);
|
success = PropertyFileUtils.processInt(commandName, properties, (EntryInt) entry, failOnWarning);
|
||||||
} else {
|
} else {
|
||||||
PropertyFileUtils.processString(properties, (Entry) entry);
|
success = PropertyFileUtils.processString(properties, (Entry) entry);
|
||||||
}
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
warn(commandName, e.getMessage());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,7 +106,7 @@ public class PropertyFileOperation extends AbstractOperation<PropertyFileOperati
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
PropertyFileUtils.saveProperties(file_, comment_, properties);
|
PropertyFileUtils.saveProperties(file, comment, properties);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,8 +116,9 @@ public class PropertyFileOperation extends AbstractOperation<PropertyFileOperati
|
||||||
* @param failOnWarning if set to {@code true}, the execution will fail on any warnings.
|
* @param failOnWarning if set to {@code true}, the execution will fail on any warnings.
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
public PropertyFileOperation failOnWarning(boolean failOnWarning) {
|
public PropertyFileOperation failOnWarning(boolean failOnWarning) {
|
||||||
failOnWarning_ = failOnWarning;
|
this.failOnWarning = failOnWarning;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,8 +128,9 @@ public class PropertyFileOperation extends AbstractOperation<PropertyFileOperati
|
||||||
* @param file the file to be edited
|
* @param file the file to be edited
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
public PropertyFileOperation file(File file) {
|
public PropertyFileOperation file(File file) {
|
||||||
file_ = file;
|
this.file = file;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,27 +140,10 @@ public class PropertyFileOperation extends AbstractOperation<PropertyFileOperati
|
||||||
* @param file the file to be edited
|
* @param file the file to be edited
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
public PropertyFileOperation file(String file) {
|
public PropertyFileOperation file(String file) {
|
||||||
return file(new File(file));
|
this.file = new File(file);
|
||||||
}
|
return this;
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves the location of the {@link java.util.Properties} file to be edited.
|
|
||||||
*
|
|
||||||
* @return the properties file
|
|
||||||
*/
|
|
||||||
public File file() {
|
|
||||||
return file_;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the location of the {@link java.util.Properties} file to be edited.
|
|
||||||
*
|
|
||||||
* @param file the file to be edited
|
|
||||||
* @return this instance
|
|
||||||
*/
|
|
||||||
public PropertyFileOperation file(Path file) {
|
|
||||||
return file(file.toFile());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -182,27 +153,7 @@ public class PropertyFileOperation extends AbstractOperation<PropertyFileOperati
|
||||||
* @return this instance
|
* @return this instance
|
||||||
*/
|
*/
|
||||||
public PropertyFileOperation fromProject(BaseProject project) {
|
public PropertyFileOperation fromProject(BaseProject project) {
|
||||||
project_ = project;
|
this.project = project;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Logs a warning.
|
|
||||||
*
|
|
||||||
* @param command The command name
|
|
||||||
* @param message the message log
|
|
||||||
* @throws ExitStatusException if a {@link Level#SEVERE} exception occurs
|
|
||||||
*/
|
|
||||||
private void warn(String command, String message) throws ExitStatusException {
|
|
||||||
if (failOnWarning_) {
|
|
||||||
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) {
|
|
||||||
LOGGER.log(Level.SEVERE, '[' + command + "] " + message);
|
|
||||||
throw new ExitStatusException(ExitStatusException.EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (LOGGER.isLoggable(Level.WARNING) && !silent()) {
|
|
||||||
LOGGER.warning('[' + command + "] " + message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -16,8 +16,7 @@
|
||||||
|
|
||||||
package rife.bld.extension.propertyfile;
|
package rife.bld.extension.propertyfile;
|
||||||
|
|
||||||
import rife.bld.operations.exceptions.ExitStatusException;
|
import javax.imageio.IIOException;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
@ -39,7 +38,7 @@ import java.util.logging.Logger;
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
public final class PropertyFileUtils {
|
public final class PropertyFileUtils {
|
||||||
private static final Logger LOGGER = Logger.getLogger(PropertyFileUtils.class.getName());
|
private final static Logger LOGGER = Logger.getLogger(PropertyFileUtils.class.getName());
|
||||||
|
|
||||||
private PropertyFileUtils() {
|
private PropertyFileUtils() {
|
||||||
// no-op
|
// no-op
|
||||||
|
@ -70,153 +69,167 @@ public final class PropertyFileUtils {
|
||||||
* @param file the file location
|
* @param file the file location
|
||||||
* @param p the {@link Properties properties} to load into.
|
* @param p the {@link Properties properties} to load into.
|
||||||
* @return the boolean
|
* @return the boolean
|
||||||
* @throws ExitStatusException if an error occurred
|
* @throws Exception the exception
|
||||||
*/
|
*/
|
||||||
public static boolean loadProperties(String command, File file, Properties p, boolean silent)
|
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
|
||||||
throws ExitStatusException {
|
public static boolean loadProperties(String command, File file, Properties p) throws Exception {
|
||||||
boolean success = true;
|
boolean success = true;
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
try (var propStream = Files.newInputStream(file.toPath(), StandardOpenOption.READ)) {
|
try (var propStream = Files.newInputStream(file.toPath(), StandardOpenOption.READ)) {
|
||||||
p.load(propStream);
|
p.load(propStream);
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
warn(command, "Could not load properties file: " + ioe.getMessage(), true, silent);
|
warn(command, "Could not load properties file: " + ioe.getMessage(), ioe, true);
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
warn(command, "Please specify the properties file location.", true, silent);
|
warn(command, "Please specify the properties file location.");
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String objectToString(Object o) {
|
|
||||||
if (o == null) {
|
|
||||||
return "";
|
|
||||||
} else {
|
|
||||||
return String.valueOf(o);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes a date {@link Properties property}.
|
* Processes a date {@link Properties property}.
|
||||||
*
|
*
|
||||||
|
* @param command the issuing command
|
||||||
* @param p the {@link Properties property}
|
* @param p the {@link Properties property}
|
||||||
* @param entry the {@link Entry} containing the {@link Properties property} edits
|
* @param entry the {@link Entry} containing the {@link Properties property} edits
|
||||||
* @throws DateTimeException if a parsing error occurs
|
* @param failOnWarning the fail on warning
|
||||||
|
* @return the boolean
|
||||||
|
* @throws Exception the exception
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("PMD.ExceptionAsFlowControl")
|
@SuppressWarnings({"PMD.SignatureDeclareThrowsException", "PMD.ExceptionAsFlowControl"})
|
||||||
public static void processDate(Properties p, EntryDate entry) throws IllegalArgumentException {
|
public static boolean processDate(String command, Properties p, EntryDate entry, boolean failOnWarning)
|
||||||
var currentValue = currentValue(null, entry.defaultValue(), entry.newValue());
|
throws Exception {
|
||||||
var pattern = objectToString(entry.pattern());
|
var success = true;
|
||||||
|
var value = currentValue(null, entry.getDefaultValue(),
|
||||||
|
entry.getNewValue());
|
||||||
|
|
||||||
var dateValue = String.valueOf(currentValue);
|
var pattern = entry.getPattern();
|
||||||
|
|
||||||
|
String parsedValue = String.valueOf(value);
|
||||||
if (pattern != null && !pattern.isBlank()) {
|
if (pattern != null && !pattern.isBlank()) {
|
||||||
var offset = 0;
|
var offset = 0;
|
||||||
|
|
||||||
if (entry.calc() != null) {
|
if (entry.getCalc() != null) {
|
||||||
offset = entry.calc().apply(offset);
|
offset = entry.getCalc().apply(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
var dtf = DateTimeFormatter.ofPattern(pattern);
|
var dtf = DateTimeFormatter.ofPattern(pattern);
|
||||||
var unit = entry.unit();
|
var unit = entry.getUnit();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (currentValue instanceof String) {
|
if (value instanceof String) {
|
||||||
if ("now".equalsIgnoreCase((String) currentValue)) {
|
if ("now".equalsIgnoreCase((String) value)) {
|
||||||
currentValue = ZonedDateTime.now();
|
value = ZonedDateTime.now();
|
||||||
} else {
|
} else {
|
||||||
throw new DateTimeException("Excepted: Calendar, Date or java.time.");
|
throw new DateTimeException("Excepted: Calendar, Date or java.time.");
|
||||||
}
|
}
|
||||||
} else if (currentValue instanceof LocalDateTime) {
|
} else if (value instanceof LocalDateTime) {
|
||||||
currentValue = ((LocalDateTime) currentValue).atZone(ZoneId.systemDefault());
|
value = ((LocalDateTime) value).atZone(ZoneId.systemDefault());
|
||||||
} else if (currentValue instanceof Date) {
|
} else if (value instanceof Date) {
|
||||||
currentValue = ((Date) currentValue).toInstant().atZone(ZoneId.systemDefault());
|
value = ((Date) value).toInstant().atZone(ZoneId.systemDefault());
|
||||||
} else if (currentValue instanceof Calendar) {
|
} else if (value instanceof Calendar) {
|
||||||
currentValue = ((Calendar) currentValue).toInstant().atZone(ZoneId.systemDefault());
|
value = ((Calendar) value).toInstant().atZone(ZoneId.systemDefault());
|
||||||
} else if (currentValue instanceof Instant) {
|
} else if (value instanceof Instant) {
|
||||||
currentValue = ((Instant) currentValue).atZone(ZoneId.systemDefault());
|
value = ((Instant) value).atZone(ZoneId.systemDefault());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentValue instanceof LocalDate) {
|
if (value instanceof LocalDate) {
|
||||||
if (offset != 0) {
|
if (offset != 0) {
|
||||||
if (unit == EntryDate.Units.DAY) {
|
if (unit == EntryDate.Units.DAY) {
|
||||||
currentValue = ((LocalDate) currentValue).plusDays(offset);
|
value = ((LocalDate) value).plusDays(offset);
|
||||||
} else if (unit == EntryDate.Units.MONTH) {
|
} else if (unit == EntryDate.Units.MONTH) {
|
||||||
currentValue = ((LocalDate) currentValue).plusMonths(offset);
|
value = ((LocalDate) value).plusMonths(offset);
|
||||||
} else if (unit == EntryDate.Units.WEEK) {
|
} else if (unit == EntryDate.Units.WEEK) {
|
||||||
currentValue = ((LocalDate) currentValue).plusWeeks(offset);
|
value = ((LocalDate) value).plusWeeks(offset);
|
||||||
} else if (unit == EntryDate.Units.YEAR) {
|
} else if (unit == EntryDate.Units.YEAR) {
|
||||||
currentValue = ((LocalDate) currentValue).plusYears(offset);
|
value = ((LocalDate) value).plusYears(offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dateValue = dtf.format((LocalDate) currentValue);
|
parsedValue = dtf.format((LocalDate) value);
|
||||||
} else if (currentValue instanceof LocalTime) {
|
} else if (value instanceof LocalTime) {
|
||||||
if (offset != 0) {
|
if (offset != 0) {
|
||||||
if (unit == EntryDate.Units.SECOND) {
|
if (unit == EntryDate.Units.SECOND) {
|
||||||
currentValue = ((LocalTime) currentValue).plusSeconds(offset);
|
value = ((LocalTime) value).plusSeconds(offset);
|
||||||
} else if (unit == EntryDate.Units.MINUTE) {
|
} else if (unit == EntryDate.Units.MINUTE) {
|
||||||
currentValue = ((LocalTime) currentValue).plusMinutes(offset);
|
value = ((LocalTime) value).plusMinutes(offset);
|
||||||
} else if (unit == EntryDate.Units.HOUR) {
|
} else if (unit == EntryDate.Units.HOUR) {
|
||||||
currentValue = ((LocalTime) currentValue).plusHours(offset);
|
value = ((LocalTime) value).plusHours(offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dateValue = dtf.format((LocalTime) currentValue);
|
parsedValue = dtf.format((LocalTime) value);
|
||||||
} else if (currentValue instanceof ZonedDateTime) {
|
} else if (value instanceof ZonedDateTime) {
|
||||||
if (offset != 0) {
|
if (offset != 0) {
|
||||||
if (unit == EntryDate.Units.DAY) {
|
if (unit == EntryDate.Units.DAY) {
|
||||||
currentValue = ((ZonedDateTime) currentValue).plusDays(offset);
|
value = ((ZonedDateTime) value).plusDays(offset);
|
||||||
} else if (unit == EntryDate.Units.MONTH) {
|
} else if (unit == EntryDate.Units.MONTH) {
|
||||||
currentValue = ((ZonedDateTime) currentValue).plusMonths(offset);
|
value = ((ZonedDateTime) value).plusMonths(offset);
|
||||||
} else if (unit == EntryDate.Units.WEEK) {
|
} else if (unit == EntryDate.Units.WEEK) {
|
||||||
currentValue = ((ZonedDateTime) currentValue).plusWeeks(offset);
|
value = ((ZonedDateTime) value).plusWeeks(offset);
|
||||||
} else if (unit == EntryDate.Units.YEAR) {
|
} else if (unit == EntryDate.Units.YEAR) {
|
||||||
currentValue = ((ZonedDateTime) currentValue).plusYears(offset);
|
value = ((ZonedDateTime) value).plusYears(offset);
|
||||||
} else if (unit == EntryDate.Units.SECOND) {
|
} else if (unit == EntryDate.Units.SECOND) {
|
||||||
currentValue = ((ZonedDateTime) currentValue).plusSeconds(offset);
|
value = ((ZonedDateTime) value).plusSeconds(offset);
|
||||||
} else if (unit == EntryDate.Units.MINUTE) {
|
} else if (unit == EntryDate.Units.MINUTE) {
|
||||||
currentValue = ((ZonedDateTime) currentValue).plusMinutes(offset);
|
value = ((ZonedDateTime) value).plusMinutes(offset);
|
||||||
} else if (unit == EntryDate.Units.HOUR) {
|
} else if (unit == EntryDate.Units.HOUR) {
|
||||||
currentValue = ((ZonedDateTime) currentValue).plusHours(offset);
|
value = ((ZonedDateTime) value).plusHours(offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dateValue = dtf.format((ZonedDateTime) currentValue);
|
parsedValue = dtf.format((ZonedDateTime) value);
|
||||||
}
|
}
|
||||||
} catch (DateTimeException dte) {
|
} catch (DateTimeException dte) {
|
||||||
throw new IllegalArgumentException(
|
warn(command, "Non-date value for \"" + entry.getKey() + "\" --> " + dte.getMessage(),
|
||||||
"Non-date value for \"" + entry.key() + "\" --> " + dte.getMessage(), dte);
|
dte, failOnWarning);
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p.setProperty(entry.key(), dateValue);
|
|
||||||
|
if (success) {
|
||||||
|
p.setProperty(entry.getKey(), parsedValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes an integer {@link Properties property}.
|
* Processes an integer {@link Properties property}.
|
||||||
*
|
*
|
||||||
|
* @param command the issuing command
|
||||||
* @param p the {@link Properties property}
|
* @param p the {@link Properties property}
|
||||||
* @param entry the {@link Entry} containing the {@link Properties property} edits
|
* @param entry the {@link Entry} containing the {@link Properties property} edits
|
||||||
* @throws NumberFormatException if a parsing error occurs
|
* @param failOnWarning the fail on warning
|
||||||
|
* @return the boolean
|
||||||
|
* @throws Exception the exception
|
||||||
*/
|
*/
|
||||||
public static void processInt(Properties p, EntryInt entry) throws IllegalArgumentException {
|
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
|
||||||
|
public static boolean processInt(String command, Properties p, EntryInt entry, boolean failOnWarning)
|
||||||
|
throws Exception {
|
||||||
|
var success = true;
|
||||||
int intValue = 0;
|
int intValue = 0;
|
||||||
try {
|
try {
|
||||||
var fmt = new DecimalFormat(objectToString(entry.pattern()));
|
var fmt = new DecimalFormat(entry.getPattern());
|
||||||
var currentValue = currentValue(p.getProperty(entry.key()), entry.defaultValue(), entry.newValue());
|
var value = currentValue(p.getProperty(entry.getKey()), entry.getDefaultValue(),
|
||||||
|
entry.getNewValue());
|
||||||
|
|
||||||
if (currentValue != null) {
|
if (value != null) {
|
||||||
intValue = fmt.parse(String.valueOf(currentValue)).intValue();
|
intValue = fmt.parse(String.valueOf(value)).intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.calc() != null) {
|
if (entry.getCalc() != null) {
|
||||||
intValue = entry.calc().apply(intValue);
|
intValue = entry.getCalc().apply(intValue);
|
||||||
}
|
}
|
||||||
|
p.setProperty(entry.getKey(), fmt.format(intValue));
|
||||||
p.setProperty(entry.key(), fmt.format(intValue));
|
|
||||||
} catch (NumberFormatException | ParseException e) {
|
} catch (NumberFormatException | ParseException e) {
|
||||||
throw new IllegalArgumentException(
|
warn(command, "Non-integer value for \"" + entry.getKey() + "\" --> " + e.getMessage(), e,
|
||||||
"Non-integer value for \"" + entry.key() + "\" --> " + e.getMessage(), e);
|
failOnWarning);
|
||||||
|
success = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -224,16 +237,18 @@ public final class PropertyFileUtils {
|
||||||
*
|
*
|
||||||
* @param p the {@link Properties property}
|
* @param p the {@link Properties property}
|
||||||
* @param entry the {@link Entry} containing the {@link Properties property} edits
|
* @param entry the {@link Entry} containing the {@link Properties property} edits
|
||||||
|
* @return the boolean
|
||||||
*/
|
*/
|
||||||
public static void processString(Properties p, Entry entry) {
|
public static boolean processString(Properties p, Entry entry) {
|
||||||
var currentValue = currentValue(p.getProperty(entry.key()), entry.defaultValue(), entry.newValue());
|
var value = currentValue(p.getProperty(entry.getKey()), entry.getDefaultValue(), entry.getNewValue());
|
||||||
|
|
||||||
p.setProperty(entry.key(), String.format(String.valueOf(currentValue), entry.pattern()));
|
p.setProperty(entry.getKey(), String.valueOf(value));
|
||||||
|
|
||||||
if (entry.modify() != null && entry.modifyValue() != null) {
|
if (entry.getModify() != null && entry.getModifyValue() != null) {
|
||||||
var modify = entry.modify().apply(p.getProperty(entry.key()), entry.modifyValue());
|
p.setProperty(entry.getKey(), entry.getModify().apply(p.getProperty(entry.getKey()), entry.getModifyValue()));
|
||||||
p.setProperty(entry.key(), String.format(modify, entry.pattern()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -247,8 +262,20 @@ public final class PropertyFileUtils {
|
||||||
public static void saveProperties(File file, String comment, Properties p) throws IOException {
|
public static void saveProperties(File file, String comment, Properties p) throws IOException {
|
||||||
try (var output = Files.newOutputStream(file.toPath())) {
|
try (var output = Files.newOutputStream(file.toPath())) {
|
||||||
p.store(output, comment);
|
p.store(output, comment);
|
||||||
} catch (IOException ioe) {
|
} catch (IIOException ioe) {
|
||||||
throw new IOException("An IO error occurred while saving the Properties file: " + file, ioe);
|
throw new IIOException("An IO error occurred while saving the Properties file: " + file, ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs a warning.
|
||||||
|
*
|
||||||
|
* @param command the issuing command
|
||||||
|
* @param message the message to log
|
||||||
|
*/
|
||||||
|
static void warn(String command, String message) {
|
||||||
|
if (LOGGER.isLoggable(Level.WARNING)) {
|
||||||
|
LOGGER.warning('[' + command + "] " + message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,20 +284,17 @@ public final class PropertyFileUtils {
|
||||||
*
|
*
|
||||||
* @param command The command name
|
* @param command The command name
|
||||||
* @param message the message log
|
* @param message the message log
|
||||||
|
* @param e the related exception
|
||||||
* @param failOnWarning logs and throws exception if set to {@code true}
|
* @param failOnWarning logs and throws exception if set to {@code true}
|
||||||
* @throws ExitStatusException if a {@link Level#SEVERE} exception occurs
|
* @throws Exception the exception
|
||||||
*/
|
*/
|
||||||
static void warn(String command, String message, boolean failOnWarning, boolean silent)
|
@SuppressWarnings({"PMD.SignatureDeclareThrowsException"})
|
||||||
throws ExitStatusException {
|
static void warn(String command, String message, Exception e, boolean failOnWarning) throws Exception {
|
||||||
if (failOnWarning) {
|
if (failOnWarning) {
|
||||||
if (LOGGER.isLoggable(Level.SEVERE) && !silent) {
|
LOGGER.log(Level.SEVERE, '[' + command + "] " + message, e);
|
||||||
LOGGER.log(Level.SEVERE, '[' + command + "] " + message);
|
throw e;
|
||||||
}
|
|
||||||
throw new ExitStatusException(ExitStatusException.EXIT_FAILURE);
|
|
||||||
} else {
|
} else {
|
||||||
if (LOGGER.isLoggable(Level.WARNING) && !silent) {
|
warn(command, message);
|
||||||
LOGGER.warning('[' + command + "] " + message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2023-2025 the original author or authors.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package rife.bld.extension.propertyfile;
|
|
||||||
|
|
||||||
import org.assertj.core.api.AutoCloseableSoftAssertions;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import rife.bld.Project;
|
|
||||||
import rife.bld.operations.exceptions.ExitStatusException;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.assertj.core.api.Assertions.assertThatCode;
|
|
||||||
import static rife.bld.extension.propertyfile.Calc.ADD;
|
|
||||||
|
|
||||||
class PropertyFileOperationTest {
|
|
||||||
@Test
|
|
||||||
@SuppressWarnings("PMD.AvoidDuplicateLiterals")
|
|
||||||
void testExecute() throws Exception {
|
|
||||||
var tmpFile = File.createTempFile("property-file-", "properties");
|
|
||||||
tmpFile.deleteOnExit();
|
|
||||||
|
|
||||||
new PropertyFileOperation()
|
|
||||||
.fromProject(new Project())
|
|
||||||
.file(tmpFile)
|
|
||||||
.comment("This is a comment")
|
|
||||||
.failOnWarning(true)
|
|
||||||
.entry(new EntryInt("version.major").defaultValue(0).calc(ADD))
|
|
||||||
.entry(new EntryInt("version.minor").set(0))
|
|
||||||
.entry(new EntryInt("version.patch").set(0))
|
|
||||||
.entry(new EntryDate("build.date").now().pattern("yyyy-MM-dd"))
|
|
||||||
.execute();
|
|
||||||
|
|
||||||
var p = new Properties();
|
|
||||||
p.load(Files.newInputStream(tmpFile.toPath()));
|
|
||||||
|
|
||||||
try (var softly = new AutoCloseableSoftAssertions()) {
|
|
||||||
softly.assertThat(p.getProperty("version.major")).as("major").isEqualTo("1");
|
|
||||||
softly.assertThat(p.getProperty("version.minor")).as("minor").isEqualTo("0");
|
|
||||||
softly.assertThat(p.getProperty("version.patch")).as("patch").isEqualTo("0");
|
|
||||||
softly.assertThat(p.getProperty("build.date")).as("date")
|
|
||||||
.isEqualTo(LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE));
|
|
||||||
}
|
|
||||||
|
|
||||||
new PropertyFileOperation()
|
|
||||||
.fromProject(new Project())
|
|
||||||
.file(tmpFile.getAbsolutePath())
|
|
||||||
.entry(new EntryInt("version.major").calc(c -> c + 2))
|
|
||||||
.execute();
|
|
||||||
|
|
||||||
p.load(Files.newInputStream(tmpFile.toPath()));
|
|
||||||
assertThat(p.getProperty("version.major")).as("major+2").isEqualTo("3");
|
|
||||||
|
|
||||||
new PropertyFileOperation()
|
|
||||||
.fromProject(new Project())
|
|
||||||
.file(tmpFile)
|
|
||||||
.entry(new EntryInt("build.date").delete())
|
|
||||||
.execute();
|
|
||||||
|
|
||||||
p.clear();
|
|
||||||
p.load(Files.newInputStream(tmpFile.toPath()));
|
|
||||||
|
|
||||||
assertThat(p.getProperty("build.date")).as("dalete build.date").isNull();
|
|
||||||
assertThat(p).as("version keys").containsKeys("version.major", "version.minor", "version.patch");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testExecuteNoProject() {
|
|
||||||
var op = new PropertyFileOperation();
|
|
||||||
assertThatCode(op::execute).isInstanceOf(ExitStatusException.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testFile() {
|
|
||||||
var foo = new File("foo");
|
|
||||||
|
|
||||||
var op = new PropertyFileOperation().file("foo");
|
|
||||||
assertThat(op.file()).as("as string").isEqualTo(foo);
|
|
||||||
|
|
||||||
op = new PropertyFileOperation().file(foo);
|
|
||||||
assertThat(op.file()).as("as file").isEqualTo(foo);
|
|
||||||
|
|
||||||
op = new PropertyFileOperation().file(foo.toPath());
|
|
||||||
assertThat(op.file()).as("as path").isEqualTo(foo);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -17,19 +17,19 @@
|
||||||
package rife.bld.extension.propertyfile;
|
package rife.bld.extension.propertyfile;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import rife.bld.operations.exceptions.ExitStatusException;
|
|
||||||
import rife.tools.Localization;
|
import rife.tools.Localization;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.time.*;
|
import java.time.*;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat; // NOPMD
|
||||||
import static org.assertj.core.api.Assertions.assertThatCode;
|
import static org.assertj.core.api.Assertions.assertThatCode; // NOPMD
|
||||||
import static rife.bld.extension.propertyfile.Calc.ADD;
|
import static rife.bld.extension.propertyfile.Calc.ADD; // NOPMD
|
||||||
import static rife.bld.extension.propertyfile.Calc.SUB;
|
import static rife.bld.extension.propertyfile.Calc.SUB; // NOPMD
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PropertyFileUtilsTest class
|
* PropertyFileUtilsTest class
|
||||||
|
@ -37,8 +37,8 @@ import static rife.bld.extension.propertyfile.Calc.SUB;
|
||||||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("PMD.AvoidDuplicateLiterals")
|
|
||||||
class PropertyFileUtilsTest {
|
class PropertyFileUtilsTest {
|
||||||
|
final static int dayOfYear = LocalDate.now().getDayOfYear();
|
||||||
final static Properties p = new Properties();
|
final static Properties p = new Properties();
|
||||||
final static String t = "test";
|
final static String t = "test";
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ class PropertyFileUtilsTest {
|
||||||
|
|
||||||
public EntryDate newEntryDate() {
|
public EntryDate newEntryDate() {
|
||||||
p.clear();
|
p.clear();
|
||||||
return new EntryDate("aDate").pattern("D");
|
return new EntryDate("adate").pattern("D");
|
||||||
}
|
}
|
||||||
|
|
||||||
public EntryInt newEntryInt() {
|
public EntryInt newEntryInt() {
|
||||||
|
@ -58,41 +58,42 @@ class PropertyFileUtilsTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void parseDateSub() {
|
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
|
||||||
var entryDate = newEntryDate().calc(SUB);
|
void parseDateSub() throws Exception {
|
||||||
PropertyFileUtils.processDate(p, entryDate.now());
|
var entryDate = newEntryDate();
|
||||||
assertThat(p.getProperty(entryDate.key())).as("processDate(now-3)").isEqualTo(String.valueOf(
|
entryDate.setCalc(SUB);
|
||||||
LocalDateTime.now().minusDays(1).getDayOfYear()));
|
PropertyFileUtils.processDate(t, p, entryDate.now(), true);
|
||||||
|
assertThat(p.getProperty(entryDate.getKey())).as("processDate(now-3)").isEqualTo(String.valueOf(dayOfYear - 1));
|
||||||
|
|
||||||
entryDate.calc(v -> v - 2);
|
entryDate.setCalc(v -> v - 2);
|
||||||
PropertyFileUtils.processDate(p, entryDate.now());
|
PropertyFileUtils.processDate(t, p, entryDate.now(), true);
|
||||||
assertThat(p.getProperty(entryDate.key())).as("processDate(now-2)").isEqualTo(String.valueOf(
|
assertThat(p.getProperty(entryDate.getKey())).as("processDate(now-2)").isEqualTo(String.valueOf(dayOfYear - 2));
|
||||||
LocalDateTime.now().minusDays(2).getDayOfYear()));
|
|
||||||
|
|
||||||
entryDate.calc(SUB);
|
entryDate.setCalc(SUB);
|
||||||
PropertyFileUtils.processDate(p, entryDate.set(new Date()));
|
PropertyFileUtils.processDate(t, p, entryDate.set(new Date()), true);
|
||||||
assertThat(p.getProperty(entryDate.key())).as("processDate(date-1)").isEqualTo(String.valueOf(
|
assertThat(p.getProperty(entryDate.getKey())).as("processDate(date-1)").isEqualTo(String.valueOf(dayOfYear - 1));
|
||||||
LocalDateTime.now().minusDays(1).getDayOfYear()));
|
|
||||||
|
|
||||||
entryDate.calc(v -> v - 2);
|
entryDate.setCalc(v -> v - 2);
|
||||||
PropertyFileUtils.processDate(p, entryDate.set(Calendar.getInstance()));
|
PropertyFileUtils.processDate(t, p, entryDate.set(Calendar.getInstance()), true);
|
||||||
assertThat(p.getProperty(entryDate.key())).as("processDate(cal-2)").isEqualTo(String.valueOf(
|
assertThat(p.getProperty(entryDate.getKey())).as("processDate(cal-2)").isEqualTo(String.valueOf(dayOfYear - 2));
|
||||||
LocalDateTime.now().minusDays(2).getDayOfYear()));
|
|
||||||
|
|
||||||
entryDate.calc(v -> v - 3);
|
entryDate.setCalc(v -> v - 3);
|
||||||
PropertyFileUtils.processDate(p, entryDate.set(LocalDate.now()));
|
PropertyFileUtils.processDate(t, p, entryDate.set(LocalDate.now()),
|
||||||
assertThat(p.getProperty(entryDate.key())).as("processDate(LocalDate-3)").isEqualTo(String.valueOf(
|
true);
|
||||||
LocalDateTime.now().minusDays(3).getDayOfYear()));
|
assertThat(p.getProperty(entryDate.getKey())).as("processDate(LocalDate-3)").isEqualTo(String.valueOf(dayOfYear - 3));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void parseIntSubTest() {
|
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
|
||||||
var entryInt = newEntryInt().calc(SUB).pattern("0000");
|
void parseIntSubTest() throws Exception {
|
||||||
PropertyFileUtils.processInt(p, entryInt.defaultValue("0017"));
|
var entryInt = newEntryInt();
|
||||||
assertThat(p.getProperty(entryInt.key())).as("sub(0017)").isEqualTo("0016");
|
entryInt.calc(SUB);
|
||||||
|
entryInt.setPattern("0000");
|
||||||
|
PropertyFileUtils.processInt(t, p, entryInt.defaultValue("0017"), true);
|
||||||
|
assertThat(p.getProperty(entryInt.getKey())).as("sub(0017)").isEqualTo("0016");
|
||||||
|
|
||||||
PropertyFileUtils.processInt(p, entryInt.set(16).calc(v -> v - 3));
|
PropertyFileUtils.processInt(t, p, entryInt.set(16).calc(v -> v - 3), true);
|
||||||
assertThat(p.getProperty(entryInt.key())).as("sub(16)-3").isEqualTo("0013");
|
assertThat(p.getProperty(entryInt.getKey())).as("sub(16)-3").isEqualTo("0013");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -101,122 +102,119 @@ class PropertyFileUtilsTest {
|
||||||
var entry = newEntry();
|
var entry = newEntry();
|
||||||
PropertyFileUtils.processString(p, entry.set(1));
|
PropertyFileUtils.processString(p, entry.set(1));
|
||||||
PropertyFileUtils.processString(p, entry.modify("-foo", String::concat));
|
PropertyFileUtils.processString(p, entry.modify("-foo", String::concat));
|
||||||
assertThat(p.getProperty(entry.key())).as(String.format("processString(%s, %s)", entry.key(),
|
assertThat(p.getProperty(entry.getKey())).as(String.format("processString(%s, %s)", entry.getKey(),
|
||||||
entry.newValue())).isEqualTo("1-foo");
|
entry.getNewValue())).isEqualTo("1-foo");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void parseStringCap() {
|
void parseStringCap() {
|
||||||
var entry = newEntry();
|
var entry = newEntry();
|
||||||
PropertyFileUtils.processString(p, entry.set(t).modify("", (v, s) -> v.toUpperCase(Localization.getLocale())));
|
PropertyFileUtils.processString(p, entry.set(t).modify("", (v, s) -> v.toUpperCase(Localization.getLocale())));
|
||||||
assertThat(p.getProperty(entry.key())).as("capitalize").isEqualTo(t.toUpperCase(Localization.getLocale()));
|
assertThat(p.getProperty(entry.getKey())).as("capitalize").isEqualTo(t.toUpperCase(Localization.getLocale()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void parseStringCat() {
|
void parseStringCat() {
|
||||||
var entry = newEntry();
|
var entry = newEntry();
|
||||||
entry.set(t).modify("-foo", String::concat);
|
entry.set(t).setModify("-foo", String::concat);
|
||||||
PropertyFileUtils.processString(p, entry);
|
PropertyFileUtils.processString(p, entry);
|
||||||
assertThat(p.getProperty(entry.key())).as("replace").isEqualTo(t + "-foo");
|
assertThat(p.getProperty(entry.getKey())).as("replace").isEqualTo(t + "-foo");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
void parseStringFormat() {
|
|
||||||
var entry = new Entry("foo").set("%.2f").pattern(3.14159f);
|
|
||||||
PropertyFileUtils.processString(p, entry);
|
|
||||||
assertThat(p.getProperty(entry.key())).as("format").isEqualTo("3.14");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void parseStringPrepend() {
|
void parseStringPrepend() {
|
||||||
var entry = newEntry();
|
var entry = newEntry();
|
||||||
PropertyFileUtils.processString(p, entry.set(1));
|
PropertyFileUtils.processString(p, entry.set(1));
|
||||||
PropertyFileUtils.processString(p, entry.modify("foo-", (v, s) -> s + v));
|
PropertyFileUtils.processString(p, entry.modify("foo-", (v, s) -> s + v));
|
||||||
assertThat(p.getProperty(entry.key())).as(String.format("processString(%s, %s)", entry.key(), entry.newValue()))
|
assertThat(p.getProperty(entry.getKey())).as(String.format("processString(%s, %s)", entry.getKey(), entry.getNewValue()))
|
||||||
.isEqualTo("foo-1");
|
.isEqualTo("foo-1");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void parseStringReplace() {
|
void parseStringReplace() {
|
||||||
var entry = newEntry();
|
var entry = newEntry();
|
||||||
entry.set(t).modify("T", (v, s) -> v.replace("t", s));
|
entry.set(t).setModify("T", (v, s) -> v.replace("t", s));
|
||||||
PropertyFileUtils.processString(p, entry);
|
PropertyFileUtils.processString(p, entry);
|
||||||
assertThat(p.getProperty(entry.key())).as("replace(t -> T)").isEqualTo("TesT");
|
assertThat(p.getProperty(entry.getKey())).as("replace(t -> T)").isEqualTo("TesT");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void parseStringSub() {
|
void parseStringSub() {
|
||||||
var entry = newEntry();
|
var entry = newEntry();
|
||||||
PropertyFileUtils.processString(p, entry.set(t).modify((v, s) -> v.substring(1)));
|
PropertyFileUtils.processString(p, entry.set(t).modify((v, s) -> v.substring(1)));
|
||||||
assertThat(p.getProperty(entry.key())).as("substring(1)").isEqualTo(t.substring(1));
|
assertThat(p.getProperty(entry.getKey())).as("substring(1)").isEqualTo(t.substring(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void parseTimeTest() {
|
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
|
||||||
|
void parseTimeTest() throws Exception {
|
||||||
var entry = new EntryDate("time").pattern("m");
|
var entry = new EntryDate("time").pattern("m");
|
||||||
var time = LocalTime.now();
|
var time = LocalTime.now();
|
||||||
|
|
||||||
entry.calc(ADD);
|
entry.setCalc(ADD);
|
||||||
PropertyFileUtils.processDate(p, entry.set(time).unit(EntryDate.Units.MINUTE));
|
PropertyFileUtils.processDate(t, p, entry.set(time).unit(EntryDate.Units.MINUTE), true);
|
||||||
assertThat(p.getProperty(entry.key())).as("processDate(now+1)")
|
assertThat(p.getProperty(entry.getKey())).as("processDate(now+1)")
|
||||||
.isEqualTo(String.valueOf(time.plusMinutes(1).getMinute()));
|
.isEqualTo(String.valueOf(time.plusMinutes(1).getMinute()));
|
||||||
|
|
||||||
entry.calc(SUB);
|
entry.setCalc(SUB);
|
||||||
PropertyFileUtils.processDate(p, entry.set(time).unit(EntryDate.Units.HOUR).pattern("H"));
|
PropertyFileUtils.processDate(t, p, entry.set(time).unit(EntryDate.Units.HOUR).pattern("H"), true);
|
||||||
assertThat(p.getProperty(entry.key())).as("processDate(now+1)")
|
assertThat(p.getProperty(entry.getKey())).as("processDate(now+1)")
|
||||||
.isEqualTo(String.valueOf(time.minusHours(1).getHour()));
|
.isEqualTo(String.valueOf(time.minusHours(1).getHour()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void processDateAddTest() {
|
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
|
||||||
|
void processDateAddTest() throws Exception {
|
||||||
var entryDate = newEntryDate();
|
var entryDate = newEntryDate();
|
||||||
entryDate.calc(ADD);
|
entryDate.setCalc(ADD);
|
||||||
PropertyFileUtils.processDate(p, entryDate.now());
|
PropertyFileUtils.processDate(t, p, entryDate.now(), true);
|
||||||
assertThat(p.getProperty(entryDate.key())).as("processDate(now+1)").isEqualTo(String.valueOf(
|
assertThat(p.getProperty(entryDate.getKey())).as("processDate(now+1)").isEqualTo(String.valueOf(dayOfYear + 1));
|
||||||
LocalDateTime.now().plusDays(1).getDayOfYear()));
|
|
||||||
|
|
||||||
PropertyFileUtils.processDate(p, entryDate.now().calc(v -> v + 3));
|
PropertyFileUtils.processDate(t, p, entryDate.now().calc(v -> v + 3), true);
|
||||||
assertThat(p.getProperty(entryDate.key())).as("processDate(now+3)").isEqualTo(String.valueOf(
|
assertThat(p.getProperty(entryDate.getKey())).as("processDate(now+3)").isEqualTo(String.valueOf(dayOfYear + 3));
|
||||||
LocalDateTime.now().plusDays(3).getDayOfYear()));
|
|
||||||
|
|
||||||
entryDate.calc(ADD);
|
entryDate.setCalc(ADD);
|
||||||
PropertyFileUtils.processDate(p, entryDate.set(ZonedDateTime.now()));
|
PropertyFileUtils.processDate(t, p, entryDate.set(ZonedDateTime.now()), true);
|
||||||
assertThat(p.getProperty(entryDate.key())).as("processDate(ZonedDateTime+1)")
|
assertThat(p.getProperty(entryDate.getKey())).as("processDate(ZonedDateTime+1)")
|
||||||
.isEqualTo(String.valueOf(LocalDateTime.now().plusDays(1).getDayOfYear()));
|
.isEqualTo(String.valueOf(dayOfYear + 1));
|
||||||
|
|
||||||
PropertyFileUtils.processDate(p, entryDate.set(Instant.now()).calc(v -> v + 2));
|
PropertyFileUtils.processDate(t, p, entryDate.set(Instant.now()).calc(v -> v + 2), true);
|
||||||
assertThat(p.getProperty(entryDate.key())).as("processDate(Instant+2)").isEqualTo(String.valueOf(
|
assertThat(p.getProperty(entryDate.getKey())).as("processDate(Instant+2)").isEqualTo(String.valueOf(dayOfYear + 2));
|
||||||
LocalDateTime.now().plusDays(2).getDayOfYear()));
|
|
||||||
|
|
||||||
entryDate.calc(v -> v + 3);
|
entryDate.setCalc(v -> v + 3);
|
||||||
PropertyFileUtils.processDate(p, entryDate.set(LocalDateTime.now()));
|
PropertyFileUtils.processDate(t, p, entryDate.set(LocalDateTime.now()), true);
|
||||||
assertThat(p.getProperty(entryDate.key())).as("processDate(LocalDteTime+2)")
|
assertThat(p.getProperty(entryDate.getKey())).as("processDate(LocalDteTime+2)").isEqualTo(String.valueOf(dayOfYear + 3));
|
||||||
.isEqualTo(String.valueOf(LocalDateTime.now().plusDays(3).getDayOfYear()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void processIntAddTest() {
|
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
|
||||||
var entryInt = newEntryInt().calc(ADD).defaultValue("-1");
|
void processIntAddTest() throws Exception {
|
||||||
PropertyFileUtils.processInt(p, entryInt);
|
var entryInt = newEntryInt();
|
||||||
assertThat(p.getProperty(entryInt.key())).as("add(-1)").isEqualTo("0");
|
entryInt.calc(ADD);
|
||||||
|
entryInt.setDefaultValue("-1");
|
||||||
|
PropertyFileUtils.processInt(t, p, entryInt, true);
|
||||||
|
assertThat(p.getProperty(entryInt.getKey())).as("add(-1)").isEqualTo("0");
|
||||||
|
|
||||||
entryInt.key("anInt").defaultValue("0");
|
entryInt.setKey("anint");
|
||||||
PropertyFileUtils.processInt(p, entryInt);
|
entryInt.setDefaultValue("0");
|
||||||
assertThat(p.getProperty(entryInt.key())).as("add(0)").isEqualTo("1");
|
PropertyFileUtils.processInt(t, p, entryInt, true);
|
||||||
PropertyFileUtils.processInt(p, entryInt);
|
assertThat(p.getProperty(entryInt.getKey())).as("add(0)").isEqualTo("1");
|
||||||
assertThat(p.getProperty(entryInt.key())).as("add(1)").isEqualTo("2");
|
PropertyFileUtils.processInt(t, p, entryInt, true);
|
||||||
|
assertThat(p.getProperty(entryInt.getKey())).as("add(1)").isEqualTo("2");
|
||||||
|
|
||||||
entryInt.key("formatted.int").defaultValue("0013").pattern("0000");
|
entryInt.setKey("formatted.int");
|
||||||
PropertyFileUtils.processInt(p, entryInt);
|
entryInt.setDefaultValue("0013");
|
||||||
assertThat(p.getProperty(entryInt.key())).as("add(0013)").isEqualTo("0014");
|
entryInt.setPattern("0000");
|
||||||
PropertyFileUtils.processInt(p, entryInt);
|
PropertyFileUtils.processInt(t, p, entryInt, true);
|
||||||
assertThat(p.getProperty(entryInt.key())).as("add(0014)").isEqualTo("0015");
|
assertThat(p.getProperty(entryInt.getKey())).as("add(0013)").isEqualTo("0014");
|
||||||
|
PropertyFileUtils.processInt(t, p, entryInt, true);
|
||||||
|
assertThat(p.getProperty(entryInt.getKey())).as("add(0014)").isEqualTo("0015");
|
||||||
|
|
||||||
entryInt.calc(v -> v + 2);
|
entryInt.calc(v -> v + 2);
|
||||||
PropertyFileUtils.processInt(p, entryInt);
|
PropertyFileUtils.processInt(t, p, entryInt, true);
|
||||||
assertThat(p.getProperty(entryInt.key())).as("add(0015)+2").isEqualTo("0017");
|
assertThat(p.getProperty(entryInt.getKey())).as("add(0015)+2").isEqualTo("0017");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -224,17 +222,18 @@ class PropertyFileUtilsTest {
|
||||||
var entry = newEntry();
|
var entry = newEntry();
|
||||||
PropertyFileUtils.processString(p, entry);
|
PropertyFileUtils.processString(p, entry);
|
||||||
|
|
||||||
assertThat(entry.newValue()).as(String.format("processString(%s, %s)", entry.key(), entry.newValue()))
|
assertThat(entry.getNewValue()).as(String.format("processString(%s, %s)", entry.getKey(), entry.getNewValue()))
|
||||||
.isEqualTo(p.getProperty(entry.key()));
|
.isEqualTo(p.getProperty(entry.getKey()));
|
||||||
|
|
||||||
entry.key("version.minor");
|
entry.setKey("version.minor");
|
||||||
|
|
||||||
PropertyFileUtils.processString(p, entry.set(0));
|
PropertyFileUtils.processString(p, entry.set(0));
|
||||||
assertThat(entry.newValue().toString()).as(String.format("processString(%s, %s)", entry.key(), entry.newValue()))
|
assertThat(entry.getNewValue().toString()).as(String.format("processString(%s, %s)", entry.getKey(), entry.getNewValue()))
|
||||||
.isEqualTo(p.getProperty(entry.key()));
|
.isEqualTo(p.getProperty(entry.getKey()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SuppressWarnings("PMD.SignatureDeclareThrowsException")
|
||||||
void savePropertiesTest() throws Exception {
|
void savePropertiesTest() throws Exception {
|
||||||
var p = new Properties();
|
var p = new Properties();
|
||||||
var test = "test";
|
var test = "test";
|
||||||
|
@ -246,22 +245,13 @@ class PropertyFileUtilsTest {
|
||||||
assertThatCode(() -> PropertyFileUtils.saveProperties(tmp, "Generated file - do not modify!", p))
|
assertThatCode(() -> PropertyFileUtils.saveProperties(tmp, "Generated file - do not modify!", p))
|
||||||
.as("save properties").doesNotThrowAnyException();
|
.as("save properties").doesNotThrowAnyException();
|
||||||
|
|
||||||
assertThat(PropertyFileUtils.loadProperties(t, tmp, p, false)).as("load properties").isTrue();
|
assertThat(PropertyFileUtils.loadProperties(t, tmp, p)).as("load properties").isTrue();
|
||||||
|
|
||||||
assertThat(p.getProperty(test)).as("read property").isEqualTo(test);
|
assertThat(p.getProperty(test)).as("read property").isEqualTo(test);
|
||||||
|
|
||||||
tmp.deleteOnExit();
|
tmp.deleteOnExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
void testChangeKey() {
|
|
||||||
var entry = new Entry("foo").key("bar");
|
|
||||||
assertThat(entry.key()).isEqualTo("bar");
|
|
||||||
|
|
||||||
entry.key("foo");
|
|
||||||
assertThat(entry.key()).isEqualTo("foo");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testCurrentValue() {
|
void testCurrentValue() {
|
||||||
var value = "value";
|
var value = "value";
|
||||||
|
@ -277,9 +267,9 @@ class PropertyFileUtilsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testWarn() {
|
void testWarn() {
|
||||||
assertThatCode(() -> PropertyFileUtils.warn("command", "message", true, false))
|
assertThatCode(() -> PropertyFileUtils.warn("command", "message", new IOException(t), true))
|
||||||
.isInstanceOf(ExitStatusException.class);
|
.hasMessage(t).isInstanceOf(IOException.class);
|
||||||
assertThatCode(() -> PropertyFileUtils.warn("command", t, false, false))
|
assertThatCode(() -> PropertyFileUtils.warn("command", t, new Exception(t), false))
|
||||||
.as("failOnWarning = false").doesNotThrowAnyException();
|
.as("failOnWarning = false").doesNotThrowAnyException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue