IIdentifierMapper.java

/*
 * SPDX-FileCopyrightText: none
 * SPDX-License-Identifier: CC0-1.0
 */

package gov.nist.secauto.oscal.lib.profile.resolver.support;

import edu.umd.cs.findbugs.annotations.NonNull;

public interface IIdentifierMapper {
  @NonNull
  IIdentifierMapper IDENTITY = new IIdentifierMapper() {

    @Override
    public String mapRoleIdentifier(@NonNull String identifier) {
      return identifier;
    }

    @Override
    public String mapControlIdentifier(@NonNull String identifier) {
      return identifier;
    }

    @Override
    public String mapGroupIdentifier(@NonNull String identifier) {
      return identifier;
    }

    @Override
    public String mapParameterIdentifier(@NonNull String identifier) {
      return identifier;
    }

    @Override
    public @NonNull String mapPartIdentifier(@NonNull String identifier) {
      return identifier;
    }
  };

  @NonNull
  String mapRoleIdentifier(@NonNull String identifier);

  @NonNull
  String mapControlIdentifier(@NonNull String identifier);

  @NonNull
  String mapGroupIdentifier(@NonNull String identifier);

  @NonNull
  String mapParameterIdentifier(@NonNull String identifier);

  @NonNull
  String mapPartIdentifier(@NonNull String identifier);

  @NonNull
  default String mapByItemType(
      @NonNull IEntityItem.ItemType itemType,
      @NonNull String identifier) {
    String retval;
    switch (itemType) {
    case CONTROL:
      retval = mapControlIdentifier(identifier);
      break;
    case GROUP:
      retval = mapGroupIdentifier(identifier);
      break;
    case PARAMETER:
      retval = mapParameterIdentifier(identifier);
      break;
    case PART:
      retval = mapPartIdentifier(identifier);
      break;
    case ROLE:
      retval = mapRoleIdentifier(identifier);
      break;
    case LOCATION:
    case PARTY:
    case RESOURCE:
      retval = identifier;
      break;
    default:
      throw new UnsupportedOperationException("Unsupported item type: " + itemType.name());
    }
    return retval;
  }
}