@Override @NotNull public Collection<V> getZeroSet() { return inner.getZeroSet(); }
public static <T, V extends PrismValue> void assertTripleZero(PrismValueDeltaSetTriple<V> triple, T... expectedValues) { assert triple != null : "triple is null"; assertTripleSet("zero set", triple.getZeroSet(), expectedValues); }
private List<NotificationMessageType> evaluateExpression(ExpressionType expressionType, ExpressionVariables expressionVariables, String shortDesc, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { QName resultName = new QName(SchemaConstants.NS_C, "result"); PrismPropertyDefinition<NotificationMessageType> resultDef = prismContext.definitionFactory().createPropertyDefinition(resultName, NotificationMessageType.COMPLEX_TYPE); Expression<PrismPropertyValue<NotificationMessageType>,PrismPropertyDefinition<NotificationMessageType>> expression = expressionFactory.makeExpression(expressionType, resultDef, shortDesc, task, result); ExpressionEvaluationContext params = new ExpressionEvaluationContext(null, expressionVariables, shortDesc, task, result); PrismValueDeltaSetTriple<PrismPropertyValue<NotificationMessageType>> exprResult = ModelExpressionThreadLocalHolder .evaluateExpressionInContext(expression, params, task, result); return exprResult.getZeroSet().stream().map(PrismPropertyValue::getValue).collect(Collectors.toList()); } }
public boolean evaluateBooleanExpression(ExpressionType expressionType, ExpressionVariables expressionVariables, String shortDesc, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { QName resultName = new QName(SchemaConstants.NS_C, "result"); PrismPropertyDefinition<Boolean> resultDef = prismContext.definitionFactory().createPropertyDefinition(resultName, DOMUtil.XSD_BOOLEAN); Expression<PrismPropertyValue<Boolean>,PrismPropertyDefinition<Boolean>> expression = expressionFactory.makeExpression(expressionType, resultDef, shortDesc, task, result); ExpressionEvaluationContext params = new ExpressionEvaluationContext(null, expressionVariables, shortDesc, task, result); PrismValueDeltaSetTriple<PrismPropertyValue<Boolean>> exprResultTriple = ModelExpressionThreadLocalHolder .evaluateExpressionInContext(expression, params, task, result); Collection<PrismPropertyValue<Boolean>> exprResult = exprResultTriple.getZeroSet(); if (exprResult.size() == 0) { return false; } else if (exprResult.size() > 1) { throw new IllegalStateException("Filter expression should return exactly one boolean value; it returned " + exprResult.size() + " ones"); } Boolean boolResult = exprResult.iterator().next().getValue(); return boolResult != null ? boolResult : false; }
private boolean evaluateBooleanExpression(ExpressionType expressionType, ExpressionVariables expressionVariables, String opContext, Task taskFromModel, OperationResult result) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { PrismContext prismContext = expressionFactory.getPrismContext(); QName resultName = new QName(SchemaConstants.NS_C, "result"); PrismPropertyDefinition<Boolean> resultDef = prismContext.definitionFactory().createPropertyDefinition(resultName, DOMUtil.XSD_BOOLEAN); Expression<PrismPropertyValue<Boolean>,PrismPropertyDefinition<Boolean>> expression = expressionFactory.makeExpression(expressionType, resultDef, opContext, taskFromModel, result); ExpressionEvaluationContext params = new ExpressionEvaluationContext(null, expressionVariables, opContext, taskFromModel, result); PrismValueDeltaSetTriple<PrismPropertyValue<Boolean>> exprResultTriple = ModelExpressionThreadLocalHolder .evaluateExpressionInContext(expression, params, taskFromModel, result); Collection<PrismPropertyValue<Boolean>> exprResult = exprResultTriple.getZeroSet(); if (exprResult.size() == 0) { return false; } else if (exprResult.size() > 1) { throw new IllegalStateException("Expression should return exactly one boolean value; it returned " + exprResult.size() + " ones"); } Boolean boolResult = exprResult.iterator().next().getValue(); return boolResult != null ? boolResult : false; }
private Construction getZeroAccountConstruction( PrismValueDeltaSetTriple<PrismPropertyValue<Construction>> accountConstructionDeltaSetTriple, String description) { Collection<PrismPropertyValue<Construction>> set = accountConstructionDeltaSetTriple.getZeroSet(); return getAccountConstruction(accountConstructionDeltaSetTriple, description, set, "zero"); }
/** * Distributes a value in this triple similar to the placement of other value in the other triple. * E.g. if the value "otherMember" is in the zero set in "otherTriple" then "myMember" will be placed * in zero set in this triple. */ public <O extends PrismValue> void distributeAs(V myMember, PrismValueDeltaSetTriple<O> otherTriple, O otherMember) { otherTriple.getZeroSet(); if (PrismValueCollectionsUtil.containsRealValue(otherTriple.getZeroSet(), otherMember)) { zeroSet.add(myMember); } otherTriple.getPlusSet(); if (PrismValueCollectionsUtil.containsRealValue(otherTriple.getPlusSet(), otherMember)) { plusSet.add(myMember); } otherTriple.getMinusSet(); if (PrismValueCollectionsUtil.containsRealValue(otherTriple.getMinusSet(), otherMember)) { minusSet.add(myMember); } }
public List<NotificationMessageAttachmentType> evaluateNotificationMessageAttachmentTypeExpression(ExpressionType expressionType, ExpressionVariables expressionVariables, String shortDesc, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { QName resultName = new QName(SchemaConstants.NS_C, "result"); PrismPropertyDefinition<NotificationMessageAttachmentType> resultDef = prismContext.definitionFactory().createPropertyDefinition(resultName, NotificationMessageAttachmentType.COMPLEX_TYPE); Expression<PrismPropertyValue<NotificationMessageAttachmentType>,PrismPropertyDefinition<NotificationMessageAttachmentType>> expression = expressionFactory.makeExpression(expressionType, resultDef, shortDesc, task, result); ExpressionEvaluationContext params = new ExpressionEvaluationContext(null, expressionVariables, shortDesc, task, result); PrismValueDeltaSetTriple<PrismPropertyValue<NotificationMessageAttachmentType>> exprResultTriple = ModelExpressionThreadLocalHolder .evaluateExpressionInContext(expression, params, task, result); Collection<PrismPropertyValue<NotificationMessageAttachmentType>> exprResult = exprResultTriple.getZeroSet(); if (exprResult.size() == 0) { return null; } List<NotificationMessageAttachmentType> retval = new ArrayList<>(); for (PrismPropertyValue<NotificationMessageAttachmentType> item : exprResult) { retval.add(item.getValue()); } return retval; }
public static <T> T evaluateExpressionSingle(ExpressionType expressionBean, ExpressionVariables expressionVariables, String contextDescription, ExpressionFactory expressionFactory, PrismContext prismContext, Task task, OperationResult result, QName typeName, T defaultValue, Function<Object, Object> additionalConvertor) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { PrismPropertyDefinition<T> resultDef = prismContext.definitionFactory().createPropertyDefinition( new QName(SchemaConstants.NS_C, "result"), typeName); Expression<PrismPropertyValue<T>,PrismPropertyDefinition<T>> expression = expressionFactory.makeExpression(expressionBean, resultDef, contextDescription, task, result); ExpressionEvaluationContext eeContext = new ExpressionEvaluationContext(null, expressionVariables, contextDescription, task, result); eeContext.setAdditionalConvertor(additionalConvertor); PrismValueDeltaSetTriple<PrismPropertyValue<T>> exprResultTriple = ModelExpressionThreadLocalHolder .evaluateExpressionInContext(expression, eeContext, task, result); List<T> results = exprResultTriple.getZeroSet().stream() .map(ppv -> (T) ppv.getRealValue()) .collect(Collectors.toList()); return getSingleValue(results, defaultValue, contextDescription); }
@SuppressWarnings("SameParameterValue") private <T> List<T> evaluateExpression(Class<T> resultClass, ExpressionType expressionType, ExpressionVariables expressionVariables, String shortDesc, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { QName xsdType = XsdTypeMapper.toXsdType(resultClass); QName resultName = new QName(SchemaConstants.NS_C, "result"); PrismPropertyDefinition<T> resultDef = prismContext.definitionFactory().createPropertyDefinition(resultName, xsdType); Expression<PrismPropertyValue<T>,PrismPropertyDefinition<T>> expression = expressionFactory.makeExpression(expressionType, resultDef, shortDesc, task, result); ExpressionEvaluationContext params = new ExpressionEvaluationContext(null, expressionVariables, shortDesc, task, result); PrismValueDeltaSetTriple<PrismPropertyValue<T>> exprResult = ModelExpressionThreadLocalHolder.evaluateExpressionInContext(expression, params, task, result); List<T> retval = new ArrayList<>(); for (PrismPropertyValue<T> item : exprResult.getZeroSet()) { retval.add(item.getValue()); } return retval; }
private List<String> evaluateExpression(ExpressionType expressionType, ExpressionVariables expressionVariables, String shortDesc, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { QName resultName = new QName(SchemaConstants.NS_C, "result"); MutablePrismPropertyDefinition<String> resultDef = prismContext.definitionFactory().createPropertyDefinition(resultName, DOMUtil.XSD_STRING); resultDef.setMaxOccurs(-1); Expression<PrismPropertyValue<String>,PrismPropertyDefinition<String>> expression = expressionFactory.makeExpression(expressionType, resultDef, shortDesc, task, result); ExpressionEvaluationContext params = new ExpressionEvaluationContext(null, expressionVariables, shortDesc, task, result); PrismValueDeltaSetTriple<PrismPropertyValue<String>> exprResult = ModelExpressionThreadLocalHolder .evaluateExpressionInContext(expression, params, task, result); List<String> retval = new ArrayList<>(); for (PrismPropertyValue<String> item : exprResult.getZeroSet()) { retval.add(item.getValue()); } return retval; }
private List<ObjectReferenceType> evaluateRefExpression(ExpressionType expressionType, ExpressionVariables expressionVariables, String shortDesc, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, SecurityViolationException { QName resultName = new QName(SchemaConstants.NS_C, "result"); PrismReferenceDefinition resultDef = prismContext.definitionFactory().createReferenceDefinition(resultName, ObjectReferenceType.COMPLEX_TYPE); Expression<PrismReferenceValue,PrismReferenceDefinition> expression = expressionFactory.makeExpression(expressionType, resultDef, shortDesc, task, result); ExpressionEvaluationContext context = new ExpressionEvaluationContext(null, expressionVariables, shortDesc, task, result); context.setAdditionalConvertor(ExpressionUtil.createRefConvertor(UserType.COMPLEX_TYPE)); PrismValueDeltaSetTriple<PrismReferenceValue> exprResult = ModelExpressionThreadLocalHolder.evaluateRefExpressionInContext(expression, context, task, result); List<ObjectReferenceType> retval = new ArrayList<>(); for (PrismReferenceValue value : exprResult.getZeroSet()) { ObjectReferenceType ort = new ObjectReferenceType(); ort.setupReferenceValue(value); retval.add(ort); } return retval; }
public static <V extends PrismValue, D extends ItemDefinition> DeltaSetTriple<ItemValueWithOrigin<V,D>> createOutputTriple( PrismValueDeltaSetTripleProducer<V, D> mapping, PrismContext prismContext) { PrismValueDeltaSetTriple<V> outputTriple = mapping.getOutputTriple(); if (outputTriple == null) { return null; } Collection<ItemValueWithOrigin<V,D>> zeroIvwoSet = convertSet(outputTriple.getZeroSet(), mapping); Collection<ItemValueWithOrigin<V,D>> plusIvwoSet = convertSet(outputTriple.getPlusSet(), mapping); Collection<ItemValueWithOrigin<V,D>> minusIvwoSet = convertSet(outputTriple.getMinusSet(), mapping); DeltaSetTriple<ItemValueWithOrigin<V,D>> ivwoTriple = prismContext.deltaFactory().createDeltaSetTriple(zeroIvwoSet, plusIvwoSet, minusIvwoSet); return ivwoTriple; }
@Test public void testAsIsProtectedStringToProtectedString() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<ProtectedStringType>> outputTriple = evaluator.evaluateMapping( "mapping-asis-password.xml", "testAsIsProtectedStringToProtectedString", PATH_CREDENTIALS_PASSWORD_VALUE); // target // THEN outputTriple.checkConsistence(); evaluator.assertProtectedString("output zero set", outputTriple.getZeroSet(), "d3adM3nT3llN0Tal3s"); PrismAsserts.assertTripleNoPlus(outputTriple); PrismAsserts.assertTripleNoMinus(outputTriple); }
@Test public void testAsIsStringToProtectedString() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<ProtectedStringType>> outputTriple = evaluator.evaluateMapping( "mapping-asis.xml", "testAsIsStringToProtectedString", PATH_CREDENTIALS_PASSWORD_VALUE); // target // THEN outputTriple.checkConsistence(); evaluator.assertProtectedString("output zero set", outputTriple.getZeroSet(), "PIRATE"); PrismAsserts.assertTripleNoPlus(outputTriple); PrismAsserts.assertTripleNoMinus(outputTriple); }
private <V extends PrismValue, D extends ItemDefinition, F extends FocusType> void sqeezeAttributesFromConstructionNonminusToMinus( Map<QName, DeltaSetTriple<ItemValueWithOrigin<V,D>>> squeezedMap, Construction<F> construction, MappingExtractor<V,D,F> extractor, AssignmentPolicyEnforcementType enforcement) { if (enforcement == AssignmentPolicyEnforcementType.NONE) { return; } for (PrismValueDeltaSetTripleProducer<V, D> mapping: extractor.getMappings(construction)) { PrismValueDeltaSetTriple<V> vcTriple = mapping.getOutputTriple(); if (vcTriple == null) { continue; } QName name = mapping.getMappingQName(); DeltaSetTriple<ItemValueWithOrigin<V,D>> squeezeTriple = getSqueezeMapTriple(squeezedMap, name); if (enforcement == AssignmentPolicyEnforcementType.POSITIVE) { convertSqueezeSet(vcTriple.getZeroSet(), squeezeTriple.getZeroSet(), mapping, construction); convertSqueezeSet(vcTriple.getPlusSet(), squeezeTriple.getZeroSet(), mapping, construction); } else { convertSqueezeSet(vcTriple.getZeroSet(), squeezeTriple.getMinusSet(), mapping, construction); convertSqueezeSet(vcTriple.getPlusSet(), squeezeTriple.getMinusSet(), mapping, construction); } } }
private <V extends PrismValue, D extends ItemDefinition, F extends FocusType> void sqeezeAttributesFromConstructionNonminusToPlus( Map<QName, DeltaSetTriple<ItemValueWithOrigin<V,D>>> squeezedMap, Construction<F> construction, MappingExtractor<V,D,F> extractor, AssignmentPolicyEnforcementType enforcement) { if (enforcement == AssignmentPolicyEnforcementType.NONE) { return; } for (PrismValueDeltaSetTripleProducer<V, D> mapping: extractor.getMappings(construction)) { PrismValueDeltaSetTriple<V> vcTriple = mapping.getOutputTriple(); if (vcTriple == null) { continue; } QName name = mapping.getMappingQName(); DeltaSetTriple<ItemValueWithOrigin<V,D>> squeezeTriple = getSqueezeMapTriple(squeezedMap, name); convertSqueezeSet(vcTriple.getZeroSet(), squeezeTriple.getPlusSet(), mapping, construction); convertSqueezeSet(vcTriple.getPlusSet(), squeezeTriple.getPlusSet(), mapping, construction); // Ignore minus set } }
private <T> void assertZeroAttributeValues(Construction accountConstruction, QName attrName, T... expectedValue) { PrismValueDeltaSetTripleProducer<? extends PrismPropertyValue<?>, ? extends PrismPropertyDefinition<?>> vc = accountConstruction.getAttributeMapping(attrName); assertNotNull("No value construction for attribute "+attrName+" in zero set", vc); PrismValueDeltaSetTriple<? extends PrismPropertyValue<?>> triple = vc.getOutputTriple(); Collection<T> actual = getMultiValueFromDeltaSetTriple(triple, triple.getZeroSet()); TestUtil.assertSetEquals("Attribute "+attrName+" value in zero set", actual, expectedValue); }
@Test public void testGenerateProtectedString() throws Exception { final String TEST_NAME = "testGenerateProtectedString"; TestUtil.displayTestTitle(TEST_NAME); // GIVEN MappingImpl<PrismPropertyValue<ProtectedStringType>,PrismPropertyDefinition<ProtectedStringType>> mapping = evaluator.createMapping("mapping-generate.xml", TEST_NAME, SchemaConstants.PATH_PASSWORD_VALUE, null); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<ProtectedStringType>> outputTriple = mapping.getOutputTriple(); outputTriple.checkConsistence(); ProtectedStringType value1 = MappingTestEvaluator.getSingleValue("plus set", outputTriple.getZeroSet()); PrismAsserts.assertTripleNoPlus(outputTriple); PrismAsserts.assertTripleNoMinus(outputTriple); System.out.println("Generated excrypted value: "+value1); assertNotNull(value1); assertNotNull(value1.getEncryptedDataType()); }
private <V extends PrismValue, D extends ItemDefinition, F extends FocusType> void sqeezeAttributesFromConstruction( Map<QName, DeltaSetTriple<ItemValueWithOrigin<V,D>>> squeezedMap, Construction<F> construction, MappingExtractor<V,D,F> extractor, AssignmentPolicyEnforcementType enforcement) { if (enforcement == AssignmentPolicyEnforcementType.NONE) { return; } for (PrismValueDeltaSetTripleProducer<V, D> mapping: extractor.getMappings(construction)) { PrismValueDeltaSetTriple<V> vcTriple = mapping.getOutputTriple(); if (vcTriple == null) { continue; } QName name = mapping.getMappingQName(); DeltaSetTriple<ItemValueWithOrigin<V,D>> squeezeTriple = getSqueezeMapTriple(squeezedMap, name); convertSqueezeSet(vcTriple.getZeroSet(), squeezeTriple.getZeroSet(), mapping, construction); convertSqueezeSet(vcTriple.getPlusSet(), squeezeTriple.getPlusSet(), mapping, construction); if (enforcement == AssignmentPolicyEnforcementType.POSITIVE) { convertSqueezeSet(vcTriple.getMinusSet(), squeezeTriple.getZeroSet(), mapping, construction); } else { convertSqueezeSet(vcTriple.getMinusSet(), squeezeTriple.getMinusSet(), mapping, construction); } } }