Search in sources :

Example 1 with ValueSetDefinitionType

use of com.evolveum.midpoint.xml.ns._public.common.common_3.ValueSetDefinitionType in project midpoint by Evolveum.

the class MappingParser method parseSource.

private <IV extends PrismValue, ID extends ItemDefinition<?>> Source<IV, ID> parseSource(VariableBindingDefinitionType sourceDefinition, OperationResult result) throws SchemaException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException {
    ItemPath path = getSourcePath(sourceDefinition);
    @NotNull QName sourceQName = sourceDefinition.getName() != null ? sourceDefinition.getName() : ItemPath.toName(path.last());
    String variableName = sourceQName.getLocalPart();
    TypedValue<?> typedSourceObject = ExpressionUtil.resolvePathGetTypedValue(path, m.variables, true, m.getTypedSourceContext(), m.beans.objectResolver, m.beans.prismContext, "source definition in " + m.getMappingContextDescription(), m.getTask(), result);
    Object sourceObject = typedSourceObject != null ? typedSourceObject.getValue() : null;
    Item<IV, ID> itemOld = null;
    ItemDelta<IV, ID> delta = null;
    Item<IV, ID> itemNew = null;
    ItemPath resolvePath = path;
    ItemPath residualPath = null;
    Collection<? extends ItemDelta<?, ?>> subItemDeltas = null;
    if (sourceObject != null) {
        if (sourceObject instanceof ItemDeltaItem<?, ?>) {
            // noinspection unchecked
            itemOld = ((ItemDeltaItem<IV, ID>) sourceObject).getItemOld();
            // noinspection unchecked
            delta = ((ItemDeltaItem<IV, ID>) sourceObject).getDelta();
            // noinspection unchecked
            itemNew = ((ItemDeltaItem<IV, ID>) sourceObject).getItemNew();
            // noinspection unchecked
            residualPath = ((ItemDeltaItem<IV, ID>) sourceObject).getResidualPath();
            // noinspection unchecked
            resolvePath = ((ItemDeltaItem<IV, ID>) sourceObject).getResolvePath();
            // noinspection unchecked
            subItemDeltas = ((ItemDeltaItem<IV, ID>) sourceObject).getSubItemDeltas();
        } else if (sourceObject instanceof Item<?, ?>) {
            // noinspection unchecked
            itemOld = (Item<IV, ID>) sourceObject;
            // noinspection unchecked
            itemNew = (Item<IV, ID>) sourceObject;
        } else {
            throw new IllegalStateException("Unknown resolve result " + sourceObject);
        }
    }
    ID sourceItemDefinition = typedSourceObject != null ? typedSourceObject.getDefinition() : null;
    // apply domain
    ValueSetDefinitionType domainSetType = sourceDefinition.getSet();
    if (domainSetType != null) {
        ValueSetDefinition<IV, ID> setDef = new ValueSetDefinition<>(domainSetType, sourceItemDefinition, m.valueMetadataDefinition, m.expressionProfile, variableName, null, "domain of " + variableName, "domain of " + variableName + " in " + m.getMappingContextDescription(), m.getTask(), result);
        setDef.init(m.beans.expressionFactory);
        setDef.setAdditionalVariables(m.variables);
        try {
            if (itemOld != null) {
                // noinspection unchecked
                itemOld = itemOld.clone();
                itemOld.filterValues(setDef::containsTunnel);
                itemOld.filterYields(setDef::containsYieldTunnel);
            }
            if (itemNew != null) {
                // noinspection unchecked
                itemNew = itemNew.clone();
                itemNew.filterValues(setDef::containsTunnel);
                itemNew.filterYields(setDef::containsYieldTunnel);
            }
            if (delta != null) {
                delta = delta.clone();
                delta.filterValues(setDef::containsTunnel);
                delta.filterYields(setDef::containsYieldTunnel);
            }
        } catch (TunnelException te) {
            unwrapTunnelException(te);
        }
    }
    Source<IV, ID> source = new Source<>(itemOld, delta, itemNew, sourceQName, sourceItemDefinition);
    source.setResidualPath(residualPath);
    source.setResolvePath(resolvePath);
    source.setSubItemDeltas(subItemDeltas);
    return source;
}
Also used : QName(javax.xml.namespace.QName) NotNull(org.jetbrains.annotations.NotNull) Source(com.evolveum.midpoint.repo.common.expression.Source) Item(com.evolveum.midpoint.prism.Item) ItemDeltaItem(com.evolveum.midpoint.prism.util.ItemDeltaItem) ItemDeltaItem(com.evolveum.midpoint.prism.util.ItemDeltaItem) ValueSetDefinitionType(com.evolveum.midpoint.xml.ns._public.common.common_3.ValueSetDefinitionType) ValueSetDefinition(com.evolveum.midpoint.repo.common.expression.ValueSetDefinition) ItemPath(com.evolveum.midpoint.prism.path.ItemPath)

Aggregations

Item (com.evolveum.midpoint.prism.Item)1 ItemPath (com.evolveum.midpoint.prism.path.ItemPath)1 ItemDeltaItem (com.evolveum.midpoint.prism.util.ItemDeltaItem)1 Source (com.evolveum.midpoint.repo.common.expression.Source)1 ValueSetDefinition (com.evolveum.midpoint.repo.common.expression.ValueSetDefinition)1 ValueSetDefinitionType (com.evolveum.midpoint.xml.ns._public.common.common_3.ValueSetDefinitionType)1 QName (javax.xml.namespace.QName)1 NotNull (org.jetbrains.annotations.NotNull)1