Skip to content

Commit 0ccf689

Browse files
author
Damian Rychter
committed
Adding Search project by project code
1 parent 1b8f06f commit 0ccf689

File tree

5 files changed

+89
-23
lines changed

5 files changed

+89
-23
lines changed

amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/ActivityEPConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ public enum RequiredValidation {
7070
public static final String AMP_ACTIVITY_ID_FIELD_NAME =
7171
FieldMap.underscorify(ActivityFieldsConstants.AMP_ACTIVITY_ID);
7272
public static final String AMP_ID_FIELD_NAME = FieldMap.underscorify(ActivityFieldsConstants.AMP_ID);
73+
74+
public static final String PROJECT_CODE_FIELD_NAME = FieldMap.underscorify(ActivityFieldsConstants.PROJECT_CODE);
7375
public static final String MODIFIED_BY_FIELD_NAME =
7476
FieldMap.underscorify(ActivityFieldsConstants.MODIFIED_BY);
7577
public static final String VERSION_FIELD_NAME = FieldMap.underscorify(ActivityFieldsConstants.VERSION);

amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/ActivityInterchangeUtils.java

Lines changed: 51 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/activity/InterchangeEndpoints.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,30 @@ public Collection<Map<String, Object>> getProjectsByAmpIds(@ApiParam(value = "Li
366366
return ActivityInterchangeUtils.getActivitiesByAmpIds(ampIds);
367367
}
368368

369+
@POST
370+
@Path("/projects/budget-code-project")
371+
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
372+
@ApiMethod(authTypes = AuthRule.AUTHENTICATED, id = "getProjectsByAmpIds", ui = false)
373+
@ApiOperation("Retrieve activities by Budget code project Ids.")
374+
@ApiResponses(@ApiResponse(code = HttpServletResponse.SC_OK,
375+
message = "A list of projects with full set of configured fields and their values. For each amp_id that is "
376+
+ "invalid or its export failed, the entry will provide only the 'amp_id' and the 'error'",
377+
examples =
378+
@Example(value = {
379+
@ExampleProperty(
380+
mediaType = "application/json;charset=utf-8",
381+
value = "[\n {\n \"internal_id\": 912,\n \"amp_id\": \"872329912\",\n ...\n }"
382+
+ ",\n "
383+
+ "{\n \"amp_id\": \"invalid\",\n \"error\": {\n \"0132\": "
384+
+ "[{ \"Activity not found\": null }]\n }\n }\n]\n"
385+
)
386+
})
387+
))
388+
public Collection<Map<String, Object>> getProjectsByProjectCodeIds(@ApiParam(value = "List of project-code", required = true)
389+
List<String> budgetCodeProjectIds) {
390+
return ActivityInterchangeUtils.getActivitiesByBudgetCodeProjectIds(budgetCodeProjectIds);
391+
}
392+
369393
@POST
370394
@Path("/")
371395
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")

amp/WEB-INF/src/org/digijava/kernel/ampapi/endpoints/integration/service/DagServiceImpl.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,13 @@
66
import org.digijava.kernel.ampapi.endpoints.integration.dto.DagRunsResponseDTO;
77
import org.digijava.kernel.ampapi.endpoints.util.ObjectMapperUtils;
88
import org.digijava.kernel.restclient.RestClient;
9-
import org.digijava.kernel.user.User;
10-
import org.digijava.kernel.util.UserUtils;
119
import org.digijava.module.aim.helper.GlobalSettingsConstants;
12-
import org.digijava.module.aim.helper.TeamMember;
1310
import org.digijava.module.aim.util.FeaturesUtil;
14-
import org.digijava.module.aim.util.TeamMemberUtil;
1511
import org.slf4j.Logger;
1612
import org.slf4j.LoggerFactory;
1713
import org.springframework.http.HttpEntity;
1814
import org.springframework.http.HttpHeaders;
1915
import org.springframework.http.HttpStatus;
20-
import org.springframework.security.core.Authentication;
21-
import org.springframework.security.core.context.SecurityContextHolder;
2216
import org.springframework.stereotype.Component;
2317

2418
import java.nio.charset.StandardCharsets;
@@ -54,7 +48,6 @@ public static DagServiceImpl getInstance(){
5448
return dagService;
5549
}
5650

57-
// @Value("${airflow.api.url}")
5851
private String endpointUrl =FeaturesUtil.getGlobalSettingValue(GlobalSettingsConstants.INTEGRATION_AIRFLOW_URL);
5952
private String airflowUsername = FeaturesUtil.getGlobalSettingValue(GlobalSettingsConstants.INTEGRATION_AIRFLOW_USERNAME);
6053
private String airflowUserPassword = FeaturesUtil.getGlobalSettingValue(GlobalSettingsConstants.INTEGRATION_AIRFLOW_PASSWORD);
@@ -88,7 +81,9 @@ public DagRunsResponseDTO dagRuns(DagRunsRequestDTO dagRunsRequest) {
8881
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(payload, headers);
8982

9083
RestClient client = RestClient.getInstance(RestClient.Type.JSON);
91-
ClientResponse response = client.requestPOST(endpointUrl + dagRunsUrl.replace("#template", dagRunsRequest.getDagId()), requestEntity);
84+
String airflowUrl = endpointUrl + dagRunsUrl.replace("#template", dagRunsRequest.getDagId());
85+
LOGGER.info("Airflow url {}", airflowUrl);
86+
ClientResponse response = client.requestPOST(airflowUrl, requestEntity);
9287
if (response.getStatus() == HttpStatus.OK.value()) {
9388
return ObjectMapperUtils.readValueFromString(response.getEntity(String.class), DagRunsResponseDTO.class);
9489
} else {

amp/WEB-INF/src/org/digijava/module/aim/util/ActivityUtil.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,15 @@ public static List<AmpActivityVersion> getActivitiesByAmpIds(List<String> ampIds
537537
.list();
538538
}
539539

540+
public static List<AmpActivityVersion> getActivitiesByBudgetCodeProject(List<String> projectCodeIds) {
541+
String queryString = "select a from "
542+
+ AmpActivity.class.getName()
543+
+ " a where a.budgetCodeProjectID in (:budgetCodeProjectIds) ";
544+
return PersistenceManager.getSession().createQuery(queryString)
545+
.setParameterList("budgetCodeProjectIds", projectCodeIds)
546+
.list();
547+
}
548+
540549
public static AmpActivityVersion loadAmpActivity(Long id){
541550
return (AmpActivityVersion) PersistenceManager.getSession().load(AmpActivityVersion.class, id);
542551
}

0 commit comments

Comments
 (0)