class Group {

  public Optional<Dimension> findDimension(String name) {
    if (name == null)
      return Optional.empty();
    Dimension d = findDimensionLocal(name);
    if (d != null)
      return Optional.of(d);
    Group parent = getParentGroup();
    if (parent != null)
      return parent.findDimension(name);

    return Optional.empty();
  }

  private  Group(Builder builder, @Nullable Group parent);

}