33import com .google .gson .JsonObject ;
44import com .skyflow .enums .Env ;
55import com .skyflow .generated .rest .core .ApiClientApiException ;
6+ import com .skyflow .generated .rest .resources .recordservice .requests .DetokenizeRequest ;
67import com .skyflow .generated .rest .types .InsertRecordData ;
78import com .skyflow .generated .rest .types .InsertResponse ;
89import com .skyflow .generated .rest .types .RecordResponseObject ;
10+ import com .skyflow .generated .rest .types .TokenGroupRedactions ;
11+ import com .skyflow .vault .data .DetokenizeResponse ;
912import com .skyflow .vault .data .ErrorRecord ;
1013import com .skyflow .vault .data .Success ;
1114import com .skyflow .vault .data .Token ;
@@ -36,6 +39,29 @@ public static List<List<InsertRecordData>> createBatches(List<InsertRecordData>
3639 return batches ;
3740 }
3841
42+ public static List <DetokenizeRequest > createDetokenizeBatches (DetokenizeRequest request , int batchSize ) {
43+ List <DetokenizeRequest > detokenizeRequests = new ArrayList <>();
44+ List <String > tokens = request .getTokens ().get ();
45+
46+ for (int i = 0 ; i < tokens .size (); i += batchSize ) {
47+ // Create a sublist for the current batch
48+ List <String > batchTokens = tokens .subList (i , Math .min (i + batchSize , tokens .size ()));
49+ List <TokenGroupRedactions > tokenGroupRedactions = null ;
50+ if (request .getTokenGroupRedactions ().isPresent () && !request .getTokenGroupRedactions ().get ().isEmpty () && i < request .getTokenGroupRedactions ().get ().size ()) {
51+ tokenGroupRedactions = request .getTokenGroupRedactions ().get ().subList (i , Math .min (i + batchSize , request .getTokenGroupRedactions ().get ().size ())); }
52+ // Build a new DetokenizeRequest for the current batch
53+ DetokenizeRequest batchRequest = DetokenizeRequest .builder ()
54+ .vaultId (request .getVaultId ())
55+ .tokens (new ArrayList <>(batchTokens ))
56+ .tokenGroupRedactions (tokenGroupRedactions )
57+ .build ();
58+
59+ detokenizeRequests .add (batchRequest );
60+ }
61+
62+ return detokenizeRequests ;
63+ }
64+
3965 public static ErrorRecord createErrorRecord (Map <String , Object > recordMap , int indexNumber ) {
4066 ErrorRecord err = null ;
4167 if (recordMap != null ) {
@@ -48,7 +74,7 @@ public static ErrorRecord createErrorRecord(Map<String, Object> recordMap, int i
4874 }
4975
5076 public static List <ErrorRecord > handleBatchException (
51- Throwable ex , List <InsertRecordData > batch , int batchNumber , List < List < InsertRecordData >> batches
77+ Throwable ex , List <InsertRecordData > batch , int batchNumber
5278 ) {
5379 List <ErrorRecord > errorRecords = new ArrayList <>();
5480 Throwable cause = ex .getCause ();
@@ -90,6 +116,72 @@ public static List<ErrorRecord> handleBatchException(
90116 return errorRecords ;
91117 }
92118
119+ public static List <ErrorRecord > handleDetokenizeBatchException (
120+ Throwable ex , DetokenizeRequest batch , int batchNumber , int batchSize
121+ ) {
122+ List <ErrorRecord > errorRecords = new ArrayList <>();
123+ Throwable cause = ex .getCause ();
124+ if (cause instanceof ApiClientApiException ) {
125+ ApiClientApiException apiException = (ApiClientApiException ) cause ;
126+ Map <String , Object > responseBody = (Map <String , Object >) apiException .body ();
127+ int indexNumber = batchNumber * batchSize ;
128+ if (responseBody != null ) {
129+ if (responseBody .containsKey ("records" )) {
130+ Object recordss = responseBody .get ("records" );
131+ if (recordss instanceof List ) {
132+ List <?> recordsList = (List <?>) recordss ;
133+ for (Object record : recordsList ) {
134+ if (record instanceof Map ) {
135+ Map <String , Object > recordMap = (Map <String , Object >) record ;
136+ ErrorRecord err = Utils .createErrorRecord (recordMap , indexNumber );
137+ errorRecords .add (err );
138+ indexNumber ++;
139+ }
140+ }
141+ }
142+ } else if (responseBody .containsKey ("error" )) {
143+ Map <String , Object > recordMap = (Map <String , Object >) responseBody .get ("error" );
144+ for (int j = 0 ; j < batch .getTokens ().get ().size (); j ++) {
145+ ErrorRecord err = Utils .createErrorRecord (recordMap , indexNumber );
146+ errorRecords .add (err );
147+ indexNumber ++;
148+ }
149+ }
150+ }
151+ } else {
152+ int indexNumber = batchNumber * batchSize ;
153+ for (int j = 0 ; j < batch .getTokens ().get ().size (); j ++) {
154+ ErrorRecord err = new ErrorRecord (indexNumber , ex .getMessage (), 500 );
155+ errorRecords .add (err );
156+ indexNumber ++;
157+ }
158+ }
159+ return errorRecords ;
160+ }
161+
162+ public static DetokenizeResponse formatDetokenizeResponse (com .skyflow .generated .rest .types .DetokenizeResponse response , int batch , int batchSize ) {
163+ if (response != null ) {
164+ List <com .skyflow .generated .rest .types .DetokenizeResponseObject > record = response .getResponse ().get ();
165+ List <ErrorRecord > errorRecords = new ArrayList <>();
166+ List <com .skyflow .vault .data .DetokenizeResponseObject > successRecords = new ArrayList <>();
167+ int indexNumber = batch * batchSize ;
168+ int recordsSize = response .getResponse ().get ().size ();
169+ for (int index = 0 ; index < recordsSize ; index ++) {
170+ if (record .get (index ).getError ().isPresent ()) {
171+ ErrorRecord errorRecord = new ErrorRecord (indexNumber , record .get (index ).getError ().get (), record .get (index ).getHttpCode ().get ());
172+ errorRecords .add (errorRecord );
173+ } else {
174+ com .skyflow .vault .data .DetokenizeResponseObject success = new com .skyflow .vault .data .DetokenizeResponseObject (indexNumber , record .get (index ).getToken ().orElse (null ), record .get (index ).getValue ().orElse (null ), record .get (index ).getTokenGroupName ().orElse (null ), record .get (index ).getError ().orElse (null ), record .get (index ).getMetadata ().orElse (null ));
175+ successRecords .add (success );
176+ }
177+ indexNumber ++;
178+ }
179+ DetokenizeResponse formattedResponse = new DetokenizeResponse (successRecords , errorRecords );
180+ return formattedResponse ;
181+ }
182+ return null ;
183+ }
184+
93185 public static com .skyflow .vault .data .InsertResponse formatResponse (InsertResponse response , int batch , int batchSize ) {
94186 com .skyflow .vault .data .InsertResponse formattedResponse = null ;
95187 List <Success > successRecords = new ArrayList <>();
0 commit comments