Class CorrelationServiceImpl
- java.lang.Object
-
- com.evolveum.midpoint.model.impl.correlation.CorrelationServiceImpl
-
- All Implemented Interfaces:
CorrelationService
@Component public class CorrelationServiceImpl extends Object implements CorrelationService
Provides correlation-related functionality, primarily on top ofCorrelator
interface: . the correlation itself (`correlate`) - including creation ofCompleteCorrelationResult
out of correlator-providedCorrelationResult
object; . determining candidate owner suitability (`checkCandidateOwner`); . describing the correlation case (`describeCorrelationCase`); . completing a correlation case; and further auxiliary methods.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.evolveum.midpoint.model.api.correlation.CorrelationService
CorrelationService.CaseCloser, CorrelationService.CorrelationCaseDescriptionOptions
-
-
Constructor Summary
Constructors Constructor Description CorrelationServiceImpl()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
checkCandidateOwner(@NotNull ShadowType shadowedResourceObject, @NotNull ResourceType resource, @NotNull SynchronizationPolicy synchronizationPolicy, @NotNull FocusType candidateOwner, @NotNull Task task, @NotNull OperationResult result)
Checks whether the supplied candidate owner would be the correlation result (if real correlation would take place).void
clearCorrelationState(@NotNull String shadowOid, @NotNull OperationResult result)
Clears the correlation state of a shadow.void
completeCorrelationCase(@NotNull CaseType currentCase, @NotNull CorrelationService.CaseCloser caseCloser, @NotNull Task task, @NotNull OperationResult result)
Completes given correlation case.<F extends FocusType>
FcomputePreFocus(@NotNull ShadowType shadowedResourceObject, @NotNull ResourceType resource, @NotNull SynchronizationPolicy synchronizationPolicy, @NotNull Class<F> focusClass, @NotNull Task task, @NotNull OperationResult result)
@NotNull CompleteCorrelationResult
correlate(@NotNull CorrelatorContext<?> rootCorrelatorContext, @NotNull CorrelationContext correlationContext, @NotNull OperationResult parentResult)
Executes the correlation in the standard way.@NotNull CompleteCorrelationResult
correlate(@NotNull ShadowType shadowedResourceObject, @NotNull Task task, @NotNull OperationResult result)
A limited convenience variant ofcorrelate(CorrelatorContext, CorrelationContext, OperationResult)
that starts with a single shadow only.@NotNull CorrelatorContext<?>
createRootCorrelatorContext(@NotNull SynchronizationPolicy synchronizationPolicy, @Nullable ObjectTemplateType objectTemplate, @Nullable SystemConfigurationType systemConfiguration)
Creates the root correlator context for given configuration.@NotNull CorrelationCaseDescription<?>
describeCorrelationCase(@NotNull CorrelatorContext<?> correlatorContext, @NotNull CorrelationContext correlationContext, @NotNull List<ResourceObjectOwnerOptionType> ownerOptionsList, @Nullable CorrelationService.CorrelationCaseDescriptionOptions options, @NotNull Task task, @NotNull OperationResult result)
@NotNull CorrelationCaseDescription<?>
describeCorrelationCase(@NotNull CaseType aCase, @Nullable CorrelationService.CorrelationCaseDescriptionOptions options, @NotNull Task task, @NotNull OperationResult result)
Describes the provided correlation case by providingCorrelationCaseDescription
object.ObjectTemplateType
determineObjectTemplate(@NotNull SynchronizationPolicy synchronizationPolicy, @NotNull FocusType preFocus, @NotNull OperationResult result)
Determines object template from pre-focus or from archetype reference.
-
-
-
Method Detail
-
correlate
@NotNull public @NotNull CompleteCorrelationResult correlate(@NotNull @NotNull ShadowType shadowedResourceObject, @NotNull @NotNull Task task, @NotNull @NotNull OperationResult result) throws SchemaException, ExpressionEvaluationException, CommunicationException, SecurityViolationException, ConfigurationException, ObjectNotFoundException
A limited convenience variant ofcorrelate(CorrelatorContext, CorrelationContext, OperationResult)
that starts with a single shadow only. Used in special cases, including testing.
-
correlate
@NotNull public @NotNull CompleteCorrelationResult correlate(@NotNull @NotNull CorrelatorContext<?> rootCorrelatorContext, @NotNull @NotNull CorrelationContext correlationContext, @NotNull @NotNull OperationResult parentResult) throws SchemaException, ExpressionEvaluationException, CommunicationException, SecurityViolationException, ConfigurationException, ObjectNotFoundException
Executes the correlation in the standard way.
-
checkCandidateOwner
public boolean checkCandidateOwner(@NotNull @NotNull ShadowType shadowedResourceObject, @NotNull @NotNull ResourceType resource, @NotNull @NotNull SynchronizationPolicy synchronizationPolicy, @NotNull @NotNull FocusType candidateOwner, @NotNull @NotNull Task task, @NotNull @NotNull OperationResult result) throws SchemaException, ExpressionEvaluationException, SecurityViolationException, CommunicationException, ConfigurationException, ObjectNotFoundException
Checks whether the supplied candidate owner would be the correlation result (if real correlation would take place). Used for opportunistic synchronization. Why not doing the actual correlation? Because the owner may not exist in repository yet.
-
describeCorrelationCase
@NotNull public @NotNull CorrelationCaseDescription<?> describeCorrelationCase(@NotNull @NotNull CaseType aCase, @Nullable @Nullable CorrelationService.CorrelationCaseDescriptionOptions options, @NotNull @NotNull Task task, @NotNull @NotNull OperationResult result) throws SchemaException, ConfigurationException, ExpressionEvaluationException, CommunicationException, SecurityViolationException, ObjectNotFoundException
Description copied from interface:CorrelationService
Describes the provided correlation case by providingCorrelationCaseDescription
object. Currently, it . takes the shadow stored in the correlation case (i.e. does NOT fetch it anew), . recomputes inbound mappings (i.e. ignores stored pre-focus), . and processes candidate owners stored in the correlation case (i.e. does NOT search for them again). TheCorrelationService.CorrelationCaseDescriptionOptions
parameter signals if the client wishes to provide also the correlation explanation, or not. (In the future, we may provide options also for behavior in points 1-3 mentioned above.)
-
describeCorrelationCase
@VisibleForTesting @NotNull public @NotNull CorrelationCaseDescription<?> describeCorrelationCase(@NotNull @NotNull CorrelatorContext<?> correlatorContext, @NotNull @NotNull CorrelationContext correlationContext, @NotNull @NotNull List<ResourceObjectOwnerOptionType> ownerOptionsList, @Nullable @Nullable CorrelationService.CorrelationCaseDescriptionOptions options, @NotNull @NotNull Task task, @NotNull @NotNull OperationResult result) throws SchemaException, ConfigurationException, ExpressionEvaluationException, CommunicationException, SecurityViolationException, ObjectNotFoundException
-
completeCorrelationCase
public void completeCorrelationCase(@NotNull @NotNull CaseType currentCase, @NotNull @NotNull CorrelationService.CaseCloser caseCloser, @NotNull @NotNull Task task, @NotNull @NotNull OperationResult result) throws SchemaException, ExpressionEvaluationException, CommunicationException, SecurityViolationException, ConfigurationException, ObjectNotFoundException
Description copied from interface:CorrelationService
Completes given correlation case. Preconditions: - case is freshly fetched, - case is a correlation one- Specified by:
completeCorrelationCase
in interfaceCorrelationService
caseCloser
- Makes the case definitely closed. (This functionality must be provided by the caller.)- Throws:
SchemaException
ExpressionEvaluationException
CommunicationException
SecurityViolationException
ConfigurationException
ObjectNotFoundException
-
computePreFocus
@VisibleForTesting @NotNull public <F extends FocusType> F computePreFocus(@NotNull @NotNull ShadowType shadowedResourceObject, @NotNull @NotNull ResourceType resource, @NotNull @NotNull SynchronizationPolicy synchronizationPolicy, @NotNull @NotNull Class<F> focusClass, @NotNull @NotNull Task task, @NotNull @NotNull OperationResult result) throws SchemaException, ExpressionEvaluationException, SecurityViolationException, CommunicationException, ConfigurationException, ObjectNotFoundException
-
createRootCorrelatorContext
@NotNull public @NotNull CorrelatorContext<?> createRootCorrelatorContext(@NotNull @NotNull SynchronizationPolicy synchronizationPolicy, @Nullable @Nullable ObjectTemplateType objectTemplate, @Nullable @Nullable SystemConfigurationType systemConfiguration) throws ConfigurationException, SchemaException
Creates the root correlator context for given configuration.
-
clearCorrelationState
@VisibleForTesting public void clearCorrelationState(@NotNull @NotNull String shadowOid, @NotNull @NotNull OperationResult result) throws ObjectNotFoundException
Clears the correlation state of a shadow. Does not do unlinking (if the shadow is linked)! Only for testing.- Throws:
ObjectNotFoundException
-
determineObjectTemplate
public ObjectTemplateType determineObjectTemplate(@NotNull @NotNull SynchronizationPolicy synchronizationPolicy, @NotNull @NotNull FocusType preFocus, @NotNull @NotNull OperationResult result) throws SchemaException, ConfigurationException, ObjectNotFoundException
Determines object template from pre-focus or from archetype reference. In the future we may allow explicit configuration of the template ref in the `correlation` section. TODO find better place for this method
-
-