1
2
3
4
5
6 package dev.metaschema.oscal.lib.profile.resolver.support;
7
8 import java.util.EnumSet;
9 import java.util.Set;
10
11 import dev.metaschema.core.metapath.item.node.IAssemblyNodeItem;
12 import dev.metaschema.core.metapath.item.node.IRootAssemblyNodeItem;
13 import dev.metaschema.core.util.ObjectUtils;
14 import edu.umd.cs.findbugs.annotations.NonNull;
15
16 public abstract class AbstractIndexingVisitor<T, R>
17 extends AbstractCatalogEntityVisitor<T, R> {
18
19 public AbstractIndexingVisitor() {
20 this(ObjectUtils.notNull(EnumSet.allOf(IEntityItem.ItemType.class)));
21 }
22
23 public AbstractIndexingVisitor(@NonNull Set<IEntityItem.ItemType> itemTypesToIndex) {
24 super(itemTypesToIndex);
25 }
26
27 @NonNull
28 protected abstract IIndexer getIndexer(T state);
29
30 @Override
31 public R visitGroup(IAssemblyNodeItem item, R childResult, T state) {
32 getIndexer(state).addGroup(item);
33 return childResult;
34 }
35
36 @Override
37 public R visitControl(IAssemblyNodeItem item, R childResult, T state) {
38 getIndexer(state).addControl(item);
39 return childResult;
40 }
41
42 @Override
43 protected R visitParameter(@NonNull IAssemblyNodeItem parameterItem,
44 @NonNull IAssemblyNodeItem catalogOrGroupOrControl, T state) {
45 getIndexer(state).addParameter(parameterItem);
46 return newDefaultResult(state);
47 }
48
49 @Override
50 protected void visitPart(@NonNull IAssemblyNodeItem partItem,
51 @NonNull IAssemblyNodeItem catalogOrGroupOrControl, T state) {
52 getIndexer(state).addPart(partItem);
53 }
54
55 @Override
56 protected void visitRole(IAssemblyNodeItem roleItem, IAssemblyNodeItem metadataItem, T state) {
57 getIndexer(state).addRole(roleItem);
58 }
59
60 @Override
61 protected void visitLocation(IAssemblyNodeItem locationItem, IAssemblyNodeItem metadataItem,
62 T state) {
63 getIndexer(state).addLocation(locationItem);
64 }
65
66 @Override
67 protected void visitParty(IAssemblyNodeItem partyItem, IAssemblyNodeItem metadataItem, T state) {
68 getIndexer(state).addParty(partyItem);
69 }
70
71 @Override
72 protected void visitResource(IAssemblyNodeItem resourceItem, IRootAssemblyNodeItem rootItem, T state) {
73 getIndexer(state).addResource(resourceItem);
74 }
75 }