One of the primary function of midPoint is to synchronize data between objects residing on resources over the network. MidPoint approach is to avoid the complexity of synchronization everything with everything. As the name of midPoint suggests there is always something in the middle. E.g. midPoint never synchronizes an account directly to another account. MidPoint synchronizes an account to a user (which is object in midPoint repository) and then midPoint synchronizes user to another account. This approach considerably reduces the overall complexity and also provides better manageability of the IDM solution.
Focus and Projections
The object that is "in the middle" is called focal object. It is the focus of synchronization. Every relevant piece of data is reflected onto the focal object. And the state of focal object is projected back to the resources. User is a typical focal object.
The objects that reside on the resources are called projections. A resource account is a typical projection object. The state of these objects is usually projected from the focus. E.g. account password is set as a copy of user's password.
This approach is illustrated using a slightly simplified form in a following diagram:
The real situation is slightly more complex. As projections are resource objects it is inconvenient to work with them directly. Therefore they are represented by shadows which is the usual way how midpoint represents all resource objects. Shadows can be conveniently linked to focal objects as it is illustrated in the following diagram:
User is the most common type of focal object. But it is not the only one. Since the generic synchronization mechanism was introduced in midPoint version 3.0 there is a wider selection of focal objects to choose from. E.g. an Org can be a focal object. The projections can also be of various types. E.g. it makes sense to synchronize Orgs to resource organizational units and groups (Note: a group is considered to be an resource entitlement).
Following object types may act as a focus:
Projections are simply resource objects represented by shadow objects. The shadows contain information about kind and intent that are used in synchronization algorithm to sort out projections of the same focal object.