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