use of org.hisp.dhis.dxf2.events.trackedentity.Relationship in project dhis2-core by dhis2.
the class AbstractRelationshipService method createDAORelationship.
private org.hisp.dhis.relationship.Relationship createDAORelationship(Relationship relationship) {
RelationshipType relationshipType = relationshipTypeCache.get(relationship.getRelationshipType());
org.hisp.dhis.relationship.Relationship daoRelationship = new org.hisp.dhis.relationship.Relationship();
RelationshipItem fromItem = null;
RelationshipItem toItem = null;
daoRelationship.setRelationshipType(relationshipType);
if (relationship.getRelationship() != null) {
daoRelationship.setUid(relationship.getRelationship());
}
// FROM
if (relationshipType.getFromConstraint().getRelationshipEntity().equals(TRACKED_ENTITY_INSTANCE)) {
fromItem = new RelationshipItem();
fromItem.setTrackedEntityInstance(trackedEntityInstanceCache.get(getUidOfRelationshipItem(relationship.getFrom())));
} else if (relationshipType.getFromConstraint().getRelationshipEntity().equals(PROGRAM_INSTANCE)) {
fromItem = new RelationshipItem();
fromItem.setProgramInstance(programInstanceCache.get(getUidOfRelationshipItem(relationship.getFrom())));
} else if (relationshipType.getFromConstraint().getRelationshipEntity().equals(PROGRAM_STAGE_INSTANCE)) {
fromItem = new RelationshipItem();
fromItem.setProgramStageInstance(programStageInstanceCache.get(getUidOfRelationshipItem(relationship.getFrom())));
}
// TO
if (relationshipType.getToConstraint().getRelationshipEntity().equals(TRACKED_ENTITY_INSTANCE)) {
toItem = new RelationshipItem();
toItem.setTrackedEntityInstance(trackedEntityInstanceCache.get(getUidOfRelationshipItem(relationship.getTo())));
} else if (relationshipType.getToConstraint().getRelationshipEntity().equals(PROGRAM_INSTANCE)) {
toItem = new RelationshipItem();
toItem.setProgramInstance(programInstanceCache.get(getUidOfRelationshipItem(relationship.getTo())));
} else if (relationshipType.getToConstraint().getRelationshipEntity().equals(PROGRAM_STAGE_INSTANCE)) {
toItem = new RelationshipItem();
toItem.setProgramStageInstance(programStageInstanceCache.get(getUidOfRelationshipItem(relationship.getTo())));
}
daoRelationship.setFrom(fromItem);
daoRelationship.setTo(toItem);
daoRelationship.setKey(RelationshipUtils.generateRelationshipKey(daoRelationship));
daoRelationship.setInvertedKey(RelationshipUtils.generateRelationshipInvertedKey(daoRelationship));
return daoRelationship;
}
use of org.hisp.dhis.dxf2.events.trackedentity.Relationship in project dhis2-core by dhis2.
the class AbstractRelationshipService method prepareCaches.
private void prepareCaches(List<Relationship> relationships, User user) {
Map<RelationshipEntity, List<String>> relationshipEntities = new HashMap<>();
Map<String, List<Relationship>> relationshipTypeMap = relationships.stream().collect(Collectors.groupingBy(Relationship::getRelationshipType));
// Find all the RelationshipTypes first, so we know what the uids refer
// to
Query query = Query.from(schemaService.getDynamicSchema(RelationshipType.class));
query.setUser(user);
query.add(Restrictions.in("id", relationshipTypeMap.keySet()));
queryService.query(query).forEach(rt -> relationshipTypeCache.put(rt.getUid(), (RelationshipType) rt));
// Group all uids into their respective RelationshipEntities
relationshipTypeCache.values().forEach(relationshipType -> {
List<String> fromUids = relationshipTypeMap.get(relationshipType.getUid()).stream().map((r) -> getUidOfRelationshipItem(r.getFrom())).collect(Collectors.toList());
List<String> toUids = relationshipTypeMap.get(relationshipType.getUid()).stream().map((r) -> getUidOfRelationshipItem(r.getTo())).collect(Collectors.toList());
// Merge existing results with newly found ones.
relationshipEntities.merge(relationshipType.getFromConstraint().getRelationshipEntity(), fromUids, (old, _new) -> ListUtils.union(old, _new));
relationshipEntities.merge(relationshipType.getToConstraint().getRelationshipEntity(), toUids, (old, _new) -> ListUtils.union(old, _new));
});
// Find and put all Relationship members in their respective cache
if (relationshipEntities.get(TRACKED_ENTITY_INSTANCE) != null) {
teiDaoService.getTrackedEntityInstancesByUid(relationshipEntities.get(TRACKED_ENTITY_INSTANCE), user).forEach(tei -> trackedEntityInstanceCache.put(tei.getUid(), tei));
}
if (relationshipEntities.get(PROGRAM_INSTANCE) != null) {
Query piQuery = Query.from(schemaService.getDynamicSchema(ProgramInstance.class));
piQuery.setUser(user);
piQuery.add(Restrictions.in("id", relationshipEntities.get(PROGRAM_INSTANCE)));
queryService.query(piQuery).forEach(pi -> programInstanceCache.put(pi.getUid(), (ProgramInstance) pi));
}
if (relationshipEntities.get(PROGRAM_STAGE_INSTANCE) != null) {
Query psiQuery = Query.from(schemaService.getDynamicSchema(ProgramStageInstance.class));
psiQuery.setUser(user);
psiQuery.add(Restrictions.in("id", relationshipEntities.get(PROGRAM_STAGE_INSTANCE)));
queryService.query(psiQuery).forEach(psi -> programStageInstanceCache.put(psi.getUid(), (ProgramStageInstance) psi));
}
}
use of org.hisp.dhis.dxf2.events.trackedentity.Relationship in project dhis2-core by dhis2.
the class AbstractRelationshipService method addRelationships.
@Override
@Transactional
public ImportSummaries addRelationships(List<Relationship> relationships, ImportOptions importOptions) {
List<List<Relationship>> partitions = Lists.partition(relationships, FLUSH_FREQUENCY);
importOptions = updateImportOptions(importOptions);
ImportSummaries importSummaries = new ImportSummaries();
for (List<Relationship> _relationships : partitions) {
reloadUser(importOptions);
prepareCaches(_relationships, importOptions.getUser());
for (Relationship relationship : _relationships) {
importSummaries.addImportSummary(addRelationship(relationship, importOptions));
}
clearSession();
}
return importSummaries;
}
use of org.hisp.dhis.dxf2.events.trackedentity.Relationship in project dhis2-core by dhis2.
the class AbstractRelationshipService method deleteRelationships.
@Override
@Transactional
public ImportSummaries deleteRelationships(List<Relationship> relationships, ImportOptions importOptions) {
ImportSummaries importSummaries = new ImportSummaries();
importOptions = updateImportOptions(importOptions);
int counter = 0;
for (Relationship relationship : relationships) {
importSummaries.addImportSummary(deleteRelationship(relationship.getRelationship(), importOptions));
if (counter % FLUSH_FREQUENCY == 0) {
clearSession();
}
counter++;
}
return importSummaries;
}
use of org.hisp.dhis.dxf2.events.trackedentity.Relationship in project dhis2-core by dhis2.
the class AbstractRelationshipService method processRelationshipList.
@Override
@Transactional
public ImportSummaries processRelationshipList(List<Relationship> relationships, ImportOptions importOptions) {
ImportSummaries importSummaries = new ImportSummaries();
importOptions = updateImportOptions(importOptions);
List<Relationship> create = new ArrayList<>();
List<Relationship> update = new ArrayList<>();
List<Relationship> delete = new ArrayList<>();
if (importOptions.getImportStrategy().isCreate()) {
create.addAll(relationships);
} else if (importOptions.getImportStrategy().isCreateAndUpdate()) {
for (Relationship relationship : relationships) {
sortCreatesAndUpdates(relationship, create, update);
}
} else if (importOptions.getImportStrategy().isUpdate()) {
update.addAll(relationships);
} else if (importOptions.getImportStrategy().isDelete()) {
delete.addAll(relationships);
} else if (importOptions.getImportStrategy().isSync()) {
for (Relationship relationship : relationships) {
sortCreatesAndUpdates(relationship, create, update);
}
}
importSummaries.addImportSummaries(addRelationships(create, importOptions));
importSummaries.addImportSummaries(updateRelationships(update, importOptions));
importSummaries.addImportSummaries(deleteRelationships(delete, importOptions));
if (ImportReportMode.ERRORS == importOptions.getReportMode()) {
importSummaries.getImportSummaries().removeIf(is -> !is.hasConflicts());
}
return importSummaries;
}
Aggregations