use of org.hisp.dhis.common.IdSchemes in project dhis2-core by dhis2.
the class JdbcEventStore method getEvents.
// -------------------------------------------------------------------------
// EventStore implementation
// -------------------------------------------------------------------------
@Override
public List<Event> getEvents(EventSearchParams params, List<OrganisationUnit> organisationUnits, Map<String, Set<String>> psdesWithSkipSyncTrue) {
User user = currentUserService.getCurrentUser();
setAccessiblePrograms(user, params);
Map<String, Event> eventUidToEventMap = new HashMap<>(params.getPageSizeWithDefault());
List<Event> events = new ArrayList<>();
List<Long> relationshipIds = new ArrayList<>();
final Gson gson = new Gson();
String sql = buildSql(params, organisationUnits, user);
SqlRowSet rowSet = jdbcTemplate.queryForRowSet(sql);
log.debug("Event query SQL: " + sql);
Set<String> notes = new HashSet<>();
while (rowSet.next()) {
if (rowSet.getString("psi_uid") == null || (params.getCategoryOptionCombo() == null && !isSuper(user) && !userHasAccess(rowSet))) {
continue;
}
String psiUid = rowSet.getString("psi_uid");
Event event;
if (!eventUidToEventMap.containsKey(psiUid)) {
validateIdentifiersPresence(rowSet, params.getIdSchemes(), true);
event = new Event();
eventUidToEventMap.put(psiUid, event);
if (!params.isSkipEventId()) {
event.setUid(psiUid);
event.setEvent(psiUid);
}
event.setTrackedEntityInstance(rowSet.getString("tei_uid"));
event.setStatus(EventStatus.valueOf(rowSet.getString("psi_status")));
ProgramType programType = ProgramType.fromValue(rowSet.getString("p_type"));
event.setProgram(rowSet.getString("p_identifier"));
event.setProgramType(programType);
event.setProgramStage(rowSet.getString("ps_identifier"));
event.setOrgUnit(rowSet.getString("ou_identifier"));
event.setDeleted(rowSet.getBoolean("psi_deleted"));
if (programType != ProgramType.WITHOUT_REGISTRATION) {
event.setEnrollment(rowSet.getString("pi_uid"));
event.setEnrollmentStatus(EnrollmentStatus.fromProgramStatus(ProgramStatus.valueOf(rowSet.getString("pi_status"))));
event.setFollowup(rowSet.getBoolean("pi_followup"));
}
if (params.getCategoryOptionCombo() == null && !isSuper(user)) {
event.setOptionSize(rowSet.getInt("option_size"));
}
event.setAttributeOptionCombo(rowSet.getString("coc_identifier"));
event.setAttributeCategoryOptions(rowSet.getString("deco_uid"));
event.setTrackedEntityInstance(rowSet.getString("tei_uid"));
event.setStoredBy(rowSet.getString("psi_storedby"));
event.setOrgUnitName(rowSet.getString("ou_name"));
event.setDueDate(DateUtils.getIso8601NoTz(rowSet.getDate("psi_duedate")));
event.setEventDate(DateUtils.getIso8601NoTz(rowSet.getDate("psi_executiondate")));
event.setCreated(DateUtils.getIso8601NoTz(rowSet.getDate("psi_created")));
event.setCreatedByUserInfo(jsonToUserInfo(rowSet.getString("psi_createdbyuserinfo"), jsonMapper));
event.setLastUpdated(DateUtils.getIso8601NoTz(rowSet.getDate("psi_lastupdated")));
event.setLastUpdatedByUserInfo(jsonToUserInfo(rowSet.getString("psi_lastupdatedbyuserinfo"), jsonMapper));
event.setCompletedBy(rowSet.getString("psi_completedby"));
event.setCompletedDate(DateUtils.getIso8601NoTz(rowSet.getDate("psi_completeddate")));
if (rowSet.getObject("psi_geometry") != null) {
try {
Geometry geom = new WKTReader().read(rowSet.getString("psi_geometry"));
event.setGeometry(geom);
} catch (ParseException e) {
log.error("Unable to read geometry for event '" + event.getUid() + "': ", e);
}
}
if (rowSet.getObject("user_assigned") != null) {
event.setAssignedUser(rowSet.getString("user_assigned"));
event.setAssignedUserUsername(rowSet.getString("user_assigned_username"));
event.setAssignedUserDisplayName(rowSet.getString("user_assigned_name"));
}
events.add(event);
} else {
event = eventUidToEventMap.get(psiUid);
String attributeCategoryCombination = event.getAttributeCategoryOptions();
String currentAttributeCategoryCombination = rowSet.getString("deco_uid");
if (!attributeCategoryCombination.contains(currentAttributeCategoryCombination)) {
event.setAttributeCategoryOptions(attributeCategoryCombination + ";" + currentAttributeCategoryCombination);
}
}
if (!StringUtils.isEmpty(rowSet.getString("psi_eventdatavalues"))) {
Set<EventDataValue> eventDataValues = convertEventDataValueJsonIntoSet(rowSet.getString("psi_eventdatavalues"));
for (EventDataValue dv : eventDataValues) {
DataValue dataValue = convertEventDataValueIntoDtoDataValue(dv);
if (params.isSynchronizationQuery()) {
if (psdesWithSkipSyncTrue.containsKey(rowSet.getString("ps_uid")) && psdesWithSkipSyncTrue.get(rowSet.getString("ps_uid")).contains(dv.getDataElement())) {
dataValue.setSkipSynchronization(true);
} else {
dataValue.setSkipSynchronization(false);
}
}
event.getDataValues().add(dataValue);
}
}
if (rowSet.getString("psinote_value") != null && !notes.contains(rowSet.getString("psinote_id"))) {
Note note = new Note();
note.setNote(rowSet.getString("psinote_uid"));
note.setValue(rowSet.getString("psinote_value"));
note.setStoredDate(DateUtils.getIso8601NoTz(rowSet.getDate("psinote_storeddate")));
note.setStoredBy(rowSet.getString("psinote_storedby"));
if (rowSet.getObject("usernote_id") != null) {
note.setLastUpdatedBy(UserInfoSnapshot.of(rowSet.getLong("usernote_id"), rowSet.getString("usernote_code"), rowSet.getString("usernote_uid"), rowSet.getString("usernote_username"), rowSet.getString("userinfo_firstname"), rowSet.getString("userinfo_surname")));
}
note.setLastUpdated(rowSet.getDate("psinote_lastupdated"));
event.getNotes().add(note);
notes.add(rowSet.getString("psinote_id"));
}
if (params.isIncludeRelationships() && rowSet.getObject("psi_rl") != null) {
PGobject pGobject = (PGobject) rowSet.getObject("psi_rl");
if (pGobject != null) {
String value = pGobject.getValue();
relationshipIds.addAll(Lists.newArrayList(gson.fromJson(value, Long[].class)));
}
}
}
final Multimap<String, Relationship> map = eventStore.getRelationshipsByIds(relationshipIds);
if (!map.isEmpty()) {
events.forEach(e -> e.getRelationships().addAll(map.get(e.getEvent())));
}
IdSchemes idSchemes = ObjectUtils.firstNonNull(params.getIdSchemes(), new IdSchemes());
IdScheme dataElementIdScheme = idSchemes.getDataElementIdScheme();
if (dataElementIdScheme != IdScheme.ID && dataElementIdScheme != IdScheme.UID) {
CachingMap<String, String> dataElementUidToIdentifierCache = new CachingMap<>();
List<Collection<DataValue>> dataValuesList = events.stream().map(Event::getDataValues).collect(Collectors.toList());
populateCache(dataElementIdScheme, dataValuesList, dataElementUidToIdentifierCache);
convertDataValuesIdentifiers(dataElementIdScheme, dataValuesList, dataElementUidToIdentifierCache);
}
if (params.getCategoryOptionCombo() == null && !isSuper(user)) {
return events.stream().filter(ev -> ev.getAttributeCategoryOptions() != null && splitToArray(ev.getAttributeCategoryOptions(), TextUtils.SEMICOLON).size() == ev.getOptionSize()).collect(Collectors.toList());
}
return events;
}
use of org.hisp.dhis.common.IdSchemes in project dhis2-core by dhis2.
the class DefaultDataValueSetService method createDataValueSetImportContext.
private ImportContext createDataValueSetImportContext(ImportOptions options, DataValueSet data) {
options = ObjectUtils.firstNonNull(options, ImportOptions.getDefaultImportOptions());
final User currentUser = currentUserService.getCurrentUser();
boolean auditEnabled = config.isEnabled(CHANGELOG_AGGREGATE);
boolean hasSkipAuditAuth = currentUser != null && currentUser.isAuthorized(Authorities.F_SKIP_DATA_IMPORT_AUDIT);
boolean skipAudit = (options.isSkipAudit() && hasSkipAuditAuth) || !auditEnabled;
SystemSettingManager settings = systemSettingManager;
IdScheme dataElementIdScheme = createIdScheme(data.getDataElementIdSchemeProperty(), options, IdSchemes::getDataElementIdScheme);
IdScheme orgUnitIdScheme = createIdScheme(data.getOrgUnitIdSchemeProperty(), options, IdSchemes::getOrgUnitIdScheme);
IdScheme categoryOptComboIdScheme = createIdScheme(data.getCategoryOptionComboIdSchemeProperty(), options, IdSchemes::getCategoryOptionComboIdScheme);
IdScheme dataSetIdScheme = createIdScheme(data.getDataSetIdSchemeProperty(), options, IdSchemes::getDataSetIdScheme);
return ImportContext.builder().importOptions(options).summary(new ImportSummary().setImportOptions(options)).isIso8601(calendarService.getSystemCalendar().isIso8601()).skipLockExceptionCheck(!lockExceptionStore.anyExists()).i18n(i18nManager.getI18n()).currentUser(currentUser).currentOrgUnits(currentUserService.getCurrentUserOrganisationUnits()).hasSkipAuditAuth(hasSkipAuditAuth).skipAudit(skipAudit).idScheme(createIdScheme(data.getIdSchemeProperty(), options, IdSchemes::getIdScheme)).dataElementIdScheme(dataElementIdScheme).orgUnitIdScheme(orgUnitIdScheme).categoryOptComboIdScheme(categoryOptComboIdScheme).dataSetIdScheme(dataSetIdScheme).strategy(data.getStrategy() != null ? ImportStrategy.valueOf(data.getStrategy()) : options.getImportStrategy()).dryRun(data.getDryRun() != null ? data.getDryRun() : options.isDryRun()).skipExistingCheck(options.isSkipExistingCheck()).strictPeriods(options.isStrictPeriods() || settings.getBoolSetting(SettingKey.DATA_IMPORT_STRICT_PERIODS)).strictDataElements(options.isStrictDataElements() || settings.getBoolSetting(SettingKey.DATA_IMPORT_STRICT_DATA_ELEMENTS)).strictCategoryOptionCombos(options.isStrictCategoryOptionCombos() || settings.getBoolSetting(SettingKey.DATA_IMPORT_STRICT_CATEGORY_OPTION_COMBOS)).strictAttrOptionCombos(options.isStrictAttributeOptionCombos() || settings.getBoolSetting(SettingKey.DATA_IMPORT_STRICT_ATTRIBUTE_OPTION_COMBOS)).strictOrgUnits(options.isStrictOrganisationUnits() || settings.getBoolSetting(SettingKey.DATA_IMPORT_STRICT_ORGANISATION_UNITS)).requireCategoryOptionCombo(options.isRequireCategoryOptionCombo() || settings.getBoolSetting(SettingKey.DATA_IMPORT_REQUIRE_CATEGORY_OPTION_COMBO)).requireAttrOptionCombo(options.isRequireAttributeOptionCombo() || settings.getBoolSetting(SettingKey.DATA_IMPORT_REQUIRE_ATTRIBUTE_OPTION_COMBO)).forceDataInput(inputUtils.canForceDataInput(currentUser, options.isForce())).dataElementCallable(new IdentifiableObjectCallable<>(identifiableObjectManager, DataElement.class, dataElementIdScheme, null)).orgUnitCallable(new IdentifiableObjectCallable<>(identifiableObjectManager, OrganisationUnit.class, orgUnitIdScheme, trimToNull(data.getOrgUnit()))).categoryOptionComboCallable(new CategoryOptionComboAclCallable(categoryService, categoryOptComboIdScheme, null)).attributeOptionComboCallable(new CategoryOptionComboAclCallable(categoryService, categoryOptComboIdScheme, null)).periodCallable(new PeriodCallable(periodService, null, trimToNull(data.getPeriod()))).dataValueBatchHandler(batchHandlerFactory.createBatchHandler(DataValueBatchHandler.class).init()).auditBatchHandler(skipAudit ? null : batchHandlerFactory.createBatchHandler(DataValueAuditBatchHandler.class).init()).singularNameForType(klass -> schemaService.getDynamicSchema(klass).getSingular()).build();
}
use of org.hisp.dhis.common.IdSchemes in project dhis2-core by dhis2.
the class DataValueSetQueryParams method getInputIdSchemes.
public IdSchemes getInputIdSchemes() {
IdSchemes schemes = new IdSchemes();
setNonNull(schemes, inputIdScheme, IdSchemes::setIdScheme);
setNonNull(schemes, inputDataElementGroupIdScheme, IdSchemes::setDataElementGroupIdScheme);
setNonNull(schemes, inputOrgUnitIdScheme, IdSchemes::setOrgUnitIdScheme);
setNonNull(schemes, inputDataSetIdScheme, IdSchemes::setDataSetIdScheme);
return schemes;
}
use of org.hisp.dhis.common.IdSchemes in project dhis2-core by dhis2.
the class SpringDataValueSetStore method exportDataValueSet.
private void exportDataValueSet(String sql, DataExportParams params, Date completeDate, final DataValueSetWriter writer) {
if (params.isSingleDataValueSet()) {
IdSchemes idScheme = params.getOutputIdSchemes() != null ? params.getOutputIdSchemes() : new IdSchemes();
IdScheme ouScheme = idScheme.getOrgUnitIdScheme();
IdScheme dataSetScheme = idScheme.getDataSetIdScheme();
writer.writeHeader(params.getFirstDataSet().getPropertyValue(dataSetScheme), getLongGmtDateString(completeDate), params.getFirstPeriod().getIsoDate(), params.getFirstOrganisationUnit().getPropertyValue(ouScheme));
} else {
writer.writeHeader();
}
final Calendar calendar = PeriodType.getCalendar();
jdbcTemplate.query(sql, (ResultSet rs) -> writer.writeValue(new ResultSetDataValueEntry(rs, calendar)));
}
use of org.hisp.dhis.common.IdSchemes in project dhis2-core by dhis2.
the class SpringDataValueSetStore method getDataValueSql.
// --------------------------------------------------------------------------
// Supportive methods
// --------------------------------------------------------------------------
private String getDataValueSql(DataExportParams params) {
Preconditions.checkArgument(!params.getAllDataElements().isEmpty());
User user = currentUserService.getCurrentUser();
IdSchemes idScheme = params.getOutputIdSchemes() != null ? params.getOutputIdSchemes() : new IdSchemes();
String deScheme = idScheme.getDataElementIdScheme().getIdentifiableString().toLowerCase();
String ouScheme = idScheme.getOrgUnitIdScheme().getIdentifiableString().toLowerCase();
String cocScheme = idScheme.getCategoryOptionComboIdScheme().getIdentifiableString().toLowerCase();
String aocScheme = idScheme.getAttributeOptionComboIdScheme().getIdentifiableString().toLowerCase();
String dataElements = getCommaDelimitedString(getIdentifiers(params.getAllDataElements()));
String orgUnits = getCommaDelimitedString(getIdentifiers(params.getOrganisationUnits()));
String orgUnitGroups = getCommaDelimitedString(getIdentifiers(params.getOrganisationUnitGroups()));
// ----------------------------------------------------------------------
// Identifier schemes
// ----------------------------------------------------------------------
String deSql = idScheme.getDataElementIdScheme().isAttribute() ? "de.attributevalues #>> '{\"" + idScheme.getDataElementIdScheme().getAttribute() + "\", \"value\" }' as deid" : "de." + deScheme + " as deid";
String ouSql = idScheme.getOrgUnitIdScheme().isAttribute() ? "ou.attributevalues #>> '{\"" + idScheme.getOrgUnitIdScheme().getAttribute() + "\", \"value\" }' as ouid" : "ou." + ouScheme + " as ouid";
String cocSql = idScheme.getCategoryOptionComboIdScheme().isAttribute() ? "coc.attributevalues #>> '{\"" + idScheme.getCategoryOptionComboIdScheme().getAttribute() + "\", \"value\" }' as cocid" : "coc." + cocScheme + " as cocid";
String aocSql = idScheme.getAttributeOptionComboIdScheme().isAttribute() ? "aoc.attributevalues #>> '{\"" + idScheme.getAttributeOptionComboIdScheme().getAttribute() + "\", \"value\" }' as aocid" : "aoc." + aocScheme + " as aocid";
// ----------------------------------------------------------------------
// Data values
// ----------------------------------------------------------------------
String sql = "select " + deSql + ", pe.startdate as pestart, pt.name as ptname, " + ouSql + ", " + cocSql + ", " + aocSql + ", " + "dv.value, dv.storedby, dv.created, dv.lastupdated, dv.comment, dv.followup, dv.deleted " + "from datavalue dv " + "inner join dataelement de on (dv.dataelementid=de.dataelementid) " + "inner join period pe on (dv.periodid=pe.periodid) " + "inner join periodtype pt on (pe.periodtypeid=pt.periodtypeid) " + "inner join organisationunit ou on (dv.sourceid=ou.organisationunitid) " + "inner join categoryoptioncombo coc on (dv.categoryoptioncomboid=coc.categoryoptioncomboid) " + "inner join categoryoptioncombo aoc on (dv.attributeoptioncomboid=aoc.categoryoptioncomboid) ";
if (params.hasOrganisationUnitGroups()) {
sql += "left join orgunitgroupmembers ougm on (ou.organisationunitid=ougm.organisationunitid) ";
}
sql += "where de.dataelementid in (" + dataElements + ") ";
if (params.isIncludeDescendants()) {
sql += "and (";
for (OrganisationUnit parent : params.getOrganisationUnits()) {
sql += "ou.path like '" + parent.getPath() + "%' or ";
}
sql = TextUtils.removeLastOr(sql) + ") ";
} else {
sql += "and (";
if (params.hasOrganisationUnits()) {
sql += "dv.sourceid in (" + orgUnits + ") ";
}
if (params.hasOrganisationUnits() && params.hasOrganisationUnitGroups()) {
sql += "or ";
}
if (params.hasOrganisationUnitGroups()) {
sql += "ougm.orgunitgroupid in (" + orgUnitGroups + ") ";
}
sql += ") ";
}
if (!params.isIncludeDeleted()) {
sql += "and dv.deleted is false ";
}
if (params.hasStartEndDate()) {
sql += "and (pe.startdate >= '" + getMediumDateString(params.getStartDate()) + "' and pe.enddate <= '" + getMediumDateString(params.getEndDate()) + "') ";
} else if (params.hasPeriods()) {
sql += "and dv.periodid in (" + getCommaDelimitedString(getIdentifiers(params.getPeriods())) + ") ";
}
if (params.hasAttributeOptionCombos()) {
sql += "and dv.attributeoptioncomboid in (" + getCommaDelimitedString(getIdentifiers(params.getAttributeOptionCombos())) + ") ";
}
if (params.hasLastUpdated()) {
sql += "and dv.lastupdated >= '" + getLongGmtDateString(params.getLastUpdated()) + "' ";
} else if (params.hasLastUpdatedDuration()) {
sql += "and dv.lastupdated >= '" + getLongGmtDateString(DateUtils.nowMinusDuration(params.getLastUpdatedDuration())) + "' ";
}
if (user != null && !user.isSuper()) {
sql += getAttributeOptionComboClause(user);
}
if (params.hasLimit()) {
sql += "limit " + params.getLimit();
}
log.debug("Get data value set SQL: " + sql);
return sql;
}
Aggregations