001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package dev.metaschema.oscal.lib.model.control.catalog;
007
008import java.util.stream.Stream;
009
010import dev.metaschema.core.util.CollectionUtil;
011import dev.metaschema.core.util.ObjectUtils;
012import dev.metaschema.oscal.lib.model.AbstractOscalInstance;
013import dev.metaschema.oscal.lib.model.control.AbstractParameter;
014import edu.umd.cs.findbugs.annotations.NonNull;
015
016public abstract class AbstractCatalog
017    extends AbstractOscalInstance
018    implements ICatalog {
019
020  @NonNull
021  @Override
022  public Stream<String> getReferencedParameterIds() {
023    // get parameters referenced by the control's parameters
024    return ObjectUtils.notNull(
025        CollectionUtil.listOrEmpty(getParams()).stream()
026            .flatMap(ObjectUtils::filterNull)
027            .flatMap(AbstractParameter::getParameterReferences)
028            .distinct());
029  }
030}