Demo data (optional)
Providing example datasets is a good way to help consumers understand the expected input of your model. This page describes how to provide dedicated support for exposing demo data.
| This page describes features which are only relevant when running Timefold Solver as a Service (Preview). The information on these pages may describe functionality which may be changed or even removed in a future release. |
1. Generating demo data
To provide consumers of your model with example datasets, implement the DemoDataGenerator interface.
This interface requires you to implement 2 methods:
-
demoMetaData(): returns a list of metadata, listing all the different datasets available. -
generateDemoData(String demoDataId): generates the dataset with the given id, usually retrieved from the metadata.
|
Implementations of this interface must be dependency free meaning simple instantiation (even with reflection) of this class is enough to generate demo data. |
@ApplicationScoped
public class TimetableDemoDataGenerator implements DemoDataGenerator {
public enum DemoDataKind {
BASIC(
new DemoMetaData("BASIC", "SHORT_DESCRIPTION", "LONG_DESCRIPTION", List.of("TAGS"),
List.of("Configuration Overrides")),
this::generateBasicDemoData // could also delegate to another class instead
),
COMPLEX_SET(
new DemoMetaData("COMPLEX_SET", "SHORT_DESCRIPTION", "LONG_DESCRIPTION", List.of("TAGS"),
List.of("Configuration Overrides")),
this::generateComplexSet
);
private DemoMetaData metaData;
private Supplier<ModelRequest<?>> supplier;
public DemoMetaData getMetaData() {
return metaData;
}
public DemoData getDemoData() {
return new DemoData(metaData, supplier.get());
}
public ModelRequest<TimetableInput, TimetableConfigOverrides> generateBasicDemoData() {
// Generate basic request.
}
public ModelRequest<TimetableInput, TimetableConfigOverrides> generateComplexSet() {
// Generate complex request.
}
}
@Override
public List<DemoMetaData> demoMetaData() {
return Stream.of(DemoDataKind.values())
.map(demoDataKind -> demoDataKind.getMetaData())
.toList();
}
@Override
public DemoData generateDemoData(String demoDataId) {
return DemoDataKind.fromString(demoDataId).getDemoData();
}
}
With this interface implemented, Timefold Solver will automatically expose these methods as REST endpoints:
-
GET /<root>/demo-data: Retrieve all available demo dataset names. -
GET /<root>/demo-data/{name}: Retrieve demo dataset with given identifier