use of com.evolveum.midpoint.xml.ns._public.common.common_3.ValueMetadataType in project midpoint by Evolveum.
the class PrismValueWrapperImpl method getNewValueWithMetadataApplied.
private <V extends PrismValue> V getNewValueWithMetadataApplied() throws SchemaException {
if (getParent() != null && getParent().isProcessProvenanceMetadata()) {
PrismContainerValue<ValueMetadataType> newYieldValue = WebPrismUtil.getNewYieldValue();
MidPointApplication app = MidPointApplication.get();
ValueMetadata newValueMetadata = app.getPrismContext().getValueMetadataFactory().createEmpty();
newValueMetadata.addMetadataValue(newYieldValue);
newValue.setValueMetadata(newValueMetadata.clone());
}
return (V) newValue.clone();
}
use of com.evolveum.midpoint.xml.ns._public.common.common_3.ValueMetadataType in project midpoint by Evolveum.
the class TestMappingMetadata method testAsIsDeleteSparrowUserWithRangeAll.
/**
* Jack has acquisition origins: user, rest
*
* (see user-jack-metadata.xml)
*
* Delta: replace givenName Jackie (user)
* Existing: Jack Sparrow (m:hr, user)
*
* Expected result:
* - Jackie (user) in plus set
* - Jack (no MD) in minus set
* - Jack Sparrow (m:hr) in minus set (because of range)
*/
@Test
public void testAsIsDeleteSparrowUserWithRangeAll() throws Exception {
PrismPropertyValue<PolyString> jackieUser = evaluator.getPrismContext().itemFactory().createPropertyValue(new PolyString("Jackie"));
// noinspection unchecked
((PrismContainer<ValueMetadataType>) (PrismContainer) jackieUser.getValueMetadata()).createNewValue().asContainerable().beginProvenance().beginAcquisition().originRef("user", ServiceType.COMPLEX_TYPE);
PrismPropertyValue<PolyString> jackSparrowHr = evaluator.getPrismContext().itemFactory().createPropertyValue(PrismTestUtil.createPolyString("Jack Sparrow"));
// noinspection unchecked
((PrismContainer<ValueMetadataType>) (PrismContainer) jackSparrowHr.getValueMetadata()).createNewValue().asContainerable().beginProvenance().mappingSpec(createMappingSpec()).beginAcquisition().originRef("hr", ServiceType.COMPLEX_TYPE).<ProvenanceMetadataType>end().beginAcquisition().originRef("user", ServiceType.COMPLEX_TYPE).end();
ObjectDelta<UserType> delta = evaluator.getPrismContext().deltaFor(UserType.class).item(UserType.F_GIVEN_NAME).replace(jackieUser).asObjectDelta(null);
MappingImpl<PrismPropertyValue<PolyString>, PrismPropertyDefinition<PolyString>> mapping = evaluate(MAPPING_ASIS_FULLNAME_METADATA_RANGE_ALL_XML, delta, existingValuesCustomizer(jackSparrowHr));
PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple();
displayDumpable("triple", outputTriple);
PrismAsserts.assertTripleNoZero(outputTriple);
PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("Jackie"));
PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("Jack"), PrismTestUtil.createPolyString("Jack Sparrow"));
assertOrigins(MiscUtil.extractSingleton(outputTriple.getPlusSet()), "user");
// noinspection ConstantConditions
assertNoMetadata(outputTriple.getMinusSet().stream().filter(v -> v.getRealValue().getOrig().equals("Jack")).findAny().orElse(null));
// noinspection ConstantConditions
assertOrigins(outputTriple.getMinusSet().stream().filter(v -> v.getRealValue().getOrig().equals("Jack Sparrow")).findAny().orElse(null), "hr", "user");
}
use of com.evolveum.midpoint.xml.ns._public.common.common_3.ValueMetadataType in project midpoint by Evolveum.
the class TestMappingMetadata method testAddJackRestWithTimestampWithExisting.
/**
* Jack has acquisition origins: user, rest
* Sparrow has acquisition origins: user
* target (Jack Sparrow) has origins: user, rest (in the form of m:user+rest).
*
* (see user-jack-metadata.xml)
*
* Delta: add givenName Jack (rest+timestamp).
*
* Expected result: user, rest+timestamp (in zero set, because no real value is being added).
*/
@Test
public void testAddJackRestWithTimestampWithExisting() throws Exception {
XMLGregorianCalendar now = XmlTypeConverter.createXMLGregorianCalendar();
PrismPropertyValue<PolyString> jackRestWithTs = evaluator.getPrismContext().itemFactory().createPropertyValue(new PolyString("Jack"));
// noinspection unchecked
((PrismContainer<ValueMetadataType>) (PrismContainer) jackRestWithTs.getValueMetadata()).createNewValue().asContainerable().beginProvenance().beginAcquisition().originRef("rest", ServiceType.COMPLEX_TYPE).timestamp(now);
ObjectDelta<UserType> delta = evaluator.getPrismContext().deltaFor(UserType.class).item(UserType.F_GIVEN_NAME).add(jackRestWithTs).asObjectDelta(null);
MappingImpl<PrismPropertyValue<PolyString>, PrismPropertyDefinition<PolyString>> mapping = evaluate(MAPPING_SCRIPT_FULLNAME_METADATA_XML, delta, existingValuesCustomizer(createJackSparrowOriginal()));
PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple();
displayDumpable("triple", outputTriple);
PrismAsserts.assertTripleZero(outputTriple, PrismTestUtil.createPolyString("Jack Sparrow"));
PrismAsserts.assertTripleNoPlus(outputTriple);
PrismAsserts.assertTripleNoMinus(outputTriple);
PrismPropertyValue<PolyString> jackSparrow = MiscUtil.extractSingleton(outputTriple.getZeroSet());
assertOrigins(jackSparrow, "user", "rest");
List<ProvenanceAcquisitionType> acquisitions = ((ValueMetadataType) jackSparrow.getValueMetadata().getValue().asContainerable()).getProvenance().getAcquisition();
XMLGregorianCalendar timestamp = acquisitions.stream().filter(acq -> acq.getOriginRef().getOid().equals("rest")).findAny().orElseThrow(() -> new AssertionError("no origin rest value")).getTimestamp();
assertThat(timestamp).isEqualTo(now);
}
use of com.evolveum.midpoint.xml.ns._public.common.common_3.ValueMetadataType in project midpoint by Evolveum.
the class CreateTimestampBuiltinMapping method applyForConsolidation.
@Override
public void applyForConsolidation(@NotNull ConsolidationMetadataComputation computation) throws SchemaException {
List<ValueMetadataType> allValues = ListUtils.union(computation.getNonNegativeValues(), computation.getExistingValues());
XMLGregorianCalendar earliest = earliestTimestamp(allValues, CREATE_PATH);
addPropertyRealValue(computation.getOutputMetadataValue(), earliest);
}
use of com.evolveum.midpoint.xml.ns._public.common.common_3.ValueMetadataType in project midpoint by Evolveum.
the class AbstractExpressionEvaluator method addInternalOrigin.
/**
* Adds Internal origin for given prismValue. Assumes that value has no metadata.
* (Currently does not fill-in actorRef nor channel.)
*/
public void addInternalOrigin(PrismValue value, ExpressionEvaluationContext context) throws SchemaException {
if (value != null && !value.hasValueMetadata() && context.getValueMetadataComputer() != null) {
ValueMetadataType metadata = new ValueMetadataType(prismContext).beginProvenance().beginAcquisition().originRef(SystemObjectsType.ORIGIN_INTERNAL.value(), ServiceType.COMPLEX_TYPE).timestamp(XmlTypeConverter.createXMLGregorianCalendar()).<ProvenanceMetadataType>end().end();
// noinspection unchecked
value.getValueMetadataAsContainer().add(metadata.asPrismContainerValue());
}
}
Aggregations