public AccessCertificationCaseType getCase(String campaignOid, long caseId, @SuppressWarnings("unused") Task task, OperationResult result) throws SchemaException { QueryFactory queryFactory = prismContext.queryFactory(); ObjectFilter filter = queryFactory.createAnd( queryFactory.createOwnerHasOidIn(campaignOid), queryFactory.createInOid(String.valueOf(caseId)) ); ObjectQuery query = queryFactory.createQuery(filter); List<AccessCertificationCaseType> caseList = repositoryService.searchContainers(AccessCertificationCaseType.class, query, null, result); if (caseList.isEmpty()) { return null; } else if (caseList.size() == 1) { return caseList.get(0); } else { throw new IllegalStateException("More than one certification case with ID " + caseId + " in campaign " + campaignOid); } }
@Override public void execute() throws Exception { OperationResult result = new OperationResult(OPERATION_IMPORT); OperationStatus progress = new OperationStatus(context, result); BlockingQueue<PrismObject> queue = new LinkedBlockingQueue<>(QUEUE_CAPACITY_PER_THREAD * options.getMultiThread()); // "+ 2" will be used for producer and progress reporter ExecutorService executor = Executors.newFixedThreadPool(options.getMultiThread() + 2); ImportProducerWorker producer; if (options.getOid() != null) { InOidFilter filter = context.getPrismContext().queryFactory().createInOid(options.getOid()); producer = importByFilter(filter, true, queue, progress); } else { ObjectFilter filter = NinjaUtils.createObjectFilter(options.getFilter(), context, ObjectType.class); // todo ok? (ObjectType) producer = importByFilter(filter, false, queue, progress); } executor.execute(producer); Thread.sleep(CONSUMERS_WAIT_FOR_START); executor.execute(new ProgressReporterWorker(context, options, queue, progress)); List<ImportConsumerWorker> consumers = createConsumers(queue, progress); consumers.stream().forEach(c -> executor.execute(c)); executor.shutdown(); executor.awaitTermination(NinjaUtils.WAIT_FOR_EXECUTOR_FINISH, TimeUnit.DAYS); handleResultOnFinish(progress, "Import finished"); }
private void deleteByOid() throws SchemaException, IOException { QueryFactory queryFactory = context.getPrismContext().queryFactory(); InOidFilter filter = queryFactory.createInOid(options.getOid()); ObjectQuery query = queryFactory.createQuery(filter); deleteByFilter(query); }
private List<SearchProducerWorker> createProducers(BlockingQueue<PrismObject> queue, OperationStatus operation) throws SchemaException, IOException { QueryFactory queryFactory = context.getPrismContext().queryFactory(); List<SearchProducerWorker> producers = new ArrayList<>(); if (options.getOid() != null) { Set<ObjectTypes> types = options.getType(); ObjectTypes type = types.isEmpty() ? ObjectTypes.OBJECT : types.iterator().next(); InOidFilter filter = queryFactory.createInOid(options.getOid()); ObjectQuery query = queryFactory.createQuery(filter); producers.add(new SearchProducerWorker(context, options, queue, operation, producers, type, query)); return producers; } List<ObjectTypes> types = NinjaUtils.getTypes(options.getType()); for (ObjectTypes type : types) { ObjectFilter filter = NinjaUtils.createObjectFilter(options.getFilter(), context, type.getClassDefinition()); ObjectQuery query = queryFactory.createQuery(filter); if (ObjectTypes.SHADOW.equals(type)) { List<SearchProducerWorker> shadowProducers = createProducersForShadows(context, queue, operation, producers, filter); producers.addAll(shadowProducers); continue; } producers.add(new SearchProducerWorker(context, options, queue, operation, producers, type, query)); } return producers; }
if (special == SpecialObjectSpecificationType.SELF) { String principalOid = principal.getOid(); specialFilter = ObjectQueryUtil.filterOr(specialFilter, prismContext.queryFactory().createInOid(principalOid), prismContext); } else {