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