001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package dev.metaschema.oscal.lib.profile.resolver.support;
007
008import dev.metaschema.core.metapath.item.node.IModelNodeItem;
009import dev.metaschema.oscal.lib.profile.resolver.support.IEntityItem.ItemType;
010import edu.umd.cs.findbugs.annotations.NonNull;
011
012public class ReassignmentIndexer
013    extends BasicIndexer {
014  @NonNull
015  private final IIdentifierMapper mapper;
016
017  public ReassignmentIndexer(@NonNull IIdentifierMapper mapper) {
018    this.mapper = mapper;
019  }
020
021  @NonNull
022  protected IIdentifierMapper getMapper() {
023    return mapper;
024  }
025
026  @Override
027  protected AbstractEntityItem.Builder newBuilder(
028      IModelNodeItem<?, ?> item,
029      ItemType itemType,
030      String identifier) {
031    AbstractEntityItem.Builder builder = super.newBuilder(item, itemType, identifier);
032
033    String reassignment = getMapper().mapByItemType(itemType, identifier);
034    if (!identifier.equals(reassignment)) {
035      builder.reassignedIdentifier(reassignment);
036    }
037    return builder;
038  }
039
040  @Override
041  public IEntityItem getEntity(ItemType itemType, String identifier, boolean normalize) {
042    // reassign the identifier
043    String reassignment = getMapper().mapByItemType(itemType, identifier);
044    // lookup using the reassigned identifier
045    return super.getEntity(itemType, reassignment, normalize);
046  }
047}