xref: /aosp_15_r20/external/aws-crt-java/src/main/java/software/amazon/awssdk/crt/s3/ChecksumAlgorithm.java (revision 3c7ae9de214676c52d19f01067dc1a404272dc11)
1 /**
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  * SPDX-License-Identifier: Apache-2.0.
4  */
5 package software.amazon.awssdk.crt.s3;
6 
7 import java.util.ArrayList;
8 import java.util.HashMap;
9 import java.util.Map;
10 import java.util.Optional;
11 import java.util.List;
12 
13 public enum ChecksumAlgorithm {
14 
15     NONE(0),
16 
17     CRC32C(1),
18 
19     CRC32(2),
20 
21     SHA1(3),
22 
23     SHA256(4);
24 
ChecksumAlgorithm(int nativeValue)25     ChecksumAlgorithm(int nativeValue) {
26         this.nativeValue = nativeValue;
27     }
28 
getNativeValue()29     public int getNativeValue() {
30         return nativeValue;
31     }
32 
getEnumValueFromInteger(int value)33     public static ChecksumAlgorithm getEnumValueFromInteger(int value) {
34         ChecksumAlgorithm enumValue = enumMapping.get(value);
35         if (enumValue != null) {
36             return enumValue;
37         }
38 
39         throw new RuntimeException("Invalid S3 Meta Request type");
40     }
41 
buildEnumMapping()42     private static Map<Integer, ChecksumAlgorithm> buildEnumMapping() {
43         Map<Integer, ChecksumAlgorithm> enumMapping = new HashMap<Integer, ChecksumAlgorithm>();
44         enumMapping.put(NONE.getNativeValue(), NONE);
45         enumMapping.put(CRC32C.getNativeValue(), CRC32C);
46         enumMapping.put(CRC32.getNativeValue(), CRC32);
47         enumMapping.put(SHA1.getNativeValue(), SHA1);
48         enumMapping.put(SHA256.getNativeValue(), SHA256);
49         return enumMapping;
50     }
51 
52     private int nativeValue;
53 
54     private static Map<Integer, ChecksumAlgorithm> enumMapping = buildEnumMapping();
55 
algorithmsListToIntArray(final List<ChecksumAlgorithm> algorithms)56     private static int[] algorithmsListToIntArray(final List<ChecksumAlgorithm> algorithms) {
57         ArrayList<Integer> intList = new ArrayList<>();
58         algorithms.forEach((algorithm) -> {
59             intList.add(algorithm.getNativeValue());
60         });
61         return intList.stream()
62                 .mapToInt(Integer::intValue)
63                 .toArray();
64     }
65 
66     /**
67      * @hidden Marshals a list of algorithm into an array for Jni to deal with
68      *
69      * @param algorithms list of algorithms
70      * @return a int[] that with the [algorithms.nativeValue, *]
71      */
marshallAlgorithmsForJNI(final List<ChecksumAlgorithm> algorithms)72     public static int[] marshallAlgorithmsForJNI(final List<ChecksumAlgorithm> algorithms) {
73         return Optional.ofNullable(algorithms).map(ChecksumAlgorithm::algorithmsListToIntArray).orElse(null);
74     }
75 
76 }
77