001/* 002 * SPDX-FileCopyrightText: none 003 * SPDX-License-Identifier: CC0-1.0 004 */ 005 006package dev.metaschema.oscal.lib.profile.resolver.support; 007 008import java.util.EnumSet; 009import java.util.Set; 010 011import dev.metaschema.core.metapath.item.node.IAssemblyNodeItem; 012import dev.metaschema.core.metapath.item.node.IRootAssemblyNodeItem; 013import dev.metaschema.core.util.ObjectUtils; 014import edu.umd.cs.findbugs.annotations.NonNull; 015 016public abstract class AbstractIndexingVisitor<T, R> 017 extends AbstractCatalogEntityVisitor<T, R> { 018 019 public AbstractIndexingVisitor() { 020 this(ObjectUtils.notNull(EnumSet.allOf(IEntityItem.ItemType.class))); 021 } 022 023 public AbstractIndexingVisitor(@NonNull Set<IEntityItem.ItemType> itemTypesToIndex) { 024 super(itemTypesToIndex); 025 } 026 027 @NonNull 028 protected abstract IIndexer getIndexer(T state); 029 030 @Override 031 public R visitGroup(IAssemblyNodeItem item, R childResult, T state) { 032 getIndexer(state).addGroup(item); 033 return childResult; 034 } 035 036 @Override 037 public R visitControl(IAssemblyNodeItem item, R childResult, T state) { 038 getIndexer(state).addControl(item); 039 return childResult; 040 } 041 042 @Override 043 protected R visitParameter(@NonNull IAssemblyNodeItem parameterItem, 044 @NonNull IAssemblyNodeItem catalogOrGroupOrControl, T state) { 045 getIndexer(state).addParameter(parameterItem); 046 return newDefaultResult(state); 047 } 048 049 @Override 050 protected void visitPart(@NonNull IAssemblyNodeItem partItem, 051 @NonNull IAssemblyNodeItem catalogOrGroupOrControl, T state) { 052 getIndexer(state).addPart(partItem); 053 } 054 055 @Override 056 protected void visitRole(IAssemblyNodeItem roleItem, IAssemblyNodeItem metadataItem, T state) { 057 getIndexer(state).addRole(roleItem); 058 } 059 060 @Override 061 protected void visitLocation(IAssemblyNodeItem locationItem, IAssemblyNodeItem metadataItem, 062 T state) { 063 getIndexer(state).addLocation(locationItem); 064 } 065 066 @Override 067 protected void visitParty(IAssemblyNodeItem partyItem, IAssemblyNodeItem metadataItem, T state) { 068 getIndexer(state).addParty(partyItem); 069 } 070 071 @Override 072 protected void visitResource(IAssemblyNodeItem resourceItem, IRootAssemblyNodeItem rootItem, T state) { 073 getIndexer(state).addResource(resourceItem); 074 } 075}