class AssociationList {

    public static AssociationList fromString(String encoded) {
        return Optional.ofNullable(encoded)
                .filter(StringUtils::nonEmpty)
                .map(s -> new AssociationList(
                        Arrays.stream(s.replaceAll(REGEX_DELIMITER, REPLACE_DELIMITER_AVOID_CONFLICTS)
                                              .split(REPLACED_DELIMITER))
                                .map(AssociationDeclaration::fromString)
                                .collect(toList())))
                .orElse(new AssociationList());
    }

    public  AssociationList(List<AssociationDeclaration> inputs, List<AssociationDeclaration> outputs);
    public  AssociationList(List<AssociationDeclaration> all);
    public  AssociationList();

}