Search in sources :

Example 1 with RepositoryQueryDiagResponse

use of com.evolveum.midpoint.schema.RepositoryQueryDiagResponse in project midpoint by Evolveum.

the class PageRepositoryQuery method queryPerformed.

private void queryPerformed(Action action, AjaxRequestTarget target) {
    String opName = action == Action.TRANSLATE_ONLY ? OPERATION_TRANSLATE_QUERY : OPERATION_EXECUTE_QUERY;
    Task task = createSimpleTask(opName);
    OperationResult result = new OperationResult(opName);
    RepoQueryDto dto = model.getObject();
    try {
        boolean queryPresent;
        RepositoryQueryDiagRequest request = new RepositoryQueryDiagRequest();
        switch(action) {
            case EXECUTE_HIBERNATE:
                String hqlText = dto.getHibernateQuery();
                queryPresent = StringUtils.isNotBlank(hqlText);
                request.setImplementationLevelQuery(hqlText);
                break;
            case TRANSLATE_ONLY:
                request.setTranslateOnly(true);
            case EXECUTE_MIDPOINT:
                queryPresent = StringUtils.isNotBlank(dto.getMidPointQuery());
                if (queryPresent) {
                    updateRequestWithMidpointQuery(request, dto.getObjectType(), dto.getMidPointQuery(), task, result);
                }
                break;
            default:
                throw new IllegalArgumentException("Invalid action: " + action);
        }
        if (!queryPresent) {
            warnNoQuery(target);
            return;
        }
        RepositoryQueryDiagResponse response;
        List<?> queryResult;
        if (isAdmin) {
            response = getModelDiagnosticService().executeRepositoryQuery(request, task, result);
            queryResult = response.getQueryResult();
        } else {
            request.setTranslateOnly(true);
            // just to be sure
            request.setImplementationLevelQuery(null);
            response = getModelDiagnosticService().executeRepositoryQuery(request, task, result);
            if (action != Action.TRANSLATE_ONLY) {
                // not an admin, so have to fetch objects via model
                queryResult = getModelService().searchObjects(request.getType(), request.getQuery(), GetOperationOptions.createRawCollection(), task, result);
            } else {
                queryResult = null;
            }
        }
        if (action != Action.EXECUTE_HIBERNATE) {
            dto.setHibernateQuery(String.valueOf(response.getImplementationLevelQuery()));
            StringBuilder sb = new StringBuilder();
            for (Map.Entry<String, RepositoryQueryDiagResponse.ParameterValue> entry : response.getImplementationLevelQueryParameters().entrySet()) {
                sb.append(entry.getKey()).append(" = ").append(entry.getValue().displayValue).append("\n");
            }
            dto.setHibernateParameters(sb.toString());
        } else {
            dto.setHibernateParameters("");
        }
        if (action != Action.TRANSLATE_ONLY) {
            dto.setQueryResultText(formatQueryResult(queryResult));
            dto.setQueryResultObject(queryResult);
        } else {
            dto.resetQueryResultText();
            dto.setQueryResultObject(null);
        }
    } catch (CommonException | RuntimeException e) {
        result.recordFatalError("Couldn't execute query", e);
        LoggingUtils.logUnexpectedException(LOGGER, "Couldn't execute query", e);
        dto.setQueryResultText(e.getMessage());
        dto.setQueryResultObject(e);
    } finally {
        result.computeStatus();
    }
    showResult(result);
    target.add(this);
}
Also used : RepositoryQueryDiagResponse(com.evolveum.midpoint.schema.RepositoryQueryDiagResponse) Task(com.evolveum.midpoint.task.api.Task) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) RepositoryQueryDiagRequest(com.evolveum.midpoint.schema.RepositoryQueryDiagRequest) RepoQueryDto(com.evolveum.midpoint.web.page.admin.configuration.dto.RepoQueryDto) CommonException(com.evolveum.midpoint.util.exception.CommonException)

Aggregations

RepositoryQueryDiagRequest (com.evolveum.midpoint.schema.RepositoryQueryDiagRequest)1 RepositoryQueryDiagResponse (com.evolveum.midpoint.schema.RepositoryQueryDiagResponse)1 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)1 Task (com.evolveum.midpoint.task.api.Task)1 CommonException (com.evolveum.midpoint.util.exception.CommonException)1 RepoQueryDto (com.evolveum.midpoint.web.page.admin.configuration.dto.RepoQueryDto)1