use of org.hisp.dhis.android.core.program.ProgramCall in project dhis2-android-sdk by dhis2.
the class MetadataCall method call.
@SuppressWarnings("PMD.NPathComplexity")
@Override
public Response call() throws Exception {
synchronized (this) {
if (isExecuted) {
throw new IllegalStateException("Already executed");
}
isExecuted = true;
}
Response response = null;
Transaction transaction = databaseAdapter.beginNewTransaction();
try {
response = new SystemInfoCall(databaseAdapter, systemInfoStore, systemInfoService, resourceStore).call();
if (!response.isSuccessful()) {
return response;
}
GenericCallData data = GenericCallData.create(databaseAdapter, new ResourceHandler(resourceStore), retrofit);
Response<User> userResponse = new UserCall(userService, databaseAdapter, userStore, userCredentialsStore, userRoleStore, resourceStore, data.serverDate()).call();
response = userResponse;
if (!response.isSuccessful()) {
return response;
}
response = downloadCategories(data.serverDate());
if (!response.isSuccessful()) {
return response;
}
response = downloadCategoryCombos(data.serverDate());
if (!response.isSuccessful()) {
return response;
}
Response<Payload<Program>> programAccessResponse = ProgramAccessEndpointCall.FACTORY.create(data, programService).call();
response = programAccessResponse;
if (!response.isSuccessful()) {
return response;
}
Set<String> programUids = getProgramUidsWithDataReadAccess(programAccessResponse.body().items());
response = new ProgramCall(programService, databaseAdapter, resourceStore, programUids, programStore, data.serverDate(), trackedEntityAttributeStore, programTrackedEntityAttributeStore, programRuleVariableStore, programIndicatorStore, programStageSectionProgramIndicatorLinkStore, programRuleActionStore, programRuleStore, relationshipStore, styleHandler, renderTypeHandler).call();
if (!response.isSuccessful()) {
return response;
}
List<Program> programs = ((Response<Payload<Program>>) response).body().items();
Set<String> assignedProgramStageUids = getAssignedProgramStageUids(programs);
Response programStageResponse = programStageCallFactory.create(data, assignedProgramStageUids).call();
if (!programStageResponse.isSuccessful()) {
return programStageResponse;
}
Set<String> trackedEntityUids = getAssignedTrackedEntityUids(programs);
response = new TrackedEntityCall(trackedEntityUids, databaseAdapter, trackedEntityStore, resourceStore, trackedEntityService, data.serverDate()).call();
if (!response.isSuccessful()) {
return response;
}
User user = userResponse.body();
Response<Payload<OrganisationUnit>> organisationUnitResponse = organisationUnitCallFactory.create(data, user, programUids).call();
if (!organisationUnitResponse.isSuccessful()) {
return organisationUnitResponse;
}
List<ProgramStage> programStages = ((Response<Payload<ProgramStage>>) programStageResponse).body().items();
Set<String> optionSetUids = getAssignedOptionSetUids(programs, programStages);
response = new OptionSetCall(data, optionSetService, optionSetHandler, optionSetUids).call();
if (!response.isSuccessful()) {
return response;
}
List<OrganisationUnit> organisationUnits = organisationUnitResponse.body().items();
response = dataSetParentCallFactory.create(user, data, organisationUnits).call();
if (!response.isSuccessful()) {
return response;
}
transaction.setSuccessful();
return response;
} finally {
transaction.end();
}
}
Aggregations