1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.oscal.lib.profile.resolver.support;
7   
8   import edu.umd.cs.findbugs.annotations.NonNull;
9   
10  public interface IIdentifierMapper {
11    @NonNull
12    IIdentifierMapper IDENTITY = new IIdentifierMapper() {
13  
14      @Override
15      public String mapRoleIdentifier(@NonNull String identifier) {
16        return identifier;
17      }
18  
19      @Override
20      public String mapControlIdentifier(@NonNull String identifier) {
21        return identifier;
22      }
23  
24      @Override
25      public String mapGroupIdentifier(@NonNull String identifier) {
26        return identifier;
27      }
28  
29      @Override
30      public String mapParameterIdentifier(@NonNull String identifier) {
31        return identifier;
32      }
33  
34      @Override
35      public @NonNull String mapPartIdentifier(@NonNull String identifier) {
36        return identifier;
37      }
38    };
39  
40    @NonNull
41    String mapRoleIdentifier(@NonNull String identifier);
42  
43    @NonNull
44    String mapControlIdentifier(@NonNull String identifier);
45  
46    @NonNull
47    String mapGroupIdentifier(@NonNull String identifier);
48  
49    @NonNull
50    String mapParameterIdentifier(@NonNull String identifier);
51  
52    @NonNull
53    String mapPartIdentifier(@NonNull String identifier);
54  
55    @NonNull
56    default String mapByItemType(
57        @NonNull IEntityItem.ItemType itemType,
58        @NonNull String identifier) {
59      String retval;
60      switch (itemType) {
61      case CONTROL:
62        retval = mapControlIdentifier(identifier);
63        break;
64      case GROUP:
65        retval = mapGroupIdentifier(identifier);
66        break;
67      case PARAMETER:
68        retval = mapParameterIdentifier(identifier);
69        break;
70      case PART:
71        retval = mapPartIdentifier(identifier);
72        break;
73      case ROLE:
74        retval = mapRoleIdentifier(identifier);
75        break;
76      case LOCATION:
77      case PARTY:
78      case RESOURCE:
79        retval = identifier;
80        break;
81      default:
82        throw new UnsupportedOperationException("Unsupported item type: " + itemType.name());
83      }
84      return retval;
85    }
86  }