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}