@@ -226,25 +226,32 @@ public static boolean canViewActivityIfCreatedInPrivateWs(ContainerRequest conta
226226 getAmpTeamId ())));
227227 }
228228
229- /**
230- * Batch export of activities by amp-ids
231- * @param ampIds
232- * @return
233- */
234- public static Collection <Map <String , Object >> getActivitiesByAmpIds (List <String > ampIds ) {
229+
230+ public static Collection <Map <String , Object >> getActivitiesByIds (List <String > ids , ActivityFilterIdEnum discriminator ) {
235231 Map <String , Map <String , Object >> jsonActivities = new HashMap <>();
236232 ActivityExporter exporter = new ActivityExporter (null );
237233 // TODO report duplicate/empty amp-ids?
238- Set <String > uniqueAmpIds = new HashSet (ampIds );
234+ Set <String > uniqueAmpIds = new HashSet (ids );
239235 uniqueAmpIds .remove ("" );
240- ampIds = new ArrayList <>(uniqueAmpIds );
236+ ids = new ArrayList <>(uniqueAmpIds );
241237 // temporary until the root cause for stale cache is fixed
242238 PersistenceManager .getSession ().setCacheMode (CacheMode .REFRESH );
243239
244- for (int fromIndex = 0 ; fromIndex < ampIds .size (); fromIndex += ActivityEPConstants .BATCH_DB_QUERY_SIZE ) {
245- int end = Math .min (ampIds .size (), fromIndex + ActivityEPConstants .BATCH_DB_QUERY_SIZE );
246- List <String > currentAmpIds = ampIds .subList (fromIndex , end );
247- List <AmpActivityVersion > activities = ActivityUtil .getActivitiesByAmpIds (currentAmpIds );
240+ for (int fromIndex = 0 ; fromIndex < ids .size (); fromIndex += ActivityEPConstants .BATCH_DB_QUERY_SIZE ) {
241+ int end = Math .min (ids .size (), fromIndex + ActivityEPConstants .BATCH_DB_QUERY_SIZE );
242+ List <String > currentAmpIds = ids .subList (fromIndex , end );
243+ List <AmpActivityVersion > activities = new ArrayList <>();
244+ switch (discriminator ){
245+ case AMP_ID : {
246+ activities = ActivityUtil .getActivitiesByAmpIds (currentAmpIds );
247+ break ;
248+ }
249+ case BUDGET_CODE_PROJECT : {
250+ activities = ActivityUtil .getActivitiesByBudgetCodeProject (currentAmpIds );
251+ break ;
252+ }
253+ }
254+
248255 activities .forEach (activity -> {
249256 String ampId = activity .getAmpId ();
250257 Map <String , Object > result = new LinkedHashMap <>();
@@ -271,20 +278,44 @@ public static Collection<Map<String, Object>> getActivitiesByAmpIds(List<String>
271278 });
272279 PersistenceManager .getSession ().clear ();
273280 }
274- reportActivitiesNotFound (uniqueAmpIds , jsonActivities );
281+ reportActivitiesNotFound (uniqueAmpIds , jsonActivities , discriminator );
275282 // Always succeed on normal exit, no matter if some activities export failed
276283 EndpointUtils .setResponseStatusMarker (HttpServletResponse .SC_OK );
277284 return jsonActivities .values ();
278285 }
279286
287+ /**
288+ * Batch export of activities by amp-ids
289+ * @param ampIds
290+ * @return
291+ */
292+ public static Collection <Map <String , Object >> getActivitiesByAmpIds (List <String > ampIds ) {
293+ return getActivitiesByIds (ampIds , ActivityFilterIdEnum .AMP_ID );
294+ }
295+
296+ public static Collection <Map <String , Object >> getActivitiesByBudgetCodeProjectIds (List <String > projectCodeIds ) {
297+ return getActivitiesByIds (projectCodeIds , ActivityFilterIdEnum .BUDGET_CODE_PROJECT );
298+ }
299+
280300 private static void reportActivitiesNotFound (Set <String > ampIds ,
281- Map <String , Map <String , Object >> processedActivities ) {
301+ Map <String , Map <String , Object >> processedActivities ,
302+ ActivityFilterIdEnum discriminator ) {
282303 if (processedActivities .size () != ampIds .size ()) {
283304 ampIds .removeAll (processedActivities .keySet ());
284305 ampIds .forEach (ampId -> {
285306 Map <String , Object > notFoundJson = new LinkedHashMap <>();
286307 notFoundJson .put (EPConstants .ERROR , ApiError .toError (ActivityErrors .ACTIVITY_NOT_FOUND ).getErrors ());
287- notFoundJson .put (ActivityEPConstants .AMP_ID_FIELD_NAME , ampId );
308+ switch (discriminator ){
309+ case AMP_ID : {
310+ notFoundJson .put (ActivityEPConstants .AMP_ID_FIELD_NAME , ampId );
311+ break ;
312+ }
313+ case BUDGET_CODE_PROJECT : {
314+ notFoundJson .put (ActivityEPConstants .PROJECT_CODE_FIELD_NAME , ampId );
315+ break ;
316+ }
317+ }
318+
288319 processedActivities .put (ampId , notFoundJson );
289320 });
290321 }
@@ -416,4 +447,9 @@ public static Double doPPCCalculations(AmpAnnualProjectBudget apb, String toCurr
416447
417448 return calculatedAmount .doubleValue ();
418449 }
450+
451+ public enum ActivityFilterIdEnum {
452+ AMP_ID , BUDGET_CODE_PROJECT
453+ }
454+
419455}
0 commit comments