Search in sources :

Example 16 with IdSchemes

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;
}
Also used : SqlRowSet(org.springframework.jdbc.support.rowset.SqlRowSet) EventUtils.userInfoToJson(org.hisp.dhis.dxf2.events.event.EventUtils.userInfoToJson) WKTReader(org.locationtech.jts.io.WKTReader) UID(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UID) CREATEDCLIENT(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.CREATEDCLIENT) EventRow(org.hisp.dhis.dxf2.events.report.EventRow) DELETED(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.DELETED) UPDATED(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UPDATED) StringUtils(org.apache.commons.lang3.StringUtils) EVENT_CREATED_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_CREATED_ID) EVENT_EXECUTION_DATE_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_EXECUTION_DATE_ID) Relationship(org.hisp.dhis.dxf2.events.trackedentity.Relationship) EnrollmentStatus(org.hisp.dhis.dxf2.events.enrollment.EnrollmentStatus) STATIC_EVENT_COLUMNS(org.hisp.dhis.dxf2.events.event.AbstractEventService.STATIC_EVENT_COLUMNS) CREATED(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.CREATED) Map(java.util.Map) SqlUtils.castToNumber(org.hisp.dhis.system.util.SqlUtils.castToNumber) EventDataValue(org.hisp.dhis.eventdatavalue.EventDataValue) SqlUtils.lower(org.hisp.dhis.system.util.SqlUtils.lower) SqlRowSet(org.springframework.jdbc.support.rowset.SqlRowSet) Repository(org.springframework.stereotype.Repository) EVENT_STATUS_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_STATUS_ID) OrganisationUnitSelectionMode(org.hisp.dhis.common.OrganisationUnitSelectionMode) JpaQueryUtils(org.hisp.dhis.query.JpaQueryUtils) DateUtils.getMediumDateString(org.hisp.dhis.util.DateUtils.getMediumDateString) Set(java.util.Set) STATUS(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.STATUS) EXECUTION_DATE(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.EXECUTION_DATE) PreparedStatement(java.sql.PreparedStatement) Attribute(org.hisp.dhis.dxf2.events.trackedentity.Attribute) TextUtils.removeLastComma(org.hisp.dhis.commons.util.TextUtils.removeLastComma) Slf4j(lombok.extern.slf4j.Slf4j) ParseException(org.locationtech.jts.io.ParseException) ProgramType(org.hisp.dhis.program.ProgramType) QueryFilter(org.hisp.dhis.common.QueryFilter) EVENT_STORED_BY_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_STORED_BY_ID) Joiner(com.google.common.base.Joiner) QueryItem(org.hisp.dhis.common.QueryItem) ProgramStageInstance(org.hisp.dhis.program.ProgramStageInstance) EVENT_GEOMETRY(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_GEOMETRY) ArrayList(java.util.ArrayList) SQLException(java.sql.SQLException) Lists(com.google.common.collect.Lists) IdentifiableObjectManager(org.hisp.dhis.common.IdentifiableObjectManager) STOREDBY(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.STOREDBY) SqlHelper(org.hisp.dhis.commons.util.SqlHelper) OrderParam(org.hisp.dhis.webapi.controller.event.mapper.OrderParam) EVENT_ENROLLMENT_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_ENROLLMENT_ID) IdSchemes(org.hisp.dhis.common.IdSchemes) QueryOperator(org.hisp.dhis.common.QueryOperator) ID(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.ID) IOException(java.io.IOException) StatementBuilder(org.hisp.dhis.jdbc.StatementBuilder) ObjectUtils(org.hisp.dhis.util.ObjectUtils) GEOMETRY(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.GEOMETRY) COMPLETEDBY(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.COMPLETEDBY) DateUtils(org.hisp.dhis.util.DateUtils) TextUtils(org.hisp.dhis.commons.util.TextUtils) EVENT_PROGRAM_STAGE_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_PROGRAM_STAGE_ID) Date(java.util.Date) ValueType(org.hisp.dhis.common.ValueType) DateUtils.getDateAfterAddition(org.hisp.dhis.util.DateUtils.getDateAfterAddition) RequiredArgsConstructor(lombok.RequiredArgsConstructor) EVENT_LAST_UPDATED_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_LAST_UPDATED_ID) ObjectReader(com.fasterxml.jackson.databind.ObjectReader) Gson(com.google.gson.Gson) SqlUtils.escapeSql(org.hisp.dhis.system.util.SqlUtils.escapeSql) TextUtils.getQuotedCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getQuotedCommaDelimitedString) TypeReference(com.fasterxml.jackson.core.type.TypeReference) EVENT_PROGRAM_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_PROGRAM_ID) EventUtils.eventDataValuesToJson(org.hisp.dhis.dxf2.events.event.EventUtils.eventDataValuesToJson) EVENT_DUE_DATE_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_DUE_DATE_ID) ImmutableMap(com.google.common.collect.ImmutableMap) DateUtils.getLongGmtDateString(org.hisp.dhis.util.DateUtils.getLongGmtDateString) BaseIdentifiableObject(org.hisp.dhis.common.BaseIdentifiableObject) Timestamp(java.sql.Timestamp) Collection(java.util.Collection) UserInfoSnapshot(org.hisp.dhis.program.UserInfoSnapshot) EventStatus(org.hisp.dhis.event.EventStatus) Collectors(java.util.stream.Collectors) TextUtils.splitToArray(org.hisp.dhis.commons.util.TextUtils.splitToArray) List(java.util.List) CollectionUtils.isNotEmpty(org.apache.commons.collections4.CollectionUtils.isNotEmpty) Environment(org.springframework.core.env.Environment) AclService(org.hisp.dhis.security.acl.AclService) Optional(java.util.Optional) Geometry(org.locationtech.jts.geom.Geometry) BatchPreparedStatementSetterWithKeyHolder(org.hisp.dhis.jdbc.BatchPreparedStatementSetterWithKeyHolder) EVENT_ORG_UNIT_NAME(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_ORG_UNIT_NAME) EVENT_CREATED_BY_USER_INFO_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_CREATED_BY_USER_INFO_ID) EVENT_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_ID) DataAccessException(org.springframework.dao.DataAccessException) HashMap(java.util.HashMap) Multimap(com.google.common.collect.Multimap) Program(org.hisp.dhis.program.Program) JdbcTemplate(org.springframework.jdbc.core.JdbcTemplate) HashSet(java.util.HashSet) DataElement(org.hisp.dhis.dataelement.DataElement) PGobject(org.postgresql.util.PGobject) ImmutableList(com.google.common.collect.ImmutableList) UPDATEDCLIENT(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.UPDATEDCLIENT) Qualifier(org.springframework.beans.factory.annotation.Qualifier) User(org.hisp.dhis.user.User) EVENT_ORG_UNIT_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_ORG_UNIT_ID) EVENT_LAST_UPDATED_BY_USER_INFO_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_LAST_UPDATED_BY_USER_INFO_ID) EVENT_DELETED(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_DELETED) JdbcUtils(org.hisp.dhis.jdbc.JdbcUtils) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) EventUtils.jsonToUserInfo(org.hisp.dhis.dxf2.events.event.EventUtils.jsonToUserInfo) ProgramStage(org.hisp.dhis.program.ProgramStage) OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) ProgramStatus(org.hisp.dhis.program.ProgramStatus) Collectors.toList(java.util.stream.Collectors.toList) CollectionUtils(org.hisp.dhis.commons.collection.CollectionUtils) EVENT_ATTRIBUTE_OPTION_COMBO_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_ATTRIBUTE_OPTION_COMBO_ID) JsonEventDataValueSetBinaryType(org.hisp.dhis.hibernate.jsonb.type.JsonEventDataValueSetBinaryType) CurrentUserService(org.hisp.dhis.user.CurrentUserService) COMPLETEDDATE(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.COMPLETEDDATE) CachingMap(org.hisp.dhis.commons.collection.CachingMap) DUE_DATE(org.hisp.dhis.dxf2.events.trackedentity.store.query.EventQuery.COLUMNS.DUE_DATE) Comparator(java.util.Comparator) EVENT_COMPLETED_BY_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_COMPLETED_BY_ID) EVENT_COMPLETED_DATE_ID(org.hisp.dhis.dxf2.events.event.EventSearchParams.EVENT_COMPLETED_DATE_ID) IdScheme(org.hisp.dhis.common.IdScheme) User(org.hisp.dhis.user.User) IdSchemes(org.hisp.dhis.common.IdSchemes) HashMap(java.util.HashMap) EventDataValue(org.hisp.dhis.eventdatavalue.EventDataValue) ArrayList(java.util.ArrayList) Gson(com.google.gson.Gson) DateUtils.getMediumDateString(org.hisp.dhis.util.DateUtils.getMediumDateString) TextUtils.getQuotedCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getQuotedCommaDelimitedString) DateUtils.getLongGmtDateString(org.hisp.dhis.util.DateUtils.getLongGmtDateString) WKTReader(org.locationtech.jts.io.WKTReader) PGobject(org.postgresql.util.PGobject) CachingMap(org.hisp.dhis.commons.collection.CachingMap) ProgramType(org.hisp.dhis.program.ProgramType) EventDataValue(org.hisp.dhis.eventdatavalue.EventDataValue) HashSet(java.util.HashSet) IdScheme(org.hisp.dhis.common.IdScheme) Geometry(org.locationtech.jts.geom.Geometry) Relationship(org.hisp.dhis.dxf2.events.trackedentity.Relationship) Collection(java.util.Collection) ParseException(org.locationtech.jts.io.ParseException)

