MessagePattern.java
package de.schegge.rosinante.generator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class MessagePattern {
    private final String name;
    private final Map<String, FieldPattern> fields = new LinkedHashMap<>();
    public MessagePattern(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public List<FieldPattern> getFields() {
        return List.copyOf(fields.values());
    }
    public void addField(FieldPattern fieldPattern) {
        checkForDuplicates(fieldPattern);
        fields.put(fieldPattern.name(), fieldPattern);
    }
    private void checkForDuplicates(FieldPattern pattern) {
        List<String> existingFieldNames = fields.values().stream().map(FieldPattern::name).filter(x -> pattern.name().equals(x)).toList();
        if (!existingFieldNames.isEmpty()) {
            throw new IllegalArgumentException("duplicate field name: " + existingFieldNames);
        }
    }
    public long getMandatoryFields() {
        return fields.values().stream().filter(f -> !f.optional()).count();
    }
}