use of com.evolveum.midpoint.schema.SearchResultList in project midpoint by Evolveum.
the class WorkflowManagerImpl method searchContainers.
@SuppressWarnings("unchecked")
@Override
public <T extends Containerable> SearchResultList<T> searchContainers(Class<T> type, ObjectQuery query, Collection<SelectorOptions<GetOperationOptions>> options, OperationResult parentResult) throws SchemaException {
OperationResult result = parentResult.createSubresult(DOT_INTERFACE + ".searchContainers");
result.addParams(new String[] { "type", "query" }, type, query);
result.addCollectionOfSerializablesAsParam("options", options);
try {
if (!WorkItemType.class.equals(type)) {
throw new UnsupportedOperationException("searchContainers is available only for work items");
}
return (SearchResultList<T>) workItemProvider.searchWorkItems(query, options, result);
} catch (SchemaException | RuntimeException e) {
result.recordFatalError("Couldn't count items: " + e.getMessage(), e);
throw e;
} finally {
result.computeStatusIfUnknown();
}
}
use of com.evolveum.midpoint.schema.SearchResultList in project midpoint by Evolveum.
the class TaskManagerQuartzImpl method searchNodes.
/*
* Gets nodes from repository and adds runtime information to them (taken from ClusterStatusInformation).
*/
// @Override
// public int countNodes(ObjectQuery query, OperationResult result) throws SchemaException {
// return repositoryService.countObjects(NodeType.class, query, result);
// }
private SearchResultList<PrismObject<NodeType>> searchNodes(ObjectQuery query, Collection<SelectorOptions<GetOperationOptions>> options, OperationResult result) throws SchemaException {
ClusterStatusInformation clusterStatusInformation = getClusterStatusInformation(options, NodeType.class, true, result);
List<PrismObject<NodeType>> nodesInRepository;
try {
nodesInRepository = repositoryService.searchObjects(NodeType.class, query, options, result);
} catch (SchemaException e) {
result.recordFatalError("Couldn't get nodes from repository: " + e.getMessage());
throw e;
}
List<PrismObject<NodeType>> list = new ArrayList<PrismObject<NodeType>>();
if (clusterStatusInformation != null) {
for (PrismObject<NodeType> nodeInRepositoryPrism : nodesInRepository) {
NodeType returnedNode = nodeInRepositoryPrism.asObjectable();
NodeType nodeRuntimeInfo = clusterStatusInformation.findNodeById(returnedNode.getNodeIdentifier());
if (nodeRuntimeInfo != null) {
returnedNode.setExecutionStatus(nodeRuntimeInfo.getExecutionStatus());
returnedNode.setErrorStatus(nodeRuntimeInfo.getErrorStatus());
returnedNode.setConnectionResult(nodeRuntimeInfo.getConnectionResult());
} else {
// node is in repo, but no information on it is present in CSI
// (should not occur except for some temporary conditions, because CSI contains info on all nodes from repo)
returnedNode.setExecutionStatus(NodeExecutionStatusType.COMMUNICATION_ERROR);
OperationResult r = new OperationResult("connect");
r.recordFatalError("Node not known at this moment");
returnedNode.setConnectionResult(r.createOperationResultType());
}
list.add(returnedNode.asPrismObject());
}
} else {
list = nodesInRepository;
}
LOGGER.trace("searchNodes returning {}", list);
result.computeStatus();
return new SearchResultList(list);
}
use of com.evolveum.midpoint.schema.SearchResultList in project midpoint by Evolveum.
the class TestAdHocCertification method test020ModifyIndigo.
@Test
public void test020ModifyIndigo() throws Exception {
final String TEST_NAME = "test020ModifyIndigo";
TestUtil.displayTestTile(this, TEST_NAME);
// GIVEN
Task task = taskManager.createTaskInstance(TestAdHocCertification.class.getName() + "." + TEST_NAME);
task.setOwner(userAdministrator.asPrismObject());
OperationResult result = task.getResult();
// WHEN
TestUtil.displayWhen(TEST_NAME);
@SuppressWarnings({ "unchecked", "raw" }) ObjectDelta<UserType> delta = (ObjectDelta<UserType>) DeltaBuilder.deltaFor(UserType.class, prismContext).item(UserType.F_DESCRIPTION).replace("new description").item(UserType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS).replace(ActivationStatusType.DISABLED).asObjectDelta(USER_INDIGO_OID);
executeChanges(delta, null, task, result);
// THEN
TestUtil.displayThen(TEST_NAME);
result.computeStatus();
TestUtil.assertSuccess(result);
SearchResultList<PrismObject<AccessCertificationCampaignType>> campaigns = repositoryService.searchObjects(AccessCertificationCampaignType.class, null, null, result);
assertEquals("Wrong # of campaigns", 2, campaigns.size());
AccessCertificationCampaignType campaign = campaigns.stream().filter(c -> MODIFICATION_CERT_DEF_OID.equals(c.asObjectable().getDefinitionRef().getOid())).findFirst().orElseThrow(() -> new AssertionError("No modification-triggered campaign")).asObjectable();
campaign = getCampaignWithCases(campaign.getOid());
display("campaign", campaign);
// beware, maybe not all details would match (in the future) - then adapt this test
assertAfterCampaignStart(campaign, modificationCertificationDefinition, 1);
// no cases, no problems
assertPercentComplete(campaign, 0, 0, 0);
}
use of com.evolveum.midpoint.schema.SearchResultList in project midpoint by Evolveum.
the class ProvisioningServiceImpl method searchObjects.
@Override
public <T extends ObjectType> SearchResultList<PrismObject<T>> searchObjects(Class<T> type, ObjectQuery query, Collection<SelectorOptions<GetOperationOptions>> options, Task task, OperationResult parentResult) throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException {
OperationResult result = parentResult.createSubresult(ProvisioningService.class.getName() + ".searchObjects");
result.addParam("objectType", type);
result.addParam("query", query);
result.addContext(OperationResult.CONTEXT_IMPLEMENTATION_CLASS, ProvisioningServiceImpl.class);
final SearchResultList<PrismObject<T>> objListType = new SearchResultList<>(new ArrayList<PrismObject<T>>());
SearchResultMetadata metadata;
try {
if (!ShadowType.class.isAssignableFrom(type)) {
SearchResultList<PrismObject<T>> objects = searchRepoObjects(type, query, options, task, result);
result.computeStatus();
result.recordSuccessIfUnknown();
result.cleanupResult();
// validateObjects(objects);
return objects;
}
final ResultHandler<T> handler = (object, parentResult1) -> objListType.add(object);
metadata = searchObjectsIterative(type, query, options, handler, task, result);
} catch (ConfigurationException | SecurityViolationException | CommunicationException | ObjectNotFoundException | SchemaException | ExpressionEvaluationException | RuntimeException | Error e) {
ProvisioningUtil.recordFatalError(LOGGER, result, "Could not search objects: " + e.getMessage(), e);
throw e;
}
result.computeStatus();
result.cleanupResult();
// validateObjects(objListType);
objListType.setMetadata(metadata);
return objListType;
}
use of com.evolveum.midpoint.schema.SearchResultList in project midpoint by Evolveum.
the class ProvisioningServiceImpl method searchRepoObjects.
@SuppressWarnings("unchecked")
private <T extends ObjectType> SearchResultList<PrismObject<T>> searchRepoObjects(Class<T> type, ObjectQuery query, Collection<SelectorOptions<GetOperationOptions>> options, Task task, OperationResult result) throws SchemaException {
List<PrismObject<T>> repoObjects = null;
// TODO: should searching connectors trigger rediscovery?
Collection<SelectorOptions<GetOperationOptions>> repoOptions = null;
if (GetOperationOptions.isReadOnly(SelectorOptions.findRootOptions(options))) {
repoOptions = SelectorOptions.createCollection(GetOperationOptions.createReadOnly());
}
repoObjects = getCacheRepositoryService().searchObjects(type, query, repoOptions, result);
SearchResultList<PrismObject<T>> newObjListType = new SearchResultList(new ArrayList<PrismObject<T>>());
for (PrismObject<T> repoObject : repoObjects) {
OperationResult objResult = new OperationResult(ProvisioningService.class.getName() + ".searchObjects.object");
try {
PrismObject<T> completeResource = completeObject(type, repoObject, options, task, objResult);
validateObject(completeResource);
objResult.computeStatusIfUnknown();
if (!objResult.isSuccess()) {
// necessary e.g. to skip validation for resources that had issues when checked
completeResource.asObjectable().setFetchResult(objResult.createOperationResultType());
result.addSubresult(objResult);
}
newObjListType.add((PrismObject<T>) completeResource);
// TODO: what else do to with objResult??
} catch (ObjectNotFoundException | SchemaException | CommunicationException | ConfigurationException | ExpressionEvaluationException e) {
LOGGER.error("Error while completing {}: {}. Using non-complete object.", new Object[] { repoObject, e.getMessage(), e });
objResult.recordFatalError(e);
repoObject.asObjectable().setFetchResult(objResult.createOperationResultType());
newObjListType.add(repoObject);
result.addSubresult(objResult);
result.recordPartialError(e);
} catch (RuntimeException e) {
// FIXME: Strictly speaking, the runtime exception should
// not be handled here.
// The runtime exceptions should be considered fatal anyway
// ... but some of the
// ICF exceptions are still translated to system exceptions.
// So this provides
// a better robustness now.
LOGGER.error("System error while completing {}: {}. Using non-complete object.", new Object[] { repoObject, e.getMessage(), e });
objResult.recordFatalError(e);
repoObject.asObjectable().setFetchResult(objResult.createOperationResultType());
newObjListType.add(repoObject);
result.addSubresult(objResult);
result.recordPartialError(e);
}
}
return newObjListType;
}
Aggregations