View dependency graph

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.