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
036    String mapPartIdentifier(@NonNull String identifier) {
037      return identifier;
038    }
039  };
040
041  @NonNull
042  String mapRoleIdentifier(@NonNull String identifier);
043
044  @NonNull
045  String mapControlIdentifier(@NonNull String identifier);
046
047  @NonNull
048  String mapGroupIdentifier(@NonNull String identifier);
049
050  @NonNull
051  String mapParameterIdentifier(@NonNull String identifier);
052
053  @NonNull
054  String mapPartIdentifier(@NonNull String identifier);
055
056  @NonNull
057  default String mapByItemType(
058      @NonNull IEntityItem.ItemType itemType,
059      @NonNull String identifier) {
060    String retval;
061    switch (itemType) {
062    case CONTROL:
063      retval = mapControlIdentifier(identifier);
064      break;
065    case GROUP:
066      retval = mapGroupIdentifier(identifier);
067      break;
068    case PARAMETER:
069      retval = mapParameterIdentifier(identifier);
070      break;
071    case PART:
072      retval = mapPartIdentifier(identifier);
073      break;
074    case ROLE:
075      retval = mapRoleIdentifier(identifier);
076      break;
077    case LOCATION:
078    case PARTY:
079    case RESOURCE:
080      retval = identifier;
081      break;
082    default:
083      throw new UnsupportedOperationException("Unsupported item type: " + itemType.name());
084    }
085    return retval;
086  }
087}