<user oid="31984da7-e162-4e22-a437-6f60d80092c4" version="1"> <name>leonhard</name> </user>
Some sample operations
Admin provides given and family name
See TestValueMetadata.test900ProvideNamesByAdmin
.
State before (operational data left out):
Primary delta:
<value ...> <t:changeType>modify</t:changeType> <t:objectType>c:UserType</t:objectType> <t:oid>31984da7-e162-4e22-a437-6f60d80092c4</t:oid> <t:itemDelta> <t:modificationType>add</t:modificationType> <t:path>c:givenName</t:path> <t:value> <_value xsi:type="t:PolyStringType">Leonhard</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:35.512+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </t:value> </t:itemDelta> <t:itemDelta> <t:modificationType>add</t:modificationType> <t:path>c:familyName</t:path> <t:value> <_value xsi:type="t:PolyStringType">Euler</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:35.512+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </t:value> </t:itemDelta> </value>
Note the origin:
<service xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3" oid="6c0a7a75-0551-4842-807d-424e279a257f"> <name>Admin data entry</name> <description>Data entered manually by the administrator</description> </service>
State after:
<user oid="31984da7-e162-4e22-a437-6f60d80092c4" version="3"> <name>leonhard</name> <fullName> <_value>Leonhard Euler</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:35.512+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </fullName> <givenName> <_value>Leonhard</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:35.512+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </givenName> <familyName> <_value>Euler</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:35.512+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </familyName> </user>
In short:
- givenName: Leonhard - yield: - acquisition: admin entry - familyName: Euler - yield: - acquisition: admin entry - fullName: Leonhard Euler - yield: - acquisition: admin entry
The givenName
and familyName
values have acquisition as given by the values sent in ADD delta.
The fullName
value has a single-acquisition yield because the two source acquisitions are considered equivalent.
(Timestamp is considered irrelevant… should it be so?)
The same family name is provided by external application
See TestValueMetadata.test910AddSameFamilyNameByRest
.
State before is the same as was after previous test.
Primary delta:
<value ...> <t:changeType>modify</t:changeType> <t:objectType>c:UserType</t:objectType> <t:oid>31984da7-e162-4e22-a437-6f60d80092c4</t:oid> <t:itemDelta> <t:modificationType>add</t:modificationType> <t:path>c:familyName</t:path> <t:value> <_value xsi:type="t:PolyStringType">Euler</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:36.713+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/model/channels-3#rest</channel> <originRef oid="760fda34-846f-4aac-a5ac-881c0ff23653" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </t:value> </t:itemDelta> </value>
Note the origin:
<service xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3" oid="760fda34-846f-4aac-a5ac-881c0ff23653"> <name>Self service app</name> <description>Data entered by the self service application</description> </service>
State after:
<user ... oid="31984da7-e162-4e22-a437-6f60d80092c4" version="5"> <name>leonhard</name> <fullName> <_value>Leonhard Euler</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:35.512+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> <yield> <acquisition> <timestamp>2020-07-15T16:11:35.512+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> <acquisition> <timestamp>2020-07-15T16:11:36.713+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/model/channels-3#rest</channel> <originRef oid="760fda34-846f-4aac-a5ac-881c0ff23653" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </fullName> <givenName> <_value>Leonhard</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:35.512+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </givenName> <familyName> <_value>Euler</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:35.512+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> <yield> <acquisition> <timestamp>2020-07-15T16:11:36.713+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/model/channels-3#rest</channel> <originRef oid="760fda34-846f-4aac-a5ac-881c0ff23653" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </familyName> </user>
In short:
- givenName: Leonhard - yield: - acquisition: admin entry - familyName: Euler - yield: - acquisition: admin entry - yield: - acquisition: rest - fullName: Leonhard Euler - yield: - acquisition: admin entry - yield: - acquisition: admin entry - acquisition: rest
Value Leonhard
of givenName
has the same acquisition as before (admin entry).
Value Euler
of familyName
has two yields: original (acquisition = admin entry) and new one (acquisition = rest).
Value Leonhard Euler
of fullName
has two yields, because of the consolidation of original and newly computed value:
- original value of Leonhard Euler
with a single acquisition of "admin entry";
- newly computed value of Leonhard Euler
with a combined acquisition of "admin entry" plus "rest" (union
of all acquisitions for Leonhard
and Euler
)
Is this correct? Maybe no. Maybe the fullname should be like this:
- fullName: Leonhard Euler - yield: - acquisition: admin entry - acquisition: rest
But it’s quite hard to distinguish situations where the new yield should overwrite existing one(s) from situations where new yield should be appended to existing one(s).
Object is imported from a resource
See TestValueMetadata.test920ImportBlaise
.
A new user is imported from HR.
Note that
<service xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3" oid="f43bd824-e07e-4a41-950e-00de06881555"> <name>HR employee feed</name> <description>Automated feed of employee data from the HR system</description> </service>
and
<resource oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" ...> <name>resource-hr</name> <schemaHandling> <objectType> ... <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" type="ServiceType"/> <!-- HR employee feed --> </objectType> </schemaHandling> </resource>
State after:
<user xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3" xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3" xmlns:icfs="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3" xmlns:org="http://midpoint.evolveum.com/xml/ns/public/common/org-3" xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance-3" xmlns:t="http://prism.evolveum.com/xml/ns/public/types-3" oid="095ab0b3-c158-4779-bace-ceae2b4f53b3" version="2"> <name> <_value>blaise</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.308+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </name> <assignment id="1"> <!-- created by inbound --> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.308+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> <targetRef oid="b2117a51-a516-4151-9168-30f8baa78ec2" relation="org:default" type="c:ArchetypeType"/> <activation> <effectiveStatus>enabled</effectiveStatus> </activation> </assignment> <fullName> <_value>Blaise Pascal</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.309+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </fullName> <givenName> <_value>Blaise</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.309+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </givenName> <familyName> <_value>Pascal</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.305+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </familyName> </user>
In short:
- givenName: Blaise - yield: - acquisition: hr - familyName: Pascal - yield: - acquisition: hr - fullName: Blaise Pascal - yield: - acquisition: hr
So far so good.
Admin reinforces the family name
See TestValueMetadata.test930ReinforceFamilyNameByManualEntry
.
Primary delta:
<value ...> <t:changeType>modify</t:changeType> <t:objectType>c:UserType</t:objectType> <t:oid>095ab0b3-c158-4779-bace-ceae2b4f53b3</t:oid> <t:itemDelta> <t:modificationType>add</t:modificationType> <t:path>c:familyName</t:path> <t:value> <_value xsi:type="t:PolyStringType">Pascal</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:41.891+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <actorRef oid="00000000-0000-0000-0000-000000000002" type="c:UserType"/> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </t:value> </t:itemDelta> </value>
Result:
<user ... oid="095ab0b3-c158-4779-bace-ceae2b4f53b3" version="4"> <name> <_value>blaise</_value> <_metadata> ... </_metadata> </name> <fullName> <_value>Blaise Pascal</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.309+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.309+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> <acquisition> <timestamp>2020-07-15T16:11:41.891+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <actorRef oid="00000000-0000-0000-0000-000000000002" type="c:UserType"/> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </fullName> <givenName> <_value>Blaise</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.309+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </givenName> <familyName> <_value>Pascal</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.305+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> <yield> <acquisition> <timestamp>2020-07-15T16:11:41.891+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <actorRef oid="00000000-0000-0000-0000-000000000002" type="c:UserType"/> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </familyName> </user>
I.e.
- givenName: Blaise - yield: - acquisition: hr - familyName: Pascal - yield: - acquisition: hr - yield: - acquisition: admin entry - fullName: Blaise Pascal - yield: - acquisition: hr - yield: - acquisition: hr - acquisition: admin entry
Again, value of Blaise Pascal
of fullName
has two yields, because of the consolidation of original and newly computed value.
Admin reinforces also the given name
See TestValueMetadata.test940ReinforceGivenNameByManualEntry
.
Primary delta:
<value ...> <t:changeType>modify</t:changeType> <t:objectType>c:UserType</t:objectType> <t:oid>095ab0b3-c158-4779-bace-ceae2b4f53b3</t:oid> <t:itemDelta> <t:modificationType>add</t:modificationType> <t:path>c:givenName</t:path> <t:value> <_value xsi:type="t:PolyStringType">Blaise</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:44.665+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <actorRef oid="8d162a31-00a8-48dc-b96f-08d3a85ada1d" type="c:UserType"/> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </t:value> </t:itemDelta> </value>
(The actor is a different admin, this time it is jim
.)
The result:
<user ... oid="095ab0b3-c158-4779-bace-ceae2b4f53b3" version="6"> <name> <_value>blaise</_value> <_metadata> ... </_metadata> </name> <fullName> <_value>Blaise Pascal</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.309+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.309+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> <acquisition> <timestamp>2020-07-15T16:11:41.891+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <actorRef oid="00000000-0000-0000-0000-000000000002" type="c:UserType"/> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.309+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> <acquisition> <timestamp>2020-07-15T16:11:44.665+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <actorRef oid="8d162a31-00a8-48dc-b96f-08d3a85ada1d" type="c:UserType"/> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> <acquisition> <timestamp>2020-07-15T16:11:41.891+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <actorRef oid="00000000-0000-0000-0000-000000000002" type="c:UserType"/> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </fullName> <givenName> <_value>Blaise</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.309+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> <yield> <acquisition> <timestamp>2020-07-15T16:11:44.665+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <actorRef oid="8d162a31-00a8-48dc-b96f-08d3a85ada1d" type="c:UserType"/> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </givenName> <familyName> <_value>Pascal</_value> <_metadata> <provenance> <yield> <acquisition> <timestamp>2020-07-15T16:11:38.305+02:00</timestamp> <resourceRef oid="9a34c3b6-aca5-4f9b-aae4-24f3f2d98ce9" type="c:ResourceType"/> <originRef oid="f43bd824-e07e-4a41-950e-00de06881555" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> <yield> <acquisition> <timestamp>2020-07-15T16:11:41.891+02:00</timestamp> <channel>http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user</channel> <actorRef oid="00000000-0000-0000-0000-000000000002" type="c:UserType"/> <originRef oid="6c0a7a75-0551-4842-807d-424e279a257f" relation="org:default" type="c:ServiceType"/> </acquisition> </yield> </provenance> </_metadata> </familyName> </user>
Simplified version:
- givenName: Blaise - yield: - acquisition: hr - yield: - acquisition: admin entry (jim) - familyName: Pascal - yield: - acquisition: hr - yield: - acquisition: admin entry (administrator) - fullName: Blaise Pascal - yield: - acquisition: hr - yield: - acquisition: hr - acquisition: admin entry (administrator) - yield: - acquisition: hr - acquisition: admin entry (jim) - acquisition: admin entry (administrator)
The first yield for Blaise Pascal
is from the original import process.
The second one is from the state where administrator manually entered (confirmed?) value of Pascal
.
And the third one is from the state where jim manually entered (confirmed?) value of Blaise
.
Does it make any sense?
Current algorithms
Transformation - i.e. mapping evaluation
Input: provenance metadata of all input values (e.g. for Leonhard
and Euler
.
Processing: Merges all distinct acquisitions into a single yield.
Consolidation
Input: provenance metadata of all relevant "versions" of the value Processing: Computes a union of all yields.
What exactly is the input?
-
When adding value computed by a mapping, these are all relevant mappings (from plus and sometimes zero set), also values being added by a priori delta (i.e. ADD or REPLACE sets), and existing values: https://github.com/Evolveum/midpoint/blob/29ce55d26866404526fde5aa6a186820c5b12e8a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/IvwoConsolidator.java#L574-L578.
-
When reinforcing value computed by a mapping to a zero set, these are:
-
existing value,
-
all non-weak values from "adding" / zero origins,
-
values being added by a priori delta.
-
-
When consolidating a priori delta (currently primary delta), these are:
-
existing value,
-
values being added by a priori delta.
-