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 void cleanupCampaignsByNumber(int maxRecords, Task task, OperationResult parentResult) { OperationResult result = parentResult.createSubresult(OPERATION_CLEANUP_CAMPAIGNS_BY_NUMBER); LOGGER.info("Starting cleanup for closed certification campaigns, keeping {} ones.", maxRecords); int deleted = 0; Set<String> poisonedCampaigns = new HashSet<>(); try { for (;;) { ObjectQuery query = prismContext.queryFor(AccessCertificationCampaignType.class) .item(AccessCertificationCampaignType.F_STATE).eq(AccessCertificationCampaignStateType.CLOSED) .and().not().id(poisonedCampaigns.toArray(new String[0])) // hoping there are not many of these .desc(AccessCertificationCampaignType.F_END_TIMESTAMP) .offset(maxRecords) .maxSize(DELETE_BLOCK_SIZE) .build(); int delta = searchAndDeleteCampaigns(query, poisonedCampaigns, result, task); if (delta == 0) { LOGGER.info("Deleted {} campaigns.", deleted); return; } } } finally { result.computeStatusIfUnknown(); } }
private ObjectQuery createQueryBySecondaryIdentifier(ShadowType shadow) throws SchemaException { // TODO TODO TODO set matching rule instead of null in equlas filter Collection<ResourceAttribute<?>> secondaryIdentifiers = ShadowUtil.getSecondaryIdentifiers(shadow); S_AtomicFilterEntry q = prismContext.queryFor(ShadowType.class); q = q.block(); if (secondaryIdentifiers.isEmpty()) { for (ResourceAttribute<?> primaryIdentifier: ShadowUtil.getPrimaryIdentifiers(shadow)) { q = q.itemAs(primaryIdentifier).or(); } } else { // secondary identifiers connected by 'or' clause for (ResourceAttribute<?> secondaryIdentifier : secondaryIdentifiers) { q = q.itemAs(secondaryIdentifier).or(); } } q = q.none().endBlock().and(); // resource + object class q = q.item(ShadowType.F_RESOURCE_REF).ref(shadow.getResourceRef().getOid()).and(); return q.item(ShadowType.F_OBJECT_CLASS).eq(shadow.getObjectClass()).build(); }
private List<Task> listWaitingTasks(TaskWaitingReason reason, OperationResult result) throws SchemaException { S_AtomicFilterEntry q = prismContext.queryFor(TaskType.class); q = q.item(TaskType.F_EXECUTION_STATUS).eq(TaskExecutionStatusType.WAITING).and(); if (reason != null) { q = q.item(TaskType.F_WAITING_REASON).eq(reason.toTaskType()).and(); } ObjectQuery query = q.all().build(); List<PrismObject<TaskType>> prisms = repositoryService.searchObjects(TaskType.class, query, null, result); List<Task> tasks = resolveTasksFromTaskTypes(prisms, result); result.recordSuccessIfUnknown(); return tasks; }
@Test public void test330NotNotNone() throws Exception { System.out.println("===[ test330NotNotNone ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); // WHEN ObjectFilter filter = prismContext.queryFor(UserType.class) .not().block().not().none().endBlock() .buildFilter(); System.out.println("Original filter:\n" + filter.debugDump()); // THEN ObjectFilter simplified = ObjectQueryUtil.simplify(filter, prismContext); System.out.println("Simplified filter:\n" + DebugUtil.debugDump(simplified)); assertTrue("Wrong simplified filter: " + simplified, simplified instanceof NoneFilter); }
q = q.itemWithDef(def, ShadowType.F_ATTRIBUTES, def.getName()).eq(normalizedIdentifierValue).and(); q = q.item(ShadowType.F_OBJECT_CLASS).eq(objectClassDefinition.getTypeName()).and(); return q.item(ShadowType.F_RESOURCE_REF).ref(ctx.getResourceOid()).build();
@Test public void test320NotNotAll() throws Exception { System.out.println("===[ test320NotNotAll ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); // WHEN ObjectFilter filter = prismContext.queryFor(UserType.class) .not().block().not().all().endBlock() .buildFilter(); System.out.println("Original filter:\n" + filter.debugDump()); // THEN ObjectFilter simplified = ObjectQueryUtil.simplify(filter, prismContext); System.out.println("Simplified filter:\n" + DebugUtil.debugDump(simplified)); assertTrue("Wrong simplified filter: " + simplified, simplified == null || simplified instanceof AllFilter); }
@Test public void test310NotNone() throws Exception { System.out.println("===[ test310NotNone ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); // WHEN ObjectFilter filter = prismContext.queryFor(UserType.class) .not().none() .buildFilter(); System.out.println("Original filter:\n" + filter.debugDump()); // THEN ObjectFilter simplified = ObjectQueryUtil.simplify(filter, prismContext); System.out.println("Simplified filter:\n" + DebugUtil.debugDump(simplified)); assertTrue("Wrong simplified filter: " + simplified, simplified == null || simplified instanceof AllFilter); }
@Test public void test300NotAll() throws Exception { System.out.println("===[ test300NotAll ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); // WHEN ObjectFilter filter = prismContext.queryFor(UserType.class) .not().all() .buildFilter(); System.out.println("Original filter:\n" + filter.debugDump()); // THEN ObjectFilter simplified = ObjectQueryUtil.simplify(filter, prismContext); System.out.println("Simplified filter:\n" + DebugUtil.debugDump(simplified)); assertTrue("Wrong simplified filter: " + simplified, simplified instanceof NoneFilter); }
@Test public void test590Logicals() throws Exception { final String TEST_NAME = "test590Logicals"; displayTestTitle(TEST_NAME); ObjectQuery q = getPrismContext().queryFor(UserType.class) .block() .all() .or().none() .or().undefined() .endBlock() .and().none() .and() .not() .block() .all() .and().undefined() .endBlock() .build(); checkQueryRoundtripFile(UserType.class, q, TEST_NAME); }
@Test public void testExtensionReferenceNonNull() throws SchemaException { ObjectQuery query = prismContext.queryFor(GenericObjectType.class) .not().item(ObjectType.F_EXTENSION, new QName("referenceType")) .isNull() .build(); OperationResult result = new OperationResult("search"); List<PrismObject<GenericObjectType>> cases = repositoryService.searchObjects(GenericObjectType.class, query, null, result); result.recomputeStatus(); assertTrue(result.isSuccess()); assertEquals("Should find 1 object", 1, cases.size()); }
private void cleanupCampaignsByDate(Duration maxAge, Task task, OperationResult parentResult) { if (maxAge.getSign() > 0) { maxAge = maxAge.negate(); } Date deleteCampaignsFinishedUpTo = new Date(); maxAge.addTo(deleteCampaignsFinishedUpTo); LOGGER.info("Starting cleanup for closed certification campaigns deleting up to {} (max age '{}').", deleteCampaignsFinishedUpTo, maxAge); OperationResult result = parentResult.createSubresult(OPERATION_CLEANUP_CAMPAIGNS_BY_AGE); XMLGregorianCalendar timeXml = createXMLGregorianCalendar(deleteCampaignsFinishedUpTo); int deleted = 0; Set<String> poisonedCampaigns = new HashSet<>(); try { for (;;) { ObjectQuery query = prismContext.queryFor(AccessCertificationCampaignType.class) .item(AccessCertificationCampaignType.F_STATE).eq(AccessCertificationCampaignStateType.CLOSED) .and().item(AccessCertificationCampaignType.F_END_TIMESTAMP).lt(timeXml) .and().not().id(poisonedCampaigns.toArray(new String[0])) // hoping there are not many of these .maxSize(DELETE_BLOCK_SIZE) .build(); int delta = searchAndDeleteCampaigns(query, poisonedCampaigns, result, task); if (delta == 0) { LOGGER.info("Deleted {} campaigns.", deleted); return; } } } finally { result.computeStatusIfUnknown(); } }
@Test public void notBusinessRoleTypeSearchTest() throws Exception { ObjectQuery query = prismContext.queryFor(RoleType.class) .not().item(RoleType.F_ROLE_TYPE).eq("business") .build(); OperationResult result = new OperationResult("search"); List<PrismObject<RoleType>> roles = repositoryService.searchObjects(RoleType.class, query, null, result); result.recomputeStatus(); assertTrue(result.isSuccess()); assertEquals("Should find two roles", 2, roles.size()); int judge = roles.get(0).getName().getOrig().startsWith("J") ? 0 : 1; assertEquals("Wrong role1 name", "Judge", roles.get(judge).getName().getOrig()); assertEquals("Wrong role2 name", "Admin-owned role", roles.get(1-judge).getName().getOrig()); }
/** * Returns numbers of assignees with the given relation name. */ private int getNumberOfAssigneesExceptMyself(AbstractRoleType target, String selfOid, QName relation, OperationResult result) throws SchemaException { if (target.getOid() == null) { return 0; } S_AtomicFilterExit q = prismContext.queryFor(FocusType.class) .item(FocusType.F_ASSIGNMENT, AssignmentType.F_TARGET_REF).ref( prismContext.itemFactory().createReferenceValue(target.getOid()).relation(relation)); if (selfOid != null) { q = q.and().not().id(selfOid); } ObjectQuery query = q.build(); return repositoryService.countObjects(FocusType.class, query, null, result); }
@Test public void nonEmptyRoleTypeSearchTest() throws Exception { ObjectQuery query = prismContext.queryFor(RoleType.class) .not().item(RoleType.F_ROLE_TYPE).isNull() .build(); OperationResult result = new OperationResult("search"); List<PrismObject<RoleType>> roles = repositoryService.searchObjects(RoleType.class, query, null, result); result.recomputeStatus(); assertTrue(result.isSuccess()); assertEquals("Should find one role", 1, roles.size()); assertEquals("Wrong role name", "Pirate", roles.get(0).getName().getOrig()); }
ObjectQuery query = prismContext.queryFor(AccessCertificationCampaignType.class) .item(AccessCertificationCampaignType.F_STATE).eq(AccessCertificationCampaignStateType.CLOSED) .and().not().id("10-10-10-10-10") // hoping there are not many of these .desc(AccessCertificationCampaignType.F_END_TIMESTAMP) .offset(100)
public List<PrismObject<AccessCertificationCampaignType>> getCertificationCampaigns(Boolean alsoClosedCampaigns) throws SchemaException, ConfigurationException, ObjectNotFoundException, CommunicationException, SecurityViolationException, ExpressionEvaluationException { Task task = taskManager.createTaskInstance(); ObjectQuery query = prismContext.queryFor(AccessCertificationCampaignType.class) .asc(F_NAME) .build(); if (!Boolean.TRUE.equals(alsoClosedCampaigns)) { query.addFilter( prismContext.queryFor(AccessCertificationCampaignType.class) .not().item(F_STATE).eq(CLOSED) .buildFilter() ); } Collection<SelectorOptions<GetOperationOptions>> options = schemaHelper.getOperationOptionsBuilder() .root().resolveNames() .item(AccessCertificationCampaignType.F_CASE).retrieve() .build(); return model.searchObjects(AccessCertificationCampaignType.class, query, options, task, task.getResult()); }
.item(AccessCertificationCampaignType.F_STATE).eq(AccessCertificationCampaignStateType.CLOSED) .and().item(AccessCertificationCampaignType.F_END_TIMESTAMP).lt(XmlTypeConverter.createXMLGregorianCalendar(System.currentTimeMillis())) .and().not().id(new String[0]) .maxSize(10) .build();
ObjectQuery query = prismContext.queryFor(NodeType.class).not().item(NodeType.F_NODE_IDENTIFIER).eq(nodeId).build(); otherClusterNodes = modelService.searchObjects(NodeType.class, query, null, task, result); } catch (SchemaException | ObjectNotFoundException | SecurityViolationException | CommunicationException