Skip to content

Commit dbdf671

Browse files
committed
feat(config): ability to configure table delimiters
Closes: #77
1 parent c9f4326 commit dbdf671

File tree

7 files changed

+31
-19
lines changed

7 files changed

+31
-19
lines changed

src/main/java/ru/ewc/checklogic/ServerConfiguration.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@
2323
*/
2424
package ru.ewc.checklogic;
2525

26+
import java.net.URI;
2627
import java.nio.file.Path;
2728
import java.util.HashMap;
2829
import java.util.Map;
30+
import ru.ewc.decisions.input.CombinedCsvFileReader;
2931

3032
/**
3133
* I am a context for the web server.
@@ -49,7 +51,8 @@ public ServerConfiguration(final String root) {
4951
Map.of(
5052
"request", "request",
5153
"command", "available",
52-
"function", "function"
54+
"function", "function",
55+
"delimiter", ","
5356
)
5457
);
5558
}
@@ -90,6 +93,10 @@ public String getRoot() {
9093
return this.root;
9194
}
9295

96+
public CombinedCsvFileReader csvReader(final URI path) {
97+
return new CombinedCsvFileReader(path, ".csv", this.getParameterValue("delimiter"));
98+
}
99+
93100
public String functionsLocatorName() {
94101
return this.parameters.get("function");
95102
}

src/main/java/ru/ewc/checklogic/ServerContextFactory.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.net.URI;
2727
import java.nio.file.Path;
2828
import ru.ewc.decisions.api.ComputationContext;
29+
import ru.ewc.decisions.api.DecisionTables;
2930

3031
/**
3132
* I am a factory for creating server contexts.
@@ -86,7 +87,10 @@ public ServerInstance initialState() {
8687
}
8788

8889
public ComputationContext context() {
89-
return new ComputationContext(this.factory.initialState(), this.tablesFolder());
90+
return new ComputationContext(
91+
this.factory.initialState(),
92+
DecisionTables.using(this.config.csvReader(this.tablesFolder()))
93+
);
9094
}
9195

9296
public ServerConfiguration configuration() {

src/main/java/ru/ewc/checklogic/ServerInstance.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,10 @@
2828
import java.util.List;
2929
import java.util.Map;
3030
import lombok.Getter;
31-
import ru.ewc.checklogic.testing.CheckSuite;
3231
import ru.ewc.decisions.api.ComputationContext;
3332
import ru.ewc.decisions.api.DecisionTables;
3433
import ru.ewc.decisions.api.DecitaException;
3534
import ru.ewc.decisions.api.InMemoryLocator;
36-
import ru.ewc.decisions.input.CombinedCsvFileReader;
3735
import ru.ewc.state.State;
3836

3937
/**
@@ -162,11 +160,7 @@ public boolean isNotSpecified(final String arg) {
162160
return function && !this.states.functionSpecified(args[1]) || request;
163161
}
164162

165-
public void createState(final String include, final CheckSuite suite) {
166-
suite.findAndPerform(include, this.context);
167-
}
168-
169163
private DecisionTables getAllTables() {
170-
return DecisionTables.using(new CombinedCsvFileReader(this.tables, ".csv", ";"));
164+
return DecisionTables.using(this.server.csvReader(this.tables));
171165
}
172166
}

src/main/java/ru/ewc/checklogic/server/StatePage.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.renomad.minum.web.RequestLine;
2828
import com.renomad.minum.web.Response;
2929
import com.renomad.minum.web.WebFramework;
30-
import java.net.URI;
3130
import java.nio.file.Path;
3231
import java.util.List;
3332
import java.util.Map;
@@ -37,7 +36,6 @@
3736
import ru.ewc.checklogic.testing.CheckSuite;
3837
import ru.ewc.decisions.api.ComputationContext;
3938
import ru.ewc.decisions.api.OutputTracker;
40-
import ru.ewc.decisions.input.CombinedCsvFileReader;
4139

4240
/**
4341
* I am a class providing access to the state page.
@@ -149,16 +147,12 @@ private Response resetState(final Request request) {
149147

150148
private CheckSuite testSuite() {
151149
return CheckSuite.using(
152-
new CombinedCsvFileReader(this.testsFolder(), ".csv", ";"),
150+
this.config.csvReader(Path.of(this.context.getRoot(), "tests").toUri()),
153151
this.context.getRoot(),
154152
this.config.requestLocatorName()
155153
);
156154
}
157155

158-
private URI testsFolder() {
159-
return Path.of(this.context.getRoot(), "tests").toUri();
160-
}
161-
162156
private String listOfIncludes() {
163157
return this.testSuite().checkNames().stream()
164158
.sorted()

src/main/java/ru/ewc/checklogic/server/WebPages.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import ru.ewc.checklogic.ServerConfiguration;
3333
import ru.ewc.checklogic.testing.CheckSuite;
3434
import ru.ewc.checklogic.testing.TestResult;
35-
import ru.ewc.decisions.input.CombinedCsvFileReader;
3635

3736
/**
3837
* I am a collection of template processors that render the pages to be served.
@@ -80,7 +79,7 @@ public Response uninitializedPage() {
8079

8180
public Response testPage() {
8281
final CheckSuite suite = CheckSuite.using(
83-
new CombinedCsvFileReader(Path.of(this.root, "tests").toUri(), ".csv", ";"),
82+
this.config.csvReader(Path.of(this.root, "tests").toUri()),
8483
this.root,
8584
this.config.requestLocatorName()
8685
);

src/main/java/ru/ewc/checklogic/server/config/ConfigPage.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ public final class ConfigPage implements Endpoints {
5151
*/
5252
private static final String REQUEST = "request";
5353

54+
/**
55+
* The name of the configuration parameter that holds the delimiter for the table.
56+
*/
57+
private static final String DELIMITER = "delimiter";
58+
5459
/**
5560
* The configuration of the web server.
5661
*/
@@ -82,6 +87,9 @@ void updateParametersFrom(final Request request) {
8287
if (keys.contains("reqLocator") && request.body().asBytes("reqLocator").length > 0) {
8388
this.config.setParameterValue(ConfigPage.REQUEST, fieldFrom(request, "reqLocator"));
8489
}
90+
if (keys.contains("delimiter") && request.body().asBytes("delimiter").length > 0) {
91+
this.config.setParameterValue(ConfigPage.DELIMITER, fieldFrom(request, "delimiter"));
92+
}
8593
}
8694

8795
Response render(final Request request) {
@@ -91,7 +99,8 @@ Response render(final Request request) {
9199
Map<String, String> parameters() {
92100
return Map.of(
93101
"commandAvailabilityOutcome", this.config.getParameterValue(ConfigPage.COMMAND),
94-
"requestLocatorName", this.config.getParameterValue(ConfigPage.REQUEST)
102+
"requestLocatorName", this.config.getParameterValue(ConfigPage.REQUEST),
103+
"tableDelimiter", this.config.getParameterValue(ConfigPage.DELIMITER)
95104
);
96105
}
97106

src/main/resources/templates/config.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ <h1>Configuration</h1>
3434
<input class="form-control" type="text" id="reqLocator" name="reqLocator"
3535
value="{{ requestLocatorName }}">
3636
</div>
37+
<div class="mb-3">
38+
<label class="col-form-label" for="delimiter">Table columns delimiter:</label>
39+
<input class="form-control" type="text" id="delimiter" name="delimiter"
40+
value="{{ tableDelimiter }}">
41+
</div>
3742
<button class="btn btn-primary" type="submit">Update configuration</button>
3843
</form>
3944
</div>

0 commit comments

Comments
 (0)