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);
}
Aggregations