1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.oscal.lib.profile.resolver.support;
7   
8   import dev.metaschema.core.metapath.item.node.IModelNodeItem;
9   import dev.metaschema.oscal.lib.profile.resolver.support.IEntityItem.ItemType;
10  import edu.umd.cs.findbugs.annotations.NonNull;
11  
12  public class ReassignmentIndexer
13      extends BasicIndexer {
14    @NonNull
15    private final IIdentifierMapper mapper;
16  
17    public ReassignmentIndexer(@NonNull IIdentifierMapper mapper) {
18      this.mapper = mapper;
19    }
20  
21    @NonNull
22    protected IIdentifierMapper getMapper() {
23      return mapper;
24    }
25  
26    @Override
27    protected AbstractEntityItem.Builder newBuilder(
28        IModelNodeItem<?, ?> item,
29        ItemType itemType,
30        String identifier) {
31      AbstractEntityItem.Builder builder = super.newBuilder(item, itemType, identifier);
32  
33      String reassignment = getMapper().mapByItemType(itemType, identifier);
34      if (!identifier.equals(reassignment)) {
35        builder.reassignedIdentifier(reassignment);
36      }
37      return builder;
38    }
39  
40    @Override
41    public IEntityItem getEntity(ItemType itemType, String identifier, boolean normalize) {
42      // reassign the identifier
43      String reassignment = getMapper().mapByItemType(itemType, identifier);
44      // lookup using the reassigned identifier
45      return super.getEntity(itemType, reassignment, normalize);
46    }
47  }