Example 17 with IdSchemes

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();
}
Also used : DataValueAuditBatchHandler(org.hisp.dhis.jdbc.batchhandler.DataValueAuditBatchHandler) ImportStrategy(org.hisp.dhis.importexport.ImportStrategy) CategoryService(org.hisp.dhis.category.CategoryService) Authorities(org.hisp.dhis.security.Authorities) ValidationUtils.dataValueIsZeroAndInsignificant(org.hisp.dhis.system.util.ValidationUtils.dataValueIsZeroAndInsignificant) Date(java.util.Date) PeriodService(org.hisp.dhis.period.PeriodService) ValidationUtils(org.hisp.dhis.system.util.ValidationUtils) CompleteDataSetRegistrationService(org.hisp.dhis.dataset.CompleteDataSetRegistrationService) OrganisationUnitService(org.hisp.dhis.organisationunit.OrganisationUnitService) ErrorMessage(org.hisp.dhis.feedback.ErrorMessage) ImportCount(org.hisp.dhis.dxf2.importsummary.ImportCount) ImportSummary(org.hisp.dhis.dxf2.importsummary.ImportSummary) CurrentUserServiceTarget(org.hisp.dhis.user.CurrentUserServiceTarget) FileResourceService(org.hisp.dhis.fileresource.FileResourceService) IdentifiableProperty(org.hisp.dhis.common.IdentifiableProperty) DataExportParams(org.hisp.dhis.datavalue.DataExportParams) XMLFactory(org.hisp.staxwax.factory.XMLFactory) InputUtils(org.hisp.dhis.dxf2.util.InputUtils) JobConfiguration(org.hisp.dhis.scheduling.JobConfiguration) Period(org.hisp.dhis.period.Period) StringUtils.trimToNull(org.apache.commons.lang3.StringUtils.trimToNull) CollectionUtils.isEmpty(org.hisp.dhis.commons.collection.CollectionUtils.isEmpty) DxfNamespaces(org.hisp.dhis.common.DxfNamespaces) CHANGELOG_AGGREGATE(org.hisp.dhis.external.conf.ConfigurationKey.CHANGELOG_AGGREGATE) OrganisationUnitGroup(org.hisp.dhis.organisationunit.OrganisationUnitGroup) StreamUtils.wrapAndCheckCompressionFormat(org.hisp.dhis.commons.util.StreamUtils.wrapAndCheckCompressionFormat) DataValueAudit(org.hisp.dhis.datavalue.DataValueAudit) WARN(org.hisp.dhis.system.notification.NotificationLevel.WARN) SchemaService(org.hisp.dhis.schema.SchemaService) Objects(java.util.Objects) SimpleNode(org.hisp.dhis.node.types.SimpleNode) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) Clock(org.hisp.dhis.system.util.Clock) ComplexNode(org.hisp.dhis.node.types.ComplexNode) CategoryOptionCombo(org.hisp.dhis.category.CategoryOptionCombo) Writer(java.io.Writer) AclService(org.hisp.dhis.security.acl.AclService) RootNode(org.hisp.dhis.node.types.RootNode) BatchHandlerFactory(org.hisp.quick.BatchHandlerFactory) CollectionNode(org.hisp.dhis.node.types.CollectionNode) BatchHandlerFactoryTarget(org.hisp.dhis.common.BatchHandlerFactoryTarget) DataSet(org.hisp.dhis.dataset.DataSet) DateUtils.parseDate(org.hisp.dhis.util.DateUtils.parseDate) Callable(java.util.concurrent.Callable) BooleanUtils(org.apache.commons.lang3.BooleanUtils) AuditType(org.hisp.dhis.common.AuditType) DataSetContext(org.hisp.dhis.dxf2.datavalueset.ImportContext.DataSetContext) IllegalQueryException(org.hisp.dhis.common.IllegalQueryException) Function(java.util.function.Function) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) DataElement(org.hisp.dhis.dataelement.DataElement) PeriodCallable(org.hisp.dhis.system.callable.PeriodCallable) Notifier(org.hisp.dhis.system.notification.Notifier) DataValueService(org.hisp.dhis.datavalue.DataValueService) DataValueBatchHandler(org.hisp.dhis.jdbc.batchhandler.DataValueBatchHandler) CategoryOptionComboAclCallable(org.hisp.dhis.system.callable.CategoryOptionComboAclCallable) IdentifiableObjectManager(org.hisp.dhis.common.IdentifiableObjectManager) Service(org.springframework.stereotype.Service) User(org.hisp.dhis.user.User) ErrorCode(org.hisp.dhis.feedback.ErrorCode) IdentifiableObjectCallable(org.hisp.dhis.system.callable.IdentifiableObjectCallable) ImportStatus(org.hisp.dhis.dxf2.importsummary.ImportStatus) I18nManager(org.hisp.dhis.i18n.I18nManager) DataValueAuditBatchHandler(org.hisp.dhis.jdbc.batchhandler.DataValueAuditBatchHandler) SystemSettingManager(org.hisp.dhis.setting.SystemSettingManager) OutputStream(java.io.OutputStream) CsvUtils(org.hisp.dhis.system.util.CsvUtils) CompleteDataSetRegistration(org.hisp.dhis.dataset.CompleteDataSetRegistration) DhisConfigurationProvider(org.hisp.dhis.external.conf.DhisConfigurationProvider) IdSchemes(org.hisp.dhis.common.IdSchemes) FileResource(org.hisp.dhis.fileresource.FileResource) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) CalendarService(org.hisp.dhis.calendar.CalendarService) INFO(org.hisp.dhis.system.notification.NotificationLevel.INFO) ImportOptions(org.hisp.dhis.dxf2.common.ImportOptions) DebugUtils(org.hisp.dhis.commons.util.DebugUtils) OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) ObjectUtils(org.hisp.dhis.util.ObjectUtils) NotificationLevel(org.hisp.dhis.system.notification.NotificationLevel) LockExceptionStore(org.hisp.dhis.dataset.LockExceptionStore) CurrentUserService(org.hisp.dhis.user.CurrentUserService) ERROR(org.hisp.dhis.system.notification.NotificationLevel.ERROR) DataValue(org.hisp.dhis.datavalue.DataValue) SettingKey(org.hisp.dhis.setting.SettingKey) AllArgsConstructor(lombok.AllArgsConstructor) DataElementGroup(org.hisp.dhis.dataelement.DataElementGroup) IdScheme(org.hisp.dhis.common.IdScheme) DateUtils(org.hisp.dhis.util.DateUtils) InputStream(java.io.InputStream) Transactional(org.springframework.transaction.annotation.Transactional) User(org.hisp.dhis.user.User) DataValueBatchHandler(org.hisp.dhis.jdbc.batchhandler.DataValueBatchHandler) IdSchemes(org.hisp.dhis.common.IdSchemes) ImportSummary(org.hisp.dhis.dxf2.importsummary.ImportSummary) CategoryOptionComboAclCallable(org.hisp.dhis.system.callable.CategoryOptionComboAclCallable) PeriodCallable(org.hisp.dhis.system.callable.PeriodCallable) IdScheme(org.hisp.dhis.common.IdScheme) IdentifiableObjectCallable(org.hisp.dhis.system.callable.IdentifiableObjectCallable) DataElement(org.hisp.dhis.dataelement.DataElement) SystemSettingManager(org.hisp.dhis.setting.SystemSettingManager)

