ReassignmentIndexer.java
/*
* SPDX-FileCopyrightText: none
* SPDX-License-Identifier: CC0-1.0
*/
package gov.nist.secauto.oscal.lib.profile.resolver.support;
import gov.nist.secauto.metaschema.core.metapath.item.node.IModelNodeItem;
import gov.nist.secauto.oscal.lib.profile.resolver.support.IEntityItem.ItemType;
import edu.umd.cs.findbugs.annotations.NonNull;
public class ReassignmentIndexer
extends BasicIndexer {
@NonNull
private final IIdentifierMapper mapper;
public ReassignmentIndexer(@NonNull IIdentifierMapper mapper) {
this.mapper = mapper;
}
@NonNull
protected IIdentifierMapper getMapper() {
return mapper;
}
@Override
protected AbstractEntityItem.Builder newBuilder(
IModelNodeItem<?, ?> item,
ItemType itemType,
String identifier) {
AbstractEntityItem.Builder builder = super.newBuilder(item, itemType, identifier);
String reassignment = getMapper().mapByItemType(itemType, identifier);
if (!identifier.equals(reassignment)) {
builder.reassignedIdentifier(reassignment);
}
return builder;
}
@Override
public IEntityItem getEntity(ItemType itemType, String identifier, boolean normalize) {
// reassign the identifier
String reassignment = getMapper().mapByItemType(itemType, identifier);
// lookup using the reassigned identifier
return super.getEntity(itemType, reassignment, normalize);
}
}