It’s actually a Java-based ‘Internal DSL’ in the parlance of Martin Fowler (Domain Specific Languages, Addison Wesley). This means you use a technique like method chaining to be able to write Java that looks like a DSL:
void setup() {
RequirementsBuilder
.outputs()
.output(HistoricalVaR)
.constraint(Currency, "@currency")
.constraint(LookBackYears, "@lookback")
.inputs()
.input(YieldCurve)
.constraint(CurveCurrency, "@currency")
.constraint(Currency, "@currency")
.inputs(PnLSeries)
.constraint(Currency, "@currency")
.constraint(Period, "@lookback")
.constraint(SamplingFrequency, "@samplingFrequency")
.constraints()
.eq("@samplingFrequency", "Weekly")
// by using @currency and @lookback in inputs and outputs,
// there's an implicit equals there.
.build();
}
Not a complete example, but hopefully you get the idea. We might also produce an external non-java version of the DSL for when coding functions in external languages like R, Matlab or C++, but we haven’t done anything in that direction yet.