List of usage examples for org.apache.commons.collections4 IteratorUtils chainedIterator
public static <E> Iterator<E> chainedIterator(final Iterator<? extends E> iterator1, final Iterator<? extends E> iterator2)
From source file:com.link_intersystems.util.graph.GraphFacade.java
/** * Creates a predicated {@link Node} iterator that iterates the {@link Node} * s per Predicate that is specified using the {@link NodeIterateStrategy}. * <p>// w w w. ja va 2 s. com * Take the following node structure for example * * <pre> * A * +------------+------------+ * B C D * +----+----+ | +---+------------+ * E F G H I J K * +------+------+ * L M N * </pre> * * If we assume that we have 3 {@link Predicate}s * <ul> * <li>The 1. {@link Predicate} matches {@link Node}s A,C,H,D,K</li> * <li>The 2. {@link Predicate} matches {@link Node}s A,B,E,F</li> * <li>The 3. {@link Predicate} matches {@link Node}s D,J,M,N</li> * </ul> * and we construct a per predicated node iterator using * * <pre> * {@link GraphFacade#perPredicateNodeIterator(NodeIterateStrategy, Node, Predicate...) GraphFacade.perPredicatedNodeIterator(BREADTH_FIRST, startNodeA, pred1, pred2, pred3)}; * </pre> * * The resulting iterator will iterate the node structure using a breadth * first strategy for every {@link Predicate} starting at startNodeA. <br/> * The result will be: * * <pre> * breadth first breadth first breadth first * matching matching matching * pred1 pred2 pred3 * +-----------+ +-------+ +-------+ * A C D H K A B E F D J M N * * iterate order --> * </pre> * * </p> * * @param nodeIterateStrategy * @param startNode * @param nodeIterateOrderPredicates * @return */ @SuppressWarnings("unchecked") public static Iterator<Node> perPredicateNodeIterator(NodeIterateStrategy nodeIterateStrategy, Node startNode, Predicate... nodeIterateOrderPredicates) { Iterator<Node> iterator = IteratorUtils.EMPTY_ITERATOR; for (int i = 0; i < nodeIterateOrderPredicates.length; i++) { Predicate predicate = nodeIterateOrderPredicates[i]; Iterator<Node> nodeStrategyIterator = null; switch (nodeIterateStrategy) { case BREADTH_FIRST: nodeStrategyIterator = new BreadthFirstNodeIterator(startNode); break; case DEPTH_FIRST: nodeStrategyIterator = new DepthFirstNodeIterator(startNode); break; } Iterator<Node> predicateFilterIterator = IteratorUtils.filteredIterator(nodeStrategyIterator, predicate); iterator = IteratorUtils.chainedIterator(iterator, predicateFilterIterator); } return iterator; }
From source file:org.apache.syncope.core.provisioning.java.data.ResourceDataBinderImpl.java
@Override public ExternalResource update(final ExternalResource resource, final ResourceTO resourceTO) { if (resourceTO == null) { return null; }// w ww.j ava 2s . c o m resource.setKey(resourceTO.getKey()); if (resourceTO.getConnector() != null) { ConnInstance connector = connInstanceDAO.find(resourceTO.getConnector()); resource.setConnector(connector); if (!connector.getResources().contains(resource)) { connector.add(resource); } } resource.setEnforceMandatoryCondition(resourceTO.isEnforceMandatoryCondition()); resource.setPropagationPriority(resourceTO.getPropagationPriority()); resource.setRandomPwdIfNotProvided(resourceTO.isRandomPwdIfNotProvided()); // 1. add or update all (valid) provisions from TO for (ProvisionTO provisionTO : resourceTO.getProvisions()) { AnyType anyType = anyTypeDAO.find(provisionTO.getAnyType()); if (anyType == null) { LOG.debug("Invalid {} specified {}, ignoring...", AnyType.class.getSimpleName(), provisionTO.getAnyType()); } else { Provision provision = resource.getProvision(anyType); if (provision == null) { provision = entityFactory.newEntity(Provision.class); provision.setResource(resource); resource.add(provision); provision.setAnyType(anyType); } if (provisionTO.getObjectClass() == null) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidProvision); sce.getElements().add("Null " + ObjectClass.class.getSimpleName()); throw sce; } provision.setObjectClass(new ObjectClass(provisionTO.getObjectClass())); // add all classes contained in the TO for (String name : provisionTO.getAuxClasses()) { AnyTypeClass anyTypeClass = anyTypeClassDAO.find(name); if (anyTypeClass == null) { LOG.warn("Ignoring invalid {}: {}", AnyTypeClass.class.getSimpleName(), name); } else { provision.add(anyTypeClass); } } // remove all classes not contained in the TO for (Iterator<? extends AnyTypeClass> itor = provision.getAuxClasses().iterator(); itor .hasNext();) { AnyTypeClass anyTypeClass = itor.next(); if (!provisionTO.getAuxClasses().contains(anyTypeClass.getKey())) { itor.remove(); } } if (provisionTO.getMapping() == null) { provision.setMapping(null); } else { Mapping mapping = provision.getMapping(); if (mapping == null) { mapping = entityFactory.newEntity(Mapping.class); mapping.setProvision(provision); provision.setMapping(mapping); } else { mapping.getItems().clear(); } AnyTypeClassTO allowedSchemas = new AnyTypeClassTO(); for (Iterator<AnyTypeClass> itor = IteratorUtils.chainedIterator( provision.getAnyType().getClasses().iterator(), provision.getAuxClasses().iterator()); itor.hasNext();) { AnyTypeClass anyTypeClass = itor.next(); allowedSchemas.getPlainSchemas().addAll(CollectionUtils.collect( anyTypeClass.getPlainSchemas(), EntityUtils.<PlainSchema>keyTransformer())); allowedSchemas.getDerSchemas().addAll(CollectionUtils.collect(anyTypeClass.getDerSchemas(), EntityUtils.<DerSchema>keyTransformer())); allowedSchemas.getVirSchemas().addAll(CollectionUtils.collect(anyTypeClass.getVirSchemas(), EntityUtils.<VirSchema>keyTransformer())); } populateMapping(provisionTO.getMapping(), mapping, allowedSchemas); } if (provisionTO.getVirSchemas().isEmpty()) { for (VirSchema schema : virSchemaDAO.findByProvision(provision)) { virSchemaDAO.delete(schema.getKey()); } } else { for (String schemaName : provisionTO.getVirSchemas()) { VirSchema schema = virSchemaDAO.find(schemaName); if (schema == null) { LOG.debug("Invalid {} specified: {}, ignoring...", VirSchema.class.getSimpleName(), schemaName); } else { schema.setProvision(provision); } } } } } // 2. remove all provisions not contained in the TO for (Iterator<? extends Provision> itor = resource.getProvisions().iterator(); itor.hasNext();) { Provision provision = itor.next(); if (resourceTO.getProvision(provision.getAnyType().getKey()) == null) { for (VirSchema schema : virSchemaDAO.findByProvision(provision)) { virSchemaDAO.delete(schema.getKey()); } itor.remove(); } } // 3. orgUnit if (resourceTO.getOrgUnit() == null && resource.getOrgUnit() != null) { resource.getOrgUnit().setResource(null); resource.setOrgUnit(null); } else if (resourceTO.getOrgUnit() != null) { OrgUnitTO orgUnitTO = resourceTO.getOrgUnit(); OrgUnit orgUnit = resource.getOrgUnit(); if (orgUnit == null) { orgUnit = entityFactory.newEntity(OrgUnit.class); orgUnit.setResource(resource); resource.setOrgUnit(orgUnit); } if (orgUnitTO.getObjectClass() == null) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidOrgUnit); sce.getElements().add("Null " + ObjectClass.class.getSimpleName()); throw sce; } orgUnit.setObjectClass(new ObjectClass(orgUnitTO.getObjectClass())); if (orgUnitTO.getExtAttrName() == null) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidOrgUnit); sce.getElements().add("Null extAttrName"); throw sce; } orgUnit.setExtAttrName(orgUnitTO.getExtAttrName()); if (orgUnitTO.getConnObjectLink() == null) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidOrgUnit); sce.getElements().add("Null connObjectLink"); throw sce; } orgUnit.setConnObjectLink(orgUnitTO.getConnObjectLink()); } resource.setCreateTraceLevel(resourceTO.getCreateTraceLevel()); resource.setUpdateTraceLevel(resourceTO.getUpdateTraceLevel()); resource.setDeleteTraceLevel(resourceTO.getDeleteTraceLevel()); resource.setProvisioningTraceLevel(resourceTO.getProvisioningTraceLevel()); resource.setPasswordPolicy(resourceTO.getPasswordPolicy() == null ? null : (PasswordPolicy) policyDAO.find(resourceTO.getPasswordPolicy())); resource.setAccountPolicy(resourceTO.getAccountPolicy() == null ? null : (AccountPolicy) policyDAO.find(resourceTO.getAccountPolicy())); resource.setPullPolicy(resourceTO.getPullPolicy() == null ? null : (PullPolicy) policyDAO.find(resourceTO.getPullPolicy())); resource.setConfOverride(new HashSet<>(resourceTO.getConfOverride())); resource.setOverrideCapabilities(resourceTO.isOverrideCapabilities()); resource.getCapabilitiesOverride().clear(); resource.getCapabilitiesOverride().addAll(resourceTO.getCapabilitiesOverride()); resource.getPropagationActionsClassNames().clear(); resource.getPropagationActionsClassNames().addAll(resourceTO.getPropagationActionsClassNames()); return resource; }
From source file:org.apache.syncope.core.provisioning.java.sync.SyncJobDelegate.java
@Override protected String doExecuteProvisioning(final SyncTask syncTask, final Connector connector, final boolean dryRun) throws JobExecutionException { LOG.debug("Executing sync on {}", syncTask.getResource()); List<SyncActions> actions = new ArrayList<>(); for (String className : syncTask.getActionsClassNames()) { try {// ww w .jav a 2 s.co m Class<?> actionsClass = Class.forName(className); SyncActions syncActions = (SyncActions) ApplicationContextProvider.getBeanFactory() .createBean(actionsClass, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, true); actions.add(syncActions); } catch (Exception e) { LOG.warn("Class '{}' not found", className, e); } } ProvisioningProfile<SyncTask, SyncActions> profile = new ProvisioningProfile<>(connector, syncTask); profile.getActions().addAll(actions); profile.setDryRun(dryRun); profile.setResAct(getSyncPolicySpec(syncTask).getConflictResolutionAction()); // Prepare handler for SyncDelta objects (any objects) AnyObjectSyncResultHandler ahandler = (AnyObjectSyncResultHandler) ApplicationContextProvider .getBeanFactory() .createBean(AnyObjectSyncResultHandlerImpl.class, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false); ahandler.setProfile(profile); // Prepare handler for SyncDelta objects (users) UserSyncResultHandler uhandler = (UserSyncResultHandler) ApplicationContextProvider.getBeanFactory() .createBean(UserSyncResultHandlerImpl.class, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false); uhandler.setProfile(profile); // Prepare handler for SyncDelta objects (groups) GroupSyncResultHandler ghandler = (GroupSyncResultHandler) ApplicationContextProvider.getBeanFactory() .createBean(GroupSyncResultHandlerImpl.class, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false); ghandler.setProfile(profile); if (!profile.isDryRun()) { for (SyncActions action : actions) { action.beforeAll(profile); } } for (Provision provision : syncTask.getResource().getProvisions()) { if (provision.getMapping() != null) { SyncResultsHandler handler; switch (provision.getAnyType().getKind()) { case USER: handler = uhandler; break; case GROUP: handler = ghandler; break; case ANY_OBJECT: default: handler = ahandler; } try { Set<MappingItem> linkinMappingItems = new HashSet<>(); for (VirSchema virSchema : virSchemaDAO.findByProvision(provision)) { linkinMappingItems.add(virSchema.asLinkingMappingItem()); } Iterator<MappingItem> mapItems = IteratorUtils.chainedIterator( provision.getMapping().getItems().iterator(), linkinMappingItems.iterator()); switch (syncTask.getSyncMode()) { case INCREMENTAL: SyncToken latestSyncToken = connector.getLatestSyncToken(provision.getObjectClass()); connector.sync(provision.getObjectClass(), provision.getSyncToken(), handler, MappingUtils.buildOperationOptions(mapItems)); if (!dryRun) { provision.setSyncToken(latestSyncToken); resourceDAO.save(provision.getResource()); } break; case FILTERED_RECONCILIATION: ReconciliationFilterBuilder filterBuilder = (ReconciliationFilterBuilder) ApplicationContextProvider .getBeanFactory() .createBean(Class.forName(syncTask.getReconciliationFilterBuilderClassName()), AbstractBeanDefinition.AUTOWIRE_BY_NAME, false); connector.filteredReconciliation(provision.getObjectClass(), filterBuilder, handler, MappingUtils.buildOperationOptions(mapItems)); break; case FULL_RECONCILIATION: default: connector.fullReconciliation(provision.getObjectClass(), handler, MappingUtils.buildOperationOptions(mapItems)); break; } } catch (Throwable t) { throw new JobExecutionException("While syncing from connector", t); } } } try { setGroupOwners(ghandler); } catch (Exception e) { LOG.error("While setting group owners", e); } if (!profile.isDryRun()) { for (SyncActions action : actions) { action.afterAll(profile); } } String result = createReport(profile.getResults(), syncTask.getResource().getSyncTraceLevel(), dryRun); LOG.debug("Sync result: {}", result); return result; }
From source file:uniol.apt.adt.Node.java
/** * Retrieves a view of all edges connected to this node. * @return An unmodifable iterable of edges of given type E. */// w w w .j a va2 s . co m public Iterable<E> getNeighboringEdges() { return IteratorUtils.asIterable( IteratorUtils.chainedIterator(getPresetEdges().iterator(), getPostsetEdges().iterator())); }