use of org.hisp.dhis.common.IllegalQueryException in project dhis2-core by dhis2.
the class OrgUnitSplitServiceTest method testTargetOrgUnitNotFound.
@Test
void testTargetOrgUnitNotFound() {
OrgUnitSplitQuery query = new OrgUnitSplitQuery();
query.setSource(BASE_OU_UID + 'A');
query.setTargets(Lists.newArrayList(BASE_OU_UID + 'B', BASE_OU_UID + 'X'));
query.setPrimaryTarget(BASE_OU_UID + 'B');
IllegalQueryException ex = assertThrows(IllegalQueryException.class, () -> service.getFromQuery(query));
assertEquals(ErrorCode.E1515, ex.getErrorCode());
}
use of org.hisp.dhis.common.IllegalQueryException in project dhis2-core by dhis2.
the class SqlViewServiceTest method testValidate_InvalidVarName.
@Test
void testValidate_InvalidVarName() {
SqlView sqlView = getSqlView("select * from dataelement where valueType = '${typö}' and aggregationtype = '${aggregationType}'");
IllegalQueryException ex = assertThrows(IllegalQueryException.class, () -> sqlViewService.validateSqlView(sqlView, null, null));
assertEquals(ErrorCode.E4313, ex.getErrorCode());
assertEquals("SQL query contains variable names that are invalid: `[typö]`", ex.getMessage());
}
use of org.hisp.dhis.common.IllegalQueryException in project dhis2-core by dhis2.
the class DefaultTrackedEntityInstanceService method validate.
@Override
public void validate(TrackedEntityInstanceQueryParams params) throws IllegalQueryException {
String violation = null;
if (params == null) {
throw new IllegalQueryException("Params cannot be null");
}
User user = params.getUser();
if (!params.hasTrackedEntityInstances() && !params.hasOrganisationUnits() && !(params.isOrganisationUnitMode(ALL) || params.isOrganisationUnitMode(ACCESSIBLE) || params.isOrganisationUnitMode(CAPTURE))) {
violation = "At least one organisation unit must be specified";
}
if (params.isOrganisationUnitMode(ACCESSIBLE) && (user == null || !user.hasDataViewOrganisationUnitWithFallback())) {
violation = "Current user must be associated with at least one organisation unit when selection mode is ACCESSIBLE";
}
if (params.isOrganisationUnitMode(CAPTURE) && (user == null || !user.hasOrganisationUnit())) {
violation = "Current user must be associated with at least one organisation unit with write access when selection mode is CAPTURE";
}
if (params.hasProgram() && params.hasTrackedEntityType()) {
violation = "Program and tracked entity cannot be specified simultaneously";
}
if (!params.hasTrackedEntityInstances() && !params.hasProgram() && !params.hasTrackedEntityType()) {
violation = "Either Program or Tracked entity type should be specified";
}
if (params.hasProgramStatus() && !params.hasProgram()) {
violation = "Program must be defined when program status is defined";
}
if (params.hasFollowUp() && !params.hasProgram()) {
violation = "Program must be defined when follow up status is defined";
}
if (params.hasProgramEnrollmentStartDate() && !params.hasProgram()) {
violation = "Program must be defined when program enrollment start date is specified";
}
if (params.hasProgramEnrollmentEndDate() && !params.hasProgram()) {
violation = "Program must be defined when program enrollment end date is specified";
}
if (params.hasProgramIncidentStartDate() && !params.hasProgram()) {
violation = "Program must be defined when program incident start date is specified";
}
if (params.hasProgramIncidentEndDate() && !params.hasProgram()) {
violation = "Program must be defined when program incident end date is specified";
}
if (params.hasEventStatus() && (!params.hasEventStartDate() || !params.hasEventEndDate())) {
violation = "Event start and end date must be specified when event status is specified";
}
if (params.getAssignedUserSelectionMode() != null && params.hasAssignedUsers() && !params.getAssignedUserSelectionMode().equals(AssignedUserSelectionMode.PROVIDED)) {
violation = "Assigned User uid(s) cannot be specified if selectionMode is not PROVIDED";
}
if (params.isOrQuery() && params.hasFilters()) {
violation = "Query cannot be specified together with filters";
}
if (!params.getDuplicateAttributes().isEmpty()) {
violation = "Attributes cannot be specified more than once: " + params.getDuplicateAttributes();
}
if (!params.getDuplicateFilters().isEmpty()) {
violation = "Filters cannot be specified more than once: " + params.getDuplicateFilters();
}
if (params.hasLastUpdatedDuration() && (params.hasLastUpdatedStartDate() || params.hasLastUpdatedEndDate())) {
violation = "Last updated from and/or to and last updated duration cannot be specified simultaneously";
}
if (params.hasLastUpdatedDuration() && DateUtils.getDuration(params.getLastUpdatedDuration()) == null) {
violation = "Duration is not valid: " + params.getLastUpdatedDuration();
}
if (violation != null) {
log.warn("Validation failed: " + violation);
throw new IllegalQueryException(violation);
}
}
use of org.hisp.dhis.common.IllegalQueryException in project dhis2-core by dhis2.
the class DefaultTrackedEntityInstanceService method validateSearchScope.
@Override
@Transactional(readOnly = true)
public void validateSearchScope(TrackedEntityInstanceQueryParams params, boolean isGridSearch) throws IllegalQueryException {
if (params == null) {
throw new IllegalQueryException("Params cannot be null");
}
User user = currentUserService.getCurrentUser();
if (user == null) {
throw new IllegalQueryException("User cannot be null");
}
if (user.getOrganisationUnits().isEmpty()) {
throw new IllegalQueryException("User need to be associated with at least one organisation unit.");
}
if (!params.hasProgram() && !params.hasTrackedEntityType() && params.hasAttributesOrFilters() && !params.hasOrganisationUnits()) {
List<String> uniqeAttributeIds = attributeService.getAllSystemWideUniqueTrackedEntityAttributes().stream().map(TrackedEntityAttribute::getUid).collect(Collectors.toList());
for (String att : params.getAttributeAndFilterIds()) {
if (!uniqeAttributeIds.contains(att)) {
throw new IllegalQueryException("Either a program or tracked entity type must be specified");
}
}
}
if (!isLocalSearch(params, user)) {
// no limit
int maxTeiLimit = 0;
if (params.hasQuery()) {
throw new IllegalQueryException("Query cannot be used during global search");
}
if (params.hasProgram() && params.hasTrackedEntityType()) {
throw new IllegalQueryException("Program and tracked entity cannot be specified simultaneously");
}
if (params.hasAttributesOrFilters()) {
List<String> searchableAttributeIds = new ArrayList<>();
if (params.hasProgram()) {
searchableAttributeIds.addAll(params.getProgram().getSearchableAttributeIds());
}
if (params.hasTrackedEntityType()) {
searchableAttributeIds.addAll(params.getTrackedEntityType().getSearchableAttributeIds());
}
if (!params.hasProgram() && !params.hasTrackedEntityType()) {
searchableAttributeIds.addAll(attributeService.getAllSystemWideUniqueTrackedEntityAttributes().stream().map(TrackedEntityAttribute::getUid).collect(Collectors.toList()));
}
List<String> violatingAttributes = new ArrayList<>();
for (String attributeId : params.getAttributeAndFilterIds()) {
if (!searchableAttributeIds.contains(attributeId)) {
violatingAttributes.add(attributeId);
}
}
if (!violatingAttributes.isEmpty()) {
throw new IllegalQueryException("Non-searchable attribute(s) can not be used during global search: " + violatingAttributes.toString());
}
}
if (params.hasTrackedEntityType()) {
maxTeiLimit = params.getTrackedEntityType().getMaxTeiCountToReturn();
if (!params.hasTrackedEntityInstances() && isTeTypeMinAttributesViolated(params)) {
throw new IllegalQueryException("At least " + params.getTrackedEntityType().getMinAttributesRequiredToSearch() + " attributes should be mentioned in the search criteria.");
}
}
if (params.hasProgram()) {
maxTeiLimit = params.getProgram().getMaxTeiCountToReturn();
if (!params.hasTrackedEntityInstances() && isProgramMinAttributesViolated(params)) {
throw new IllegalQueryException("At least " + params.getProgram().getMinAttributesRequiredToSearch() + " attributes should be mentioned in the search criteria.");
}
}
if (maxTeiLimit > 0 && params.isPaging() && params.getOffset() > 0 && (params.getOffset() + params.getPageSizeWithDefault()) > maxTeiLimit) {
throw new IllegalQueryException("maxteicountreached");
}
params.setMaxTeiLimit(maxTeiLimit);
}
}
use of org.hisp.dhis.common.IllegalQueryException in project dhis2-core by dhis2.
the class AbstractEventService method getEvent.
@Transactional(readOnly = true)
@Override
public Event getEvent(ProgramStageInstance programStageInstance, boolean isSynchronizationQuery, boolean skipOwnershipCheck) {
if (programStageInstance == null) {
return null;
}
Event event = new Event();
event.setEvent(programStageInstance.getUid());
if (programStageInstance.getProgramInstance().getEntityInstance() != null) {
event.setTrackedEntityInstance(programStageInstance.getProgramInstance().getEntityInstance().getUid());
}
event.setFollowup(programStageInstance.getProgramInstance().getFollowup());
event.setEnrollmentStatus(EnrollmentStatus.fromProgramStatus(programStageInstance.getProgramInstance().getStatus()));
event.setStatus(programStageInstance.getStatus());
event.setEventDate(DateUtils.getIso8601NoTz(programStageInstance.getExecutionDate()));
event.setDueDate(DateUtils.getIso8601NoTz(programStageInstance.getDueDate()));
event.setStoredBy(programStageInstance.getStoredBy());
event.setCompletedBy(programStageInstance.getCompletedBy());
event.setCompletedDate(DateUtils.getIso8601NoTz(programStageInstance.getCompletedDate()));
event.setCreated(DateUtils.getIso8601NoTz(programStageInstance.getCreated()));
event.setCreatedByUserInfo(programStageInstance.getCreatedByUserInfo());
event.setLastUpdatedByUserInfo(programStageInstance.getLastUpdatedByUserInfo());
event.setCreatedAtClient(DateUtils.getIso8601NoTz(programStageInstance.getCreatedAtClient()));
event.setLastUpdated(DateUtils.getIso8601NoTz(programStageInstance.getLastUpdated()));
event.setLastUpdatedAtClient(DateUtils.getIso8601NoTz(programStageInstance.getLastUpdatedAtClient()));
event.setGeometry(programStageInstance.getGeometry());
event.setDeleted(programStageInstance.isDeleted());
if (programStageInstance.getAssignedUser() != null) {
event.setAssignedUser(programStageInstance.getAssignedUser().getUid());
event.setAssignedUserUsername(programStageInstance.getAssignedUser().getUsername());
event.setAssignedUserDisplayName(programStageInstance.getAssignedUser().getName());
}
User user = currentUserService.getCurrentUser();
OrganisationUnit ou = programStageInstance.getOrganisationUnit();
List<String> errors = trackerAccessManager.canRead(user, programStageInstance, skipOwnershipCheck);
if (!errors.isEmpty()) {
throw new IllegalQueryException(errors.toString());
}
if (ou != null) {
event.setOrgUnit(ou.getUid());
event.setOrgUnitName(ou.getName());
}
Program program = programStageInstance.getProgramInstance().getProgram();
event.setProgram(program.getUid());
event.setEnrollment(programStageInstance.getProgramInstance().getUid());
event.setProgramStage(programStageInstance.getProgramStage().getUid());
CategoryOptionCombo attributeOptionCombo = programStageInstance.getAttributeOptionCombo();
if (attributeOptionCombo != null) {
event.setAttributeOptionCombo(attributeOptionCombo.getUid());
event.setAttributeCategoryOptions(String.join(";", attributeOptionCombo.getCategoryOptions().stream().map(CategoryOption::getUid).collect(Collectors.toList())));
}
if (programStageInstance.getProgramInstance().getEntityInstance() != null) {
event.setTrackedEntityInstance(programStageInstance.getProgramInstance().getEntityInstance().getUid());
}
Collection<EventDataValue> dataValues;
if (!isSynchronizationQuery) {
dataValues = programStageInstance.getEventDataValues();
} else {
Set<String> dataElementsToSync = programStageInstance.getProgramStage().getProgramStageDataElements().stream().filter(psde -> !psde.getSkipSynchronization()).map(psde -> psde.getDataElement().getUid()).collect(Collectors.toSet());
dataValues = programStageInstance.getEventDataValues().stream().filter(dv -> dataElementsToSync.contains(dv.getDataElement())).collect(Collectors.toSet());
}
for (EventDataValue dataValue : dataValues) {
if (getDataElement(user.getUid(), dataValue.getDataElement())) {
DataValue value = new DataValue();
value.setCreated(DateUtils.getIso8601NoTz(dataValue.getCreated()));
value.setCreatedByUserInfo(dataValue.getCreatedByUserInfo());
value.setLastUpdated(DateUtils.getIso8601NoTz(dataValue.getLastUpdated()));
value.setLastUpdatedByUserInfo(dataValue.getLastUpdatedByUserInfo());
value.setDataElement(dataValue.getDataElement());
value.setValue(dataValue.getValue());
value.setProvidedElsewhere(dataValue.getProvidedElsewhere());
value.setStoredBy(dataValue.getStoredBy());
event.getDataValues().add(value);
} else {
log.info("Can not find a Data Element having UID [" + dataValue.getDataElement() + "]");
}
}
event.getNotes().addAll(NoteHelper.convertNotes(programStageInstance.getComments()));
event.setRelationships(programStageInstance.getRelationshipItems().stream().filter(Objects::nonNull).map((r) -> relationshipService.getRelationship(r.getRelationship(), RelationshipParams.FALSE, user)).collect(Collectors.toSet()));
return event;
}
Aggregations