Example usage for org.apache.commons.collections4 IteratorUtils chainedIterator

List of usage examples for org.apache.commons.collections4 IteratorUtils chainedIterator

Introduction

In this page you can find the example usage for org.apache.commons.collections4 IteratorUtils chainedIterator.

Prototype

public static <E> Iterator<E> chainedIterator(final Iterator<? extends E> iterator1,
        final Iterator<? extends E> iterator2) 

Source Link

Document

Gets an iterator that iterates through two Iterator s one after another.

Usage

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()));
}