001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package gov.nist.secauto.oscal.lib.profile.resolver.support;
007
008import edu.umd.cs.findbugs.annotations.NonNull;
009
010public interface IIdentifierMapper {
011  @NonNull
012  IIdentifierMapper IDENTITY = new IIdentifierMapper() {
013
014    @Override
015    public String mapRoleIdentifier(@NonNull String identifier) {
016      return identifier;
017    }
018
019    @Override
020    public String mapControlIdentifier(@NonNull String identifier) {
021      return identifier;
022    }
023
024    @Override
025    public String mapGroupIdentifier(@NonNull String identifier) {
026      return identifier;
027    }
028
029    @Override
030    public String mapParameterIdentifier(@NonNull String identifier) {
031      return identifier;
032    }
033
034    @Override
035    public @NonNull String mapPartIdentifier(@NonNull String identifier) {
036      return identifier;
037    }
038  };
039
040  @NonNull
041  String mapRoleIdentifier(@NonNull String identifier);
042
043  @NonNull
044  String mapControlIdentifier(@NonNull String identifier);
045
046  @NonNull
047  String mapGroupIdentifier(@NonNull String identifier);
048
049  @NonNull
050  String mapParameterIdentifier(@NonNull String identifier);
051
052  @NonNull
053  String mapPartIdentifier(@NonNull String identifier);
054
055  @NonNull
056  default String mapByItemType(
057      @NonNull IEntityItem.ItemType itemType,
058      @NonNull String identifier) {
059    String retval;
060    switch (itemType) {
061    case CONTROL:
062      retval = mapControlIdentifier(identifier);
063      break;
064    case GROUP:
065      retval = mapGroupIdentifier(identifier);
066      break;
067    case PARAMETER:
068      retval = mapParameterIdentifier(identifier);
069      break;
070    case PART:
071      retval = mapPartIdentifier(identifier);
072      break;
073    case ROLE:
074      retval = mapRoleIdentifier(identifier);
075      break;
076    case LOCATION:
077    case PARTY:
078    case RESOURCE:
079      retval = identifier;
080      break;
081    default:
082      throw new UnsupportedOperationException("Unsupported item type: " + itemType.name());
083    }
084    return retval;
085  }
086}