@Override protected void init() { serializer = context.getPrismContext() .xmlSerializer() .options(SerializationOptions.createSerializeForExport()); }
private SearchProducerWorker createProducer(BlockingQueue<PrismObject> queue, OperationStatus operation, List<SearchProducerWorker> producers, ObjectTypes type, ObjectFilter filter) { ObjectQuery query = context.getPrismContext().queryFactory().createQuery(filter); return new SearchProducerWorker(context, options, queue, operation, producers, type, query); } }
private RefFilter createResourceRefFilter(String oid) throws SchemaException { PrismContext prismContext = context.getPrismContext(); List<PrismReferenceValue> values = new ArrayList<>(); if (oid != null) { values.add(prismContext.itemFactory().createReferenceValue(oid, ResourceType.COMPLEX_TYPE)); } SchemaRegistry registry = prismContext.getSchemaRegistry(); PrismReferenceDefinition def = registry.findItemDefinitionByFullPath(ShadowType.class, PrismReferenceDefinition.class, ShadowType.F_RESOURCE_REF); return prismContext.queryFactory().createReferenceEqual(ShadowType.F_RESOURCE_REF, def, values); }
@Override protected void init() { validator = new ObjectValidator(context.getPrismContext()); String warnOption = options.getWarn(); if (warnOption == null) { validator.setAllWarnings(); } else { String[] warnCategories = warnOption.split(","); for (String warnCategory: warnCategories) { switch (warnCategory) { case "deprecated": validator.setWarnDeprecated(true); break; case "plannedRemoval": validator.setWarnPlannedRemoval(true); break; default: System.err.println("Unknown warn option '"+warnCategory+"'"); break; } } } }
@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; }
BlockingQueue<PrismObject> queue, OperationStatus operation, List<SearchProducerWorker> producers, ObjectFilter filter) { QueryFactory queryFactory = context.getPrismContext().queryFactory(); List<SearchProducerWorker> shadowProducers = new ArrayList<>();
public static ObjectQuery createObjectQuery(FileReference ref, NinjaContext context, Class<? extends ObjectType> objectClass) throws IOException, SchemaException { if (ref == null) { return null; } String filterStr = ref.getValue(); if (ref.getReference() != null) { File file = ref.getReference(); filterStr = FileUtils.readFileToString(file, context.getCharset()); } PrismContext prismContext = context.getPrismContext(); PrismParserNoIO parser = prismContext.parserFor(filterStr); RootXNode root = parser.parseToXNode(); ObjectFilter filter = context.getQueryConverter().parseFilter(root.toMapXNode(), objectClass); return prismContext.queryFactory().createQuery(filter); }