private Collection<String> getNodeIdentifiers(WorkerTasksPerNodeConfigurationType perNodeConfig, OperationResult opResult) throws SchemaException { if (!perNodeConfig.getNodeIdentifier().isEmpty()) { return perNodeConfig.getNodeIdentifier(); } else { SearchResultList<PrismObject<NodeType>> nodes = taskManager.searchObjects(NodeType.class, null, null, opResult); return nodes.stream() .filter(n -> n.asObjectable().getExecutionStatus() == NodeExecutionStatusType.RUNNING) .map(n -> n.asObjectable().getNodeIdentifier()) .collect(Collectors.toSet()); } }
private Collection<ObjectReferenceType> resolveQuery(Class<? extends ObjectType> type, QueryType queryBean, ExecutionContext context, OperationResult result) throws SchemaException, ConfigurationException, ObjectNotFoundException, CommunicationException, SecurityViolationException, ExpressionEvaluationException { ObjectQuery query = context.getQueryConverter().createObjectQuery(type, queryBean); SearchResultList<? extends PrismObject<? extends ObjectType>> objects = context.getModelService() .searchObjects(type, query, null, context.getTask(), result); return objects.stream().map(o -> ObjectTypeUtil.createObjectRef(o, context.getPrismContext())).collect(Collectors.toList()); }
private Set<String> getProcessInstancesToKeep(OperationResult result) throws SchemaException { ObjectQuery query = prismContext.queryFor(TaskType.class) .not().item(TaskType.F_WORKFLOW_CONTEXT, WfContextType.F_PROCESS_INSTANCE_ID).isNull() .build(); SearchResultList<PrismObject<TaskType>> tasks = taskManager.searchObjects(TaskType.class, query, null, result); return tasks.stream() .map(t -> t.asObjectable().getWorkflowContext().getProcessInstanceId()) .collect(Collectors.toSet()); }
private List<ObjectReferenceType> getMembers(ObjectReferenceType abstractRoleRef, OperationResult result) throws SchemaException { Collection<PrismReferenceValue> references = ObjectQueryUtil .createReferences(abstractRoleRef.getOid(), RelationKindType.MEMBER, relationRegistry); ObjectQuery query = references.isEmpty() ? prismContext.queryFor(UserType.class).none().build() : prismContext.queryFor(UserType.class) .item(UserType.F_ROLE_MEMBERSHIP_REF).ref(references) .build(); return repositoryService.searchObjects(UserType.class, query, null, result).stream() .map(obj -> ObjectTypeUtil.createObjectRef(obj, prismContext)) .collect(Collectors.toList()); }
private static Collection<ObjectReferenceType> expandAbstractRole(ObjectReferenceType approverRef, PrismContext prismContext) { ObjectQuery query = prismContext.queryFor(UserType.class) .item(FocusType.F_ROLE_MEMBERSHIP_REF).ref(approverRef.asReferenceValue()) .build(); try { return getCacheRepositoryService() .searchObjects(UserType.class, query, null, new OperationResult("dummy")) .stream() .map(o -> ObjectTypeUtil.createObjectRef(o, prismContext)) .collect(Collectors.toList()); } catch (SchemaException e) { throw new SystemException("Couldn't resolve " + approverRef + ": " + e.getMessage(), e); } }
private <O extends ObjectType, F extends ObjectType> List<ObjectReferenceType> resolveReferenceFromFilter(Class<O> clazz, SearchFilterType filter, String sourceDescription, LensContext<F> lensContext, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { ExpressionEnvironment<F> env = new ExpressionEnvironment<>(); env.setLensContext(lensContext); env.setCurrentResult(result); env.setCurrentTask(task); ModelExpressionThreadLocalHolder.pushExpressionEnvironment(env); try { PrismObject<SystemConfigurationType> systemConfiguration = systemObjectCache.getSystemConfiguration(result); ExpressionVariables variables = ModelImplUtils.getDefaultExpressionVariables(getFocusObjectable(lensContext), null, null, systemConfiguration.asObjectable()); ObjectFilter origFilter = prismContext.getQueryConverter().parseFilter(filter, clazz); ObjectFilter evaluatedFilter = ExpressionUtil .evaluateFilterExpressions(origFilter, variables, mappingFactory.getExpressionFactory(), prismContext, " evaluating approverRef filter expression ", task, result); if (evaluatedFilter == null) { throw new SchemaException("Filter could not be evaluated in approverRef in "+sourceDescription+"; original filter = "+origFilter); } SearchResultList<PrismObject<O>> targets = repositoryService.searchObjects(clazz, prismContext.queryFactory().createQuery(evaluatedFilter), null, result); return targets.stream() .map(object -> ObjectTypeUtil.createObjectRef(object, prismContext)) .collect(Collectors.toList()); } finally { ModelExpressionThreadLocalHolder.popExpressionEnvironment(); } }
@Test public void test100FixDuplicatesWithDifferentObjectClasses() throws Exception { final String TEST_NAME = "test100FixDuplicatesWithDifferentObjectClasses"; TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // GIVEN SearchResultList<PrismObject<ShadowType>> shadowsBefore = repositoryService .searchObjects(ShadowType.class, null, null, result); display("shadows before", shadowsBefore); assertEquals("Wrong # of shadows before", 3, shadowsBefore.size()); repoAddObjectFromFile(TASK_SHADOW_INTEGRITY_CHECK_FILE, result); // WHEN displayWhen(TEST_NAME); waitForTaskCloseOrSuspend(TASK_SHADOW_INTEGRITY_CHECK_OID); // THEN displayThen(TEST_NAME); PrismObject<TaskType> taskAfter = getTask(TASK_SHADOW_INTEGRITY_CHECK_OID); display("task after", taskAfter); SearchResultList<PrismObject<ShadowType>> shadowsAfter = repositoryService .searchObjects(ShadowType.class, null, null, result); display("shadows after", shadowsAfter); assertEquals("Wrong # of shadows after", 2, shadowsAfter.size()); PrismObject<ShadowType> intent1 = shadowsAfter.stream() .filter(o -> "intent1".equals(o.asObjectable().getIntent())).findFirst().orElse(null); assertNotNull("intent1 shadow was removed", intent1); }
AccessCertificationCampaignType campaign = campaigns.stream() .filter(c -> MODIFICATION_CERT_DEF_OID.equals(c.asObjectable().getDefinitionRef().getOid())) .findFirst()