Example 18 with IdSchemes

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;
}
Also used : IdSchemes(org.hisp.dhis.common.IdSchemes)

Example 19 with IdSchemes

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)));
}
Also used : IdSchemes(org.hisp.dhis.common.IdSchemes) Calendar(org.hisp.dhis.calendar.Calendar) ResultSet(java.sql.ResultSet) IdScheme(org.hisp.dhis.common.IdScheme)

Example 20 with IdSchemes

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;
}
Also used : OrganisationUnit(org.hisp.dhis.organisationunit.OrganisationUnit) User(org.hisp.dhis.user.User) IdSchemes(org.hisp.dhis.common.IdSchemes) TextUtils.getCommaDelimitedString(org.hisp.dhis.commons.util.TextUtils.getCommaDelimitedString) DateUtils.getLongGmtDateString(org.hisp.dhis.util.DateUtils.getLongGmtDateString) DateUtils.getMediumDateString(org.hisp.dhis.util.DateUtils.getMediumDateString)

Aggregations

IdSchemes (org.hisp.dhis.common.IdSchemes)25 DataExportParams (org.hisp.dhis.datavalue.DataExportParams)9 Date (java.util.Date)8 Test (org.junit.jupiter.api.Test)7 ArrayList (java.util.ArrayList)6 IdScheme (org.hisp.dhis.common.IdScheme)6 User (org.hisp.dhis.user.User)6 HashSet (java.util.HashSet)5 OrganisationUnit (org.hisp.dhis.organisationunit.OrganisationUnit)5 ByteArrayOutputStream (java.io.ByteArrayOutputStream)4 IOException (java.io.IOException)4 List (java.util.List)4 CategoryOptionCombo (org.hisp.dhis.category.CategoryOptionCombo)4 DataSet (org.hisp.dhis.dataset.DataSet)4 DataValue (org.hisp.dhis.datavalue.DataValue)4 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)3 HashMap (java.util.HashMap)3 Slf4j (lombok.extern.slf4j.Slf4j)3 CachingMap (org.hisp.dhis.commons.collection.CachingMap)3 DataValueService (org.hisp.dhis.datavalue.DataValueService)3