Skip to content

Commit 1e502ff

Browse files
chore: change it back to a boolean
1 parent f9ca511 commit 1e502ff

13 files changed

Lines changed: 36 additions & 121 deletions

File tree

core/src/main/java/ai/timefold/solver/core/config/score/director/EnableAutomaticNodeSharing.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

core/src/main/java/ai/timefold/solver/core/config/score/director/ScoreDirectorFactoryConfig.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public final class ScoreDirectorFactoryConfig extends AbstractConfig<ScoreDirect
4141
@XmlJavaTypeAdapter(JaxbCustomPropertiesAdapter.class)
4242
private Map<String, String> constraintProviderCustomProperties = null;
4343
@Nullable
44-
private EnableAutomaticNodeSharing constraintStreamAutomaticNodeSharing;
44+
private Boolean constraintStreamAutomaticNodeSharing;
4545
private Boolean constraintStreamProfilingEnabled;
4646

4747
private Class<? extends IncrementalScoreCalculator> incrementalScoreCalculatorClass = null;
@@ -93,12 +93,12 @@ public void setConstraintProviderCustomProperties(
9393
this.constraintProviderCustomProperties = constraintProviderCustomProperties;
9494
}
9595

96-
public @Nullable EnableAutomaticNodeSharing getConstraintStreamAutomaticNodeSharing() {
96+
public @Nullable Boolean getConstraintStreamAutomaticNodeSharing() {
9797
return constraintStreamAutomaticNodeSharing;
9898
}
9999

100100
public void
101-
setConstraintStreamAutomaticNodeSharing(@Nullable EnableAutomaticNodeSharing constraintStreamAutomaticNodeSharing) {
101+
setConstraintStreamAutomaticNodeSharing(@Nullable Boolean constraintStreamAutomaticNodeSharing) {
102102
this.constraintStreamAutomaticNodeSharing = constraintStreamAutomaticNodeSharing;
103103
}
104104

@@ -195,7 +195,7 @@ public void setAssertionScoreDirectorFactory(@Nullable ScoreDirectorFactoryConfi
195195
}
196196

197197
public @NonNull ScoreDirectorFactoryConfig
198-
withConstraintStreamAutomaticNodeSharing(@NonNull EnableAutomaticNodeSharing constraintStreamAutomaticNodeSharing) {
198+
withConstraintStreamAutomaticNodeSharing(@NonNull Boolean constraintStreamAutomaticNodeSharing) {
199199
this.constraintStreamAutomaticNodeSharing = constraintStreamAutomaticNodeSharing;
200200
return this;
201201
}

core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/BavetConstraintStreamScoreDirectorFactory.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import ai.timefold.solver.core.api.score.Score;
88
import ai.timefold.solver.core.api.score.stream.ConstraintMetaModel;
99
import ai.timefold.solver.core.api.score.stream.ConstraintProvider;
10-
import ai.timefold.solver.core.config.score.director.EnableAutomaticNodeSharing;
1110
import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig;
1211
import ai.timefold.solver.core.config.solver.EnvironmentMode;
1312
import ai.timefold.solver.core.config.util.ConfigUtils;
@@ -49,20 +48,16 @@ public final class BavetConstraintStreamScoreDirectorFactory<Solution_, Score_ e
4948
private static Class<? extends ConstraintProvider> getConstraintProviderClass(ScoreDirectorFactoryConfig config,
5049
Class<? extends ConstraintProvider> providedConstraintProviderClass) {
5150
var automaticNodeSharing = Objects.requireNonNullElse(config.getConstraintStreamAutomaticNodeSharing(),
52-
EnableAutomaticNodeSharing.AUTO);
53-
return switch (automaticNodeSharing) {
54-
case OFF -> providedConstraintProviderClass;
55-
case ON -> {
56-
var enterpriseService =
57-
TimefoldSolverEnterpriseService
58-
.loadOrFail(TimefoldSolverEnterpriseService.Feature.AUTOMATIC_NODE_SHARING);
59-
yield enterpriseService.createNodeSharer().buildNodeSharedConstraintProvider(providedConstraintProviderClass);
60-
}
61-
case AUTO -> TimefoldSolverEnterpriseService.loadOrDefault(
51+
true);
52+
53+
if (automaticNodeSharing) {
54+
return TimefoldSolverEnterpriseService.loadOrDefault(
6255
enterpriseService -> enterpriseService.createNodeSharer()
6356
.buildNodeSharedConstraintProvider(providedConstraintProviderClass),
6457
() -> providedConstraintProviderClass);
65-
};
58+
} else {
59+
return providedConstraintProviderClass;
60+
}
6661
}
6762

6863
private final BavetConstraintSessionFactory<Solution_, Score_> constraintSessionFactory;

core/src/main/resources/solver.xsd

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103

104104
<xs:element minOccurs="0" name="constraintProviderCustomProperties" type="tns:jaxbAdaptedMap"/>
105105

106-
<xs:element minOccurs="0" name="constraintStreamAutomaticNodeSharing" type="tns:enableAutomaticNodeSharing"/>
106+
<xs:element minOccurs="0" name="constraintStreamAutomaticNodeSharing" type="xs:boolean"/>
107107

108108
<xs:element minOccurs="0" name="constraintStreamProfilingEnabled" type="xs:boolean"/>
109109

@@ -1539,20 +1539,6 @@
15391539

15401540
</xs:simpleType>
15411541

1542-
<xs:simpleType name="enableAutomaticNodeSharing">
1543-
1544-
<xs:restriction base="xs:string">
1545-
1546-
<xs:enumeration value="ON"/>
1547-
1548-
<xs:enumeration value="OFF"/>
1549-
1550-
<xs:enumeration value="AUTO"/>
1551-
1552-
</xs:restriction>
1553-
1554-
</xs:simpleType>
1555-
15561542
<xs:simpleType name="terminationCompositionStyle">
15571543

15581544
<xs:restriction base="xs:string">

quarkus-integration/quarkus/deployment/src/main/java/ai/timefold/solver/quarkus/deployment/config/SolverBuildTimeConfig.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.util.Set;
55

66
import ai.timefold.solver.core.api.score.stream.ConstraintProvider;
7-
import ai.timefold.solver.core.config.score.director.EnableAutomaticNodeSharing;
87
import ai.timefold.solver.core.config.solver.PreviewFeature;
98
import ai.timefold.solver.core.config.solver.SolverConfig;
109
import ai.timefold.solver.quarkus.config.SolverRuntimeConfig;
@@ -58,11 +57,11 @@ public interface SolverBuildTimeConfig {
5857
* so nodes share lambdas when possible, improving performance.
5958
* When enabled, breakpoints placed in the {@link ConstraintProvider}
6059
* will no longer be triggered.
61-
* Defaults to "false".
60+
* Defaults to "true".
6261
* <p>
6362
* Note: this setting is only available in Timefold Solver
6463
* <a href="https://timefold.ai/docs/timefold-solver/latest/enterprise-edition/enterprise-edition">Enterprise Edition</a>.
6564
*/
6665
// Build time - modifies the ConstraintProvider class if set
67-
Optional<EnableAutomaticNodeSharing> constraintStreamAutomaticNodeSharing();
66+
Optional<Boolean> constraintStreamAutomaticNodeSharing();
6867
}

quarkus-integration/quarkus/deployment/src/test/java/ai/timefold/solver/quarkus/TimefoldProcessorNodeSharingFailFastTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import jakarta.inject.Inject;
66

7-
import ai.timefold.solver.core.config.score.director.EnableAutomaticNodeSharing;
87
import ai.timefold.solver.core.config.solver.SolverConfig;
98
import ai.timefold.solver.quarkus.testdomain.normal.TestdataQuarkusConstraintProvider;
109
import ai.timefold.solver.quarkus.testdomain.normal.TestdataQuarkusEntity;
@@ -33,7 +32,7 @@ public class TimefoldProcessorNodeSharingFailFastTest {
3332

3433
@Test
3534
void isEnabledInSolverConfig() {
36-
assertEquals(EnableAutomaticNodeSharing.ON,
35+
assertEquals(true,
3736
solverConfig.getScoreDirectorFactoryConfig().getConstraintStreamAutomaticNodeSharing());
3837
}
3938

quarkus-integration/quarkus/deployment/src/test/resources/ai/timefold/solver/quarkus/solverConfigWithNodeSharing.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
<solver xmlns="https://timefold.ai/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
33
xsi:schemaLocation="https://timefold.ai/xsd/solver https://timefold.ai/xsd/solver/solver.xsd">
44
<scoreDirectorFactory>
5-
<constraintStreamAutomaticNodeSharing>ON</constraintStreamAutomaticNodeSharing>
5+
<constraintStreamAutomaticNodeSharing>true</constraintStreamAutomaticNodeSharing>
66
</scoreDirectorFactory>
77
</solver>

spring-integration/spring-boot-autoconfigure/src/main/java/ai/timefold/solver/spring/boot/autoconfigure/TimefoldSolverAutoConfiguration.java

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import ai.timefold.solver.core.api.solver.SolutionManager;
3232
import ai.timefold.solver.core.api.solver.SolverFactory;
3333
import ai.timefold.solver.core.api.solver.SolverManager;
34-
import ai.timefold.solver.core.config.score.director.EnableAutomaticNodeSharing;
3534
import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig;
3635
import ai.timefold.solver.core.config.solver.SolverConfig;
3736
import ai.timefold.solver.core.config.solver.termination.DiminishedReturnsTerminationConfig;
@@ -264,33 +263,19 @@ private void applyScoreDirectorFactoryProperties(IncludeAbstractClassesEntitySca
264263
SolverConfig solverConfig, SolverProperties solverProperties) {
265264
applyScoreDirectorFactoryProperties(entityScanner, solverConfig);
266265
if (solverProperties.getConstraintStreamAutomaticNodeSharing() != null) {
267-
Objects.requireNonNull(solverConfig.getScoreDirectorFactoryConfig())
268-
.setConstraintStreamAutomaticNodeSharing(switch (Objects.requireNonNullElse(
269-
solverProperties.getConstraintStreamAutomaticNodeSharing(),
270-
EnableAutomaticNodeSharing.AUTO)) {
271-
case ON -> {
272-
if (NativeDetector.inNativeImage()) {
273-
throw new UnsupportedOperationException(
274-
"Constraint stream automatic node sharing is unsupported in a Spring native image.");
275-
}
276-
yield EnableAutomaticNodeSharing.ON;
277-
}
278-
case OFF -> EnableAutomaticNodeSharing.OFF;
279-
case AUTO -> {
280-
if (NativeDetector.inNativeImage()) {
281-
if (TimefoldSolverEnterpriseService.loadOrDefault(
282-
ignored -> true,
283-
() -> false)) {
284-
// We are in enterprise, so log a note
285-
LOG.debug("""
286-
Constraint stream automatic node sharing was disabled because it \
287-
is unsupported in a Spring native image.""");
288-
}
289-
yield EnableAutomaticNodeSharing.OFF;
290-
}
291-
yield EnableAutomaticNodeSharing.AUTO;
292-
}
293-
});
266+
if (NativeDetector.inNativeImage()) {
267+
if (solverProperties.getConstraintStreamAutomaticNodeSharing()) {
268+
// We are in enterprise, so log a note
269+
LOG.debug("""
270+
Constraint stream automatic node sharing was disabled because it \
271+
is unsupported in a Spring native image.""");
272+
}
273+
Objects.requireNonNull(solverConfig.getScoreDirectorFactoryConfig())
274+
.setConstraintStreamAutomaticNodeSharing(false);
275+
} else {
276+
Objects.requireNonNull(solverConfig.getScoreDirectorFactoryConfig())
277+
.setConstraintStreamAutomaticNodeSharing(solverProperties.getConstraintStreamAutomaticNodeSharing());
278+
}
294279
} else if (NativeDetector.inNativeImage()) {
295280
// Explicitly set it to disabled in a native image if unspecified so
296281
// the solver does not try to node share when enterprise is used.
@@ -303,7 +288,7 @@ private void applyScoreDirectorFactoryProperties(IncludeAbstractClassesEntitySca
303288
is unsupported in a Spring native image.""");
304289
}
305290
Objects.requireNonNull(solverConfig.getScoreDirectorFactoryConfig())
306-
.setConstraintStreamAutomaticNodeSharing(EnableAutomaticNodeSharing.OFF);
291+
.setConstraintStreamAutomaticNodeSharing(false);
307292
}
308293
if (solverProperties.getConstraintStreamProfilingEnabled() != null) {
309294
Objects.requireNonNull(solverConfig.getScoreDirectorFactoryConfig())

spring-integration/spring-boot-autoconfigure/src/main/java/ai/timefold/solver/spring/boot/autoconfigure/config/SolverProperties.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.util.TreeSet;
66

77
import ai.timefold.solver.core.api.score.stream.ConstraintProvider;
8-
import ai.timefold.solver.core.config.score.director.EnableAutomaticNodeSharing;
98
import ai.timefold.solver.core.config.solver.EnvironmentMode;
109
import ai.timefold.solver.core.config.solver.PreviewFeature;
1110
import ai.timefold.solver.core.impl.heuristic.selector.common.nearby.NearbyDistanceMeter;
@@ -57,9 +56,9 @@ public class SolverProperties {
5756
* so nodes share lambdas when possible, improving performance.
5857
* When enabled, breakpoints placed in the {@link ConstraintProvider}
5958
* will no longer be triggered.
60-
* Defaults to "AUTO".
59+
* Defaults to "true".
6160
*/
62-
private EnableAutomaticNodeSharing constraintStreamAutomaticNodeSharing;
61+
private Boolean constraintStreamAutomaticNodeSharing;
6362

6463
/**
6564
* Configuration of the random seed.
@@ -129,11 +128,11 @@ public void setConstraintStreamProfilingEnabled(Boolean constraintStreamProfilin
129128
this.constraintStreamProfilingEnabled = constraintStreamProfilingEnabled;
130129
}
131130

132-
public EnableAutomaticNodeSharing getConstraintStreamAutomaticNodeSharing() {
131+
public Boolean getConstraintStreamAutomaticNodeSharing() {
133132
return constraintStreamAutomaticNodeSharing;
134133
}
135134

136-
public void setConstraintStreamAutomaticNodeSharing(EnableAutomaticNodeSharing constraintStreamAutomaticNodeSharing) {
135+
public void setConstraintStreamAutomaticNodeSharing(Boolean constraintStreamAutomaticNodeSharing) {
137136
this.constraintStreamAutomaticNodeSharing = constraintStreamAutomaticNodeSharing;
138137
}
139138

spring-integration/spring-boot-autoconfigure/src/main/java/ai/timefold/solver/spring/boot/autoconfigure/config/SolverProperty.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.util.stream.Collectors;
1111
import java.util.stream.Stream;
1212

13-
import ai.timefold.solver.core.config.score.director.EnableAutomaticNodeSharing;
1413
import ai.timefold.solver.core.config.solver.EnvironmentMode;
1514
import ai.timefold.solver.core.config.solver.PreviewFeature;
1615
import ai.timefold.solver.core.impl.heuristic.selector.common.nearby.NearbyDistanceMeter;
@@ -46,7 +45,7 @@ public enum SolverProperty {
4645
value -> Boolean.valueOf(value.toString())),
4746
CONSTRAINT_STREAM_AUTOMATIC_NODE_SHARING("constraint-stream-automatic-node-sharing",
4847
SolverProperties::setConstraintStreamAutomaticNodeSharing,
49-
value -> EnableAutomaticNodeSharing.valueOf(value.toString())),
48+
value -> Boolean.valueOf(value.toString())),
5049
RANDOM_SEED("random-seed", SolverProperties::setRandomSeed, value -> Long.parseLong(value.toString())),
5150
TERMINATION("termination", SolverProperties::setTermination, value -> {
5251
if (value instanceof TerminationProperties terminationProperties) {

0 commit comments

Comments
 (0)