Resource capabilities are the things that the resource can do. Not all the resource are equal in their capabilities. E.g. one resource supports account activation (enabling and disabling accounts) but other does not. One resource provides read-write access while other can support read-only access. One resource supports real-time synchronization while other does not. The capabilities define what features the resource supports so system can behave accordingly.
All the capabilities can be disabled (i.e. turned off). Disabling the capability will cause that system will not use that part of the connector and resource. The capabilities are usually disabled if they are faulty. E.g. if there is a bug in a connector or on the resource then the bug might be circumvented if appropriate capability is disabled. But the capabilities may be disabled also for administrative reasons. E.g. disabling Create, Update and Delete capabilities makes the resource efficiently read-only.
Some capabilities can be simulated. It means that system can pretend that the resource has specific capability even though it does not have it. E.g. an activation capability can be simulated by setting a specific account attribute to a specific value to disable an account. Such simulated capabilities usually require some configuration. This can also be configured on this page.
This stage of the wizard configures connector configuration properties. They usually define network parameters used to access the resource such as hostname and port numbers. Additional connection parameters such as operation network timeouts and connection pooling configuration can be specified here.
The connector configuration properties are unique for each connector. The specific set of configuration properties are determined by connector configuration schema. Therefore the content of this page depends on the connector type that was selected in the previous page.
+ResourceWizard.help.nameStep=
This stage of the wizard configures basic properties of the resource. It can be used to configure resource name and description. Connector name is mandatory and must be unique. Connector that will be used to access the resource must also be configured. Connectors are deployed on connector hosts. If the connector host is left empty then connectors deployed directly in the system instance will be used.
This step is used to provide configuration for handling of resource schema. The configuration displayed on this page tells system what to do with resource object classes and attributes. It contains the configuration of mappings between user properties and account attributes, configuration of account types, groups, provisioning dependencies, password mapping and so on.
The configuration is grouped into object types. Each object type defines the behavior for specific account type, entitlement type, OU, etc. The object type is uniquely identified by the combination of kind and intent. The kind defines what kind of the object it is:
kind=account means that the object is an account, i.e. that it represents a user.
kind=entitlement is applied to groups, roles, privileges, ACIs and similar objects that can be associated with accounts and which give privileges or access rights to the account.
kind=generic applies to other objects such as organizational units (OUs), domains, etc.
Intent is a plain string that can be used to distinguish several object types. E.g. it can be used to define several account types, e.g. "default user account", "administration account", "testing account" and so on. See Kind, Intent and ObjectClass wiki page for more details.
This page shows resource schema. The resource schema defines object classes that the connector can manage, e.g. accounts, groups, organizational units and so on. The schema defines a set of attributes for each object class. The schema is presented here in read-only form so you can inspect it and familiarize yourself with the data model that the resource provides.
The resource schema presented at this page is usually retrieved from the resource and automatically generated by system. Resource schema defines what the resource can do, i.e. what object classes it defines and what attributes are used in the object classes. Therefore the schema is read-only. It is not a configuration. It does not defines how system uses the object classes and attributes. That is configured in next steps of the wizard.
The synchronization configuration defines how Identity Manager reacts when it discovers that resource object has changed. E.g. it defines how system reacts when it discovers new account, when it discovers that a group that should exist does not and so on. It is usually does not matter how system discovers the change the reaction is usually the same (although exceptions are possible by using channel specification). Therefore the policy that is configured here usually applies to live synchronization, reconciliation, import, discovery (consistency mechanism) and possible also other mechanisms that may come in the future.
This portion of the credentials dialog controls how the password change will be propagated to each individual system. The first line defines whether the password will be changed in the Identity Manager itself. Following lines represent each system for which the password can be changed. The password propagation is controlled by the icons:
Password will be changed. Password for this system will be changed to the value specified in the password dialog above.
Automatic password propagation. The password might be changed. Whether the password is changed or not depends on the policies set up by identity administrator. This usually means that the password will be changed if it makes sense for the current situation and settings. This is the reasonable default choice.
Password will not be changed for this system.
Password capability is not supported for this system. As the result, password will not be changed for this system.
You can adjust the password propagation settings by clicking on the icons and thus fine-tune how the password change is propagated to each individual system.
+ChangePasswordPanel.helpPopupTitle=Password propagation help
+PageBase.button.tooltip.clearSearch=Clear
+mainForm.uploadTooLarge = Upload must be less than ${maxSize}.
+mainForm.uploadFailed = File failed to upload: ${exception.localizedMessage}
+PageSelfCredentials.couldntResolve=Couldn't resolve resource.
+roleMemberPanel.type=Type:
+roleMemberPanel.tenant=Tenant:
+roleMemberPanel.project=Org/Project:
+roleMemberPanel.indirectMembers=Include indirect members
+roleMemberPanel.allRelations=Show all relations
+roleMemberPanel.menu.createOwner=Create owner
+roleMemberPanel.menu.assignOwners=Assign owners
+roleMemberPanel.menu.createApprover=Create approver
+roleMemberPanel.menu.assignApprovers=Assign approvers
+roleMemberPanel.menu.add=Ajouter un utilisateur
+roleMemberPanel.menu.remove=Retirer un utilisateur
+roleMemberPanel.menu.recompute=Recompute member
+roleMemberPanel.menu.recomputeAll=Recompute all
+roleMemberPanel.menu.removeAll=Enlever tout
+roleMemberPanel.relation=Relation
+SearchPanel.more=More...
+SearchPanel.add=Ajouter
+SearchPanel.close=Fermer
+SearchPanel.properties=Propriétés
+SearchPanel.fullText=Full text
+SearchPanel.fullTextSearch=Full text search
+SearchItemPanel.all=Tout
+SearchItemPanel.update=Mettre à jour
+SearchItemPanel.close=Fermer
+SearchItemPanel.add=Ajouter
+SearchItemPanel.remove=Remove
+SearchItemPanel.browse=Browse
+SearchItemPanel.or=or
+operation.com.evolveum.midpoint.schema.constants.ConnectorTestOperation.connectorSchema=Connector schema
+FeedbackAlertMessageDetails.operation=Operation
+FeedbackAlertMessageDetails.message=Message
+FeedbackAlertMessageDetails.params=Parameters
+FeedbackAlertMessageDetails.contexts=Context
+FeedbackAlertMessageDetails.count=Count
+FeedbackAlertMessageDetails.error=Erreur
+operation.com.evolveum.midpoint.model.impl.lens.projector.InboundProcessor.processInbound=Process inbound (Model)
+operation.com.evolveum.midpoint.model.impl.lens.projector.Projector.project=Project (Model)
+operation.com.evolveum.midpoint.model.impl.lens.projector.AssignmentProcessor.processAssignmentsProjections=Process assignments (Model)
+operation.com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails.save=Save (GUI)
+operation.com.evolveum.midpoint.repo.api.RepositoryService.getVersion=Get version (Repository)
+operation.com.evolveum.midpoint.task.quartzimpl.execution.ExecutionManager.scheduleRunnableTaskNow=Schedule runnable task now (Task)
+operation.com.evolveum.midpoint.web.page.admin.server.PageTaskAdd.runNowTask=Run now (Task)
+operation.com.evolveum.midpoint.task.api.TaskManager.scheduleTasksNow=Schedule tasks now (Task)
+operation.com.evolveum.midpoint.model.impl.importer.ObjectImporter.resolveReference=Resolve reference (Model)
+operation.com.evolveum.midpoint.model.impl.importer.ObjectImporter.encryptValues=Encrypt values (Model)
+operation.com.evolveum.midpoint.model.impl.importer.ObjectImporter.importObjectToRepository=Import object to repository (Model)
+operation.com.evolveum.midpoint.model.api.ModelService.executeChange=Execute changes (Model)
+operation.com.evolveum.midpoint.model.impl.lens.projector.AssignmentProcessor.evaluateAssignment=Evaluate assignment (Model)
+operation.com.evolveum.midpoint.wf.impl.WfHook.invoke=Invoke (Workflow)
+operation.com.evolveum.midpoint.model.impl.lens.ChangeExecutor.execute=Execute (Model)
+operation.com.evolveum.midpoint.model.impl.lens.ChangeExecutor.execute.focus.UserType=Execute - user (Model)
+operation.com.evolveum.midpoint.model.impl.lens.ChangeExecutor.executeDelta=Execute delta (Model)
+operation.com.evolveum.midpoint.task.api.Task.listSubtasksDeeply=List subtasks deeply (Task)
+operation.com.evolveum.midpoint.task.api.Task.listSubtasksRaw=List subtasks raw (Task)
+operation.com.evolveum.midpoint.web.page.self.PageSelfCredentials.savePassword=Change password (GUI)
+operation.com.evolveum.midpoint.web.page.self.PageRequestRole.save=Changes were successfully saved
+operation.com.evolveum.midpoint.web.page.self.PageRequestRole.taskCreated=The process of assigning a role is waiting for the approval.
+PageError.button.home=Home
+PageResource.tab.connector=Connecteur
+PageResource.tab.connector.connectorLabel=Connecteur
+PageResource.tab.connector.connectorPoolLabel=Connector pool
+PageResource.tab.content.account=Compte
+PageResource.tab.content.entitlement=Entitlements
+PageResource.tab.content.generic=Generics
+PageResource.tab.content.others=Uncategorized
+PageResource.tab.content.tasks=Defined Tasks
+ResourceContentTabPanel.searchType.repository=Repository
+ResourceContentTabPanel.searchType.resource=Ressource
+ResourceContentTabPanel.searchType=Search In:
+PagePreviewChanges.primaryChangesOne=Primary changes: {0} object
+PagePreviewChanges.primaryChangesMore=Primary changes: {0} objects
+PagePreviewChanges.secondaryChangesOne=Secondary changes: {0} object
+PagePreviewChanges.secondaryChangesMore=Secondary changes: {0} objects
+PagePreviewChanges.policyViolationMessages=Policy violation messages
+PagePreviewChanges.approvalsRequired=Approvals required
+PagePreviewChanges.button.continueEditing=Continue editing
+PagePreviewChanges.button.save=Enregistrer
+ScenePanel.object={0} object
+ScenePanel.objects={0} objects
+ScenePanel.item=Item
+ScenePanel.oldValue=Old value
+ScenePanel.newValue=New value
+ScenePanel.value=Valeur
+SceneItemLinePanel.removedValue=Removed value
+SceneItemLinePanel.addedValue=Added value
+SceneItemLinePanel.unchangedValue=Unchanged value
+SceneItemLinePanel.unknownLabel=(unknown)
+operation.com.evolveum.midpoint.web.page.admin.resources.ResourceContentTabPanel.changeOwner=Change owner (GUI)
+TaskSummaryPanel.progressWithTotalKnown=Progress: {0} out of {1}
+TaskSummaryPanel.progressWithTotalUnknown=Progress: {0}
+TaskSummaryPanel.progressIfSuspended=(suspended)
+TaskSummaryPanel.progressIfWaiting=(waiting)
+TaskSummaryPanel.progressIfClosed=(closed)
+TaskSummaryPanel.progressIfStalled=(stalled since {0})
+TaskSummaryPanel.lastProcessed=Last object processed: {0}
+ResourceContentResourcePanel.showExisting=Show existing
+ResourceContentResourcePanel.newTask=Create new
+SearchPanel.advanced=Advanced
+SearchPanel.basic=Basic
+SearchPanel.search=Recherche
+SearchPanel.debug=Déboguer
+ResourceContentResourcePanel.realSearch=(In fact) Searching by:
+typedAssignablePanel.selectedOrgs=Orgs:
+typedAssignablePanel.selectedResources=Resources:
+typedAssignablePanel.selectedRoles=Roles:
+typedAssignablePanel.selectedServices=Services:
+TypedAssignablePanel.orgTreeView=Org. tree view
+TypedAssignablePanel.Kind=Sorte
+TypedAssignablePanel.Intent=Objectif
+SearchPanel.insertFilterXml=Insert filter xml (SearchFilterType)
+autoRefreshPanel.refreshNow=Refresh now
+autoRefreshPanel.resumeRefreshing=Resume refreshing
+autoRefreshPanel.pauseRefreshing=Pause refreshing
+autoRefreshPanel.refreshingEach=Refreshing each {0} sec
+autoRefreshPanel.noRefreshing=(no refreshing)
+PageAdmin.menu.top.services=Services
+PageAdmin.menu.top.services.list=List services
+PageAdmin.menu.top.services.new=New service
+PageAdmin.menu.top.services.edit=Edit service
+taskShowAdvancedFeaturesPanel.label=Show advanced features
+taskWfParentPanel.changesNotRequiringApproval=Changes not requiring approval
+taskOtherChangesPanel.label.state=State:
+taskOtherChangesPanel.state.FINAL=Changes have been applied (successfully or not)
+taskOtherChangesPanel.state.PRIMARY=Changes are waiting to be applied
+taskOtherChangesPanel.state.SECONDARY=Changes are waiting to be applied
+taskWfChildPanel.showParent=Show request in a context of the whole operation.
+taskWfChildPanel.showNextStages=Show following stages
+taskWfChildPanel.showWholeProcess=Show the whole process
+TaskSummaryPanel.requestedBy=Requested by: {0}
+TaskSummaryPanel.requestedByWithFullName=Requested by: {0} ({1})
+TaskSummaryPanel.requestedOn=Requested on: {0}
+TaskSummaryPanel.requestedByAndOn=Requested by {0} on {1}
+TaskSummaryPanel.stage=Stage: {0}
+TaskSummaryPanel.rejected=Rejected
+TaskSummaryPanel.approved=Approved
+operation.com.evolveum.midpoint.web.page.admin.resources.PageResource.refreshSchema=Refresh schema (GUI)
+TaskDto.changesApplied=Changes applied (successfully or not)
+TaskDto.changesBeingApplied=Changes being applied
+TaskDto.changesWaitingToBeApplied=Changes waiting to be applied
+TaskDto.changesWaitingToBeApproved=Changes waiting to be approved
+TaskDto.changesRejected=Changes rejected
+TaskDto.changesCanceled=Changes canceled
+PageServices.title=Service List
+PageServices.message.deleteServicesConfirm=Do you really want to delete selected {0} service(s)?
+PageServices.message.confirmationMessageForMultipleObject=Do you really want to {0} selected {1} service(s)?
+PageServices.message.confirmationMessageForSingleObject=Do you really want to {0} service '{1}'?
+PageServices.message.nothingSelected=No service has been selected.
+PageServices.message.buttonDelete=Effacer
+LiveSyncHandlerPanel.deleteToken=Delete token
+ScannerHandlerPanel.lastScanTimestamp=Last scan timestamp
+ScriptExecutionHandlerPanel.script=Script
+QueryBasedHandlerPanel.objectType=Object type
+QueryBasedHandlerPanel.query=Query
+DeleteHandlerPanel.executeInRawMode=Execute in raw mode
+ExecuteChangesHandlerPanel.change=Change
+ExecuteChangesHandlerPanel.options=Options
+ReportCreateHandlerPanel.downloadCreatedReport=Download created report
+ReportCreateHandlerPanel.reportParameters=Report parameters
+OperationResultPanel.showTask=(show task)
+PageResources.inlineMenuItem.test=Tester la connexion
+PageRequestRole.title=Request a role
+MainObjectListPanel.refresh=Refresh
+MainObjectListPanel.newObject=New
+MainObjectListPanel.import=Importer
+MainObjectListPanel.export=Exporter
+MainObjectListPanel.exportFileName=export
+TreeTablePanel.menu.createMember=Create member
+TreeTablePanel.menu.createManager=Create manager
+TreeTablePanel.menu.addMembers=Assign members
+TreeTablePanel.menu.addManagers=Assign managers
+TreeTablePanel.menu.unassignMembersSelected=Unassign selected members
+TreeTablePanel.menu.unassignMembersAll=Unassign all members
+TreeTablePanel.menu.removeManagersAll=Unassign all managers
+TreeTablePanel.menu.recomputeMembersSelected=Recompute selected members
+TreeTablePanel.menu.recomputeMembersAll=Recompute all members
+TreeTablePanel.menu.recomputeMembersAllDirect=Recompute direct members
+TreeTablePanel.menu.recomputeManagersAll=Recompute all managers
+TreeTablePanel.menu.deleteManagersAll=Delete all managers
+TreeTablePanel.menu.deleteManager.confirm=Are you sure you want to delete selected manager from system? This change is permanent.
+TreeTablePanel.menu.deleteManagersAll.confirm=All defined managers will be permanently removed from system. Are you sure to perform this action?
+TreeTablePanel.move=Move
+TreeTablePanel.makeRoot=Make root
+TreeTablePanel.delete=Effacer
+TreeTablePanel.recompute=Recompute
+TreeTablePanel.edit=Éditer
+TreeTablePanel.viewDetails=View details
+TreeTablePanel.createChild=Create child
+WorkItemSummaryPanel.allocated=Allocated
+WorkItemSummaryPanel.notAllocated=Not allocated
+WorkItemPanel.showRequest=Show the approval request.
+DefinitionStagesPanel.confirmDelete=Confirm delete
+DefinitionStagesPanel.confirmDeleteText=Do you really want to delete stage '{0}'?
+PageCertDefinition.outcomeStrategyHelpLabel=Please see also
+PageCertDefinition.outcomeStrategyHelpLink=this document
+PageCertDefinition.outcomeStrategyHelp=How is the overall outcome for a case determined, based on outcomes in individual stages? Note: 'Stop review on:' field shows outcomes that prevent a case from being advanced to the next stage. Usually you need not change the default value. If necessary, you could do that through the XML configuration.
+PageCertDefinition.campaignLastStartedHelp=When was last campaign created according to this definition started?
+PageCertDefinition.campaignLastClosedHelp=When was last campaign created according to this definition closed - either after successfully going through all stages, or closed at any time. However, if a campaign is deleted without being closed first, it is not shown here.
+PageCertDefinition.scopeObjectTypeHelp=Determines which objects will be considered to be in the scope of the certification campaigns. Features of these objects (e.g. whether to certify their assignments or their inducements or both, etc) are selected below.
+PageCertDefinition.scopeSearchFilterHelp=If only a subset of objects of given type is to be considered for certification, you can specify the corresponding filter here. For example, you can specify that only users from a certain organization should be certified. Or that only employees with a specific employee type should be considered.
+PageCertDefinition.scopeAssignmentsInducementsHelp=Select what features (assignments, inducements or both) of the objects described above are to be certified.
+PageCertDefinition.scopeIncludeTargetTypesHelp=When certifying assignments or inducements, you can specify what target types are taken into account. For example, you can say that you want to certify only assignments of roles (to, for example, users).
+PageCertDefinition.scopeIncludeByStatusHelp=Whether to certify only assignments/inducements that have administrative status set to ENABLED (or not set at all). Note that what is relevant is the administrative status of the assignment, not the administrative status of the assigned object.
+StageDefinitionPanel.stageDurationHelp=Duration of this stage, used to determine stage end time. The end time is computed as the moment of stage opening plus the duration, rounded up to 23:59:59 of the last day. Duration is specified in ISO 8601 format, like P14D for 14 days, P3W for 3 weeks, P2M for 2 months, etc.
+StageDefinitionPanel.notifyBeforeDeadlineHelp=How long before the stage end the reminding notifications (to reviewers and campaign owner) will be sent. It is possible to specify more values; separate them by commas. Time interval is specified in ISO 8601 format, like PT12H for 12 hours, P2D for 2 days, P1W for 1 week, etc. An example: PT48H, PT12H says that the first notification will be sent 48 hours before stage end, and the second one 12 hours before the end.
+StageDefinitionPanel.notifyWhenNoDecisionHelp=If checked, a 'stage end approaching' notification is sent to a reviewer only if he/she has some cases waiting for his/her decision. If not checked, reviewers always get their notifications - regardless of whether they have provided a decision or not. (Note that notifications to the campaign owner about approaching stage end are always sent, regardless of this setting.)
+StageDefinitionPanel.reviewerSpecificationTargetHelp=Selection of reviewers based on assignment/inducement target owner/approver. E.g. you can specify that the role owner is used to certify all assignments of 'his' role (to any users).
+StageDefinitionPanel.reviewerSpecificationObjectHelp=Selection of reviewers based on object that has something assigned (or induced) to. E.g. you can specify that the role owner is used to certify all inducements made to 'his' role.
+StageDefinitionPanel.reviewerUseObjectManagerHelp=Selection of reviewers based on managers of object (typically a user) that has something assigned/induced to. E.g. you can specify that a manager is used to certify all assignments made to users in 'his' organization.
+StageDefinitionPanel.reviewerUseObjectManagerOrgTypeHelp=Influences determination of a manager of a user: First, we take all managers of all organizations the user belongs to. We exclude the user himself, if he is a manager of such organization (and if 'allow managers to approve their own assignments' below is unchecked). If the value in this field is filled-in, we use it to select only organizations with given organization type value - for example, 'functional' (if you have e.g. both functional-type and project-type organizations). If this field is empty, we take into account all organizations. If we find no suitable manager, we continue with all parent organizations (again, of the given type, if specified).
+StageDefinitionPanel.reviewerUseObjectManagerAllowSelfHelp=If a user is a manager in his organization, could he be selected as a reviewer for his own assignments? If unchecked (the default), a higher-level manager is searched for - see description for the above field.
+StageDefinitionPanel.defaultReviewerRefHelp=This reviewer (or reviewers) will be used if the above condition would lead to no reviewer.
+StageDefinitionPanel.additionalReviewerRefHelp=This reviewer (or reviewers) will be used in addition to any reviewers selected by the above conditions.
+StageDefinitionPanel.outcomeStrategyHelp=If there is more than one reviewer selected, we need a strategy for combining their responses into stage-level outcome. For example, is it sufficient if any of them accepts the certification case? Or should all of them accept? Select the strategy using this field.
+StageDefinitionPanel.outcomeIfNoReviewersHelp=What should be the outcome if there are no reviewers assigned, e.g. if the reviewer is defined as the target role owner, but a particular role has no owner? This does NOT apply in situations when there are reviewers assigned, but they provide no response.
+StageDefinitionPanel.stopReviewOnHelp=What outcomes will prevent a case from being advanced to the next stage? Usually you need not change the default value. If necessary, you could do that through the XML configuration.
+StageDefinitionPanel.configurationHelpLabel=For more information about configuring certification campaign stages, please see also
+StageDefinitionPanel.configurationHelpLink=this document
+NameStep.configurationWillBeLost=The selected connector configuration schema is different from the current one. Configuration properties will be lost if you will proceed.
+resultsHandlerConfiguration=Results handlers
+enableFilteredResultsHandler=Enable additional filtering of results
+enableFilteredResultsHandlerHelp=This handler filters results retrieved from the resource by the connector, at the level of connector framework. It is used by connector implementations that do not provide complete filtering by themselves. Enabling this handler has some drawbacks e.g. in the area of paging. So it is to be used only if really necessary. If not sure, it is advisable to use filtering in validation mode. Default value for current version of ConnId: enabled.
+filteredResultsHandlerInValidationMode=Perform filtering in validation mode only
+filteredResultsHandlerInValidationModeHelp=Switches the result filtering into validation mode: all data produced by the connector are checked by the connector framework to see if they are properly filtered. In case of improper filtering, an exception is raised. This mode is to be used for connectors that are expected to provide complete filtering, but their functionality in this area has to be verified. Default value for current version of ConnId: disabled.
+enableCaseInsensitiveFilter=Make filtering case insensitive
+enableCaseInsensitiveFilterHelp=This option makes filtering case insensitive, for all attributes on the resource. Used for case-insensitive resources. Default value for current version of ConnId: disabled.
+enableNormalizingResultsHandler=Enable handler that normalizes returned data
+enableNormalizingResultsHandlerHelp=This handler normalizes each attribute that is passed from resource to the system. Usually recommended to be turned off. Default value for current version of ConnId: enabled.
+enableAttributesToGetSearchResultsHandler=Enable 'attributes to get' results handler
+enableAttributesToGetSearchResultsHandlerHelp=This handler is used to implement 'attributes to get' option. It is advisable to keep the default setting of 'enabled' (in current version of ConnId).
+PageResourceWizard.autoSaveWarning=The resource is automatically saved on each transition between wizard steps.
+PageResourceWizard.readOnlyNote=Resource is in read-only mode.
+PageResourceWizard.readOnlySwitch=Click here to enable editing.
+operation.com.evolveum.midpoint.web.page.admin.users.component.TreeTablePanel.recompute=Recompute (GUI)
+Button.ok=OK
+Button.assign=Assigner
+Note=Note
+Warning=Alerte
+ProfilingConfigPanel.profilingMustBeEnabled=In order to use profiling, the 'profilingEnabled' system configuration parameter (in config.xml file) must be set to 'true'.
+OperationResultPanel.result=Result
+ResourceTasksPanel.definedTasks=Defined tasks
+ResourceTasksPanel.noTasksSelected=No tasks were selected.
+ObjectBrowserPanel.chooseObject=Choose object
+TypedAssignablePanel.selectObjects=Sélectionnez un objet
+OrgTreeAssignablePanel.selectOrg=Select organization(s)
+ChooseFocusTypeDialogPanel.chooseType=Choose type
+TestConnectionResultPanel.testConnection.result=Test connection result(s)
+TestConnectionResultPanel.message=Test is running, please, wait for results.
+operation.com.evolveum.midpoint.web.page.admin.configuration.PageSystemConfiguration.updateSystemConfiguration=Update system configuration (GUI)
+peration.com.evolveum.midpoint.web.page.admin.server.PageTaskEdit.saveTask=Save task (GUI)
+operation.com.evolveum.midpoint.notifications.impl.notifiers.GeneralNotifier.processEvent=Process event (Notification)
+operation.com.evolveum.midpoint.model.impl.lens.ChangeExecutor.execute.focus.OrgType=Execute OrgType (Model)
+TreeTablePanel.menu.deleteMember.confirm=All selected members (users, organizations, services, roles) will be permanently deleted from system. Are you sure to perform this action?
+TreeTablePanel.menu.deleteAllMembers.confirm=All focus members (users, organizations, services, roles) will be permanently deleted from system. Are you sure to perform this action?
+PageTasksCertScheduling.title=Certification scheduling
+PageResourceVisualization.title=Visualization of mappings for {0}
+PageResourceVisualization.dotMessage=Rendering of DOT graph could not be carried out. Please check the error message below, and make sure that:
+PageResourceVisualization.dot1=DOT rendering software is installed at your server. The recommended one is Graphviz
+PageResourceVisualization.dot2=The path to DOT rendering executable is correctly set in you config.xml file.
+PageResourceVisualization.moreInformation=For more information, please see
+PageResourceVisualization.moreInformationLink=this article
+PageResourceVisualization.errorMessage=Error message:
+PageResourceVisualization.seeOnline=You can also try to use an online DOT renderer, for example
+PageResourceVisualization.seeOnlineLink=webgraphviz.com
+PageResourceVisualization.copyInstruction=Simply paste the following DOT code into it.
+OrgMemberPanel.editUserTitle=Edit/View details
+OrgMemberPanel.unlinkTitle=Unlink manager
+OrgMemberPanel.deleteTitle=Delete manager
+PagePreviewChanges.title=Preview changes
+operation.com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails.previewChanges=Preview changes
+operation.com.evolveum.midpoint.task.api.Task.run=Run task
+operation.com.evolveum.midpoint.web.util.TaskOperationUtils.runNowTask=Run task
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertDefinition.saveDefinition=Save definition
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertCampaign.advanceLifecycle=Campaign state
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertCampaign.openNextStage=Open next stage
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertCampaign.closeStage=Close stage
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertCampaign.closeCampaign=Close campaign
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertCampaign.startRemediation=Start remediation
+operation.com.evolveum.midpoint.web.page.admin.cases.PageCaseWorkItem.closeCaseWorkItem=Close Case
+operation.com.evolveum.midpoint.web.page.admin.cases.PageCase.saveCase=Case saved
+
+operation.com.evolveum.midpoint.certification.api.CertificationManager.openNextStage=Open next stage
+operation.com.evolveum.midpoint.certification.api.CertificationManager.closeCampaign=Close campaign
+operation.com.evolveum.midpoint.certification.api.CertificationManager.createCampaign=Create campaign
+operation.com.evolveum.midpoint.certification.api.CertificationManager.closeCurrentStage=Close current stage
+operation.com.evolveum.midpoint.certification.api.CertificationManager.recordDecision=Record decision
+operation.com.evolveum.midpoint.certification.api.CertificationManager.searchDecisionsToReview=Search decisions to review
+operation.com.evolveum.midpoint.certification.api.CertificationManager.getCampaignStatistics=Get campaign statistics
+
+operation.com.evolveum.midpoint.repo.api.RepositoryService.searchContainers=Search for containers
+operation.com.evolveum.midpoint.repo.api.RepositoryService.searchObjectsIterative=Search for objects (iterative)
+
+operation.PageCertCampaigns.startCampaign=Start campaign
+operation.PageCertCampaigns.closeStage=Close stage
+operation.PageCertCampaigns.openNextStage=Open next stage
+operation.PageCertCampaigns.startRemediation=Start remediation
+operation.PageCertCampaigns.closeCampaign=Close campaign
+
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertDecisions.recordAction=Record action
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertDecisions.recordActionSelected=Record selected actions
+
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertDefinition.loadDefinition=Load definition
+
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertDefinitions.createCampaign=Create campaign
+operation.com.evolveum.midpoint.web.page.admin.certification.PageCertDefinitions.deleteDefinition=Delete definition
+
+SceneDto.unnamed=(unnamed)
+LockoutStatusPanel.undoButtonLabel=Undo
+LockoutStatusPanel.unlockButtonLabel=Set to "Normal"
+LockoutStatusPanel.changesSaving=(will be applied after Save button click)
+operation.com.evolveum.midpoint.web.page.admin.server.PageTaskEdit.saveTask=Save task (GUI)
+operation.com.evolveum.midpoint.web.page.admin.users.PageUsers.unlockUsers=Unlock user
+operation.com.evolveum.midpoint.web.page.admin.workflow.PageProcessInstances.stopProcessInstance=Stop process instance
+
+#values for icon title on Users list page. The name of the property key
+#is generated in the following way:
+# ColumnUtils.getUserIconColumn.createTitleModel. + GuiStyleConstants.CLASS_ICON_STYLE_NORMAL = ColumnUtils.getUserIconColumn.createTitleModel.normal
+ColumnUtils.getUserIconColumn.createTitleModel.normal=normal
+ColumnUtils.getUserIconColumn.createTitleModel.disabled=disabled
+ColumnUtils.getUserIconColumn.createTitleModel.archived=archived
+ColumnUtils.getUserIconColumn.createTitleModel.privileged=privileged
+ColumnUtils.getUserIconColumn.createTitleModel.end-user=end-user
+ColumnUtils.getUserIconColumn.createTitleModel.manager=manager
+ColumnUtils.getUserIconColumn.createTitleModel.broken=broken
+ColumnUtils.getUserIconColumn.createTitleModel.up=up
+ColumnUtils.getUserIconColumn.createTitleModel.down=down
+FocusListInlineMenuHelper.menu.delete=Effacer
+FocusListInlineMenuHelper.menu.disable=Disable
+FocusListInlineMenuHelper.menu.enable=Enable
+FocusListInlineMenuHelper.menu.reconcile=Reconcile
+FocusListInlineMenuHelper.message.deleteObjectConfirm=Do you really want to delete selected {0} object(s)?
+FocusListInlineMenuHelper.message.deleteObjectConfirmSingle=Do you really want to delete object '{0}'?
+FocusListInlineMenuHelper.message.nothingSelected=No object has been selected.
+operation.com.evolveum.midpoint.web.page.admin.roles.PageRoles.enableObjects=Enable roles (GUI)
+operation.com.evolveum.midpoint.web.page.admin.roles.PageRoles.enableObject=Enable role (GUI)
+operation.com.evolveum.midpoint.web.page.admin.roles.PageRoles.disableObjects=Disable roles (GUI)
+operation.com.evolveum.midpoint.web.page.admin.roles.PageRoles.disableObject=Disable role (GUI)
+operation.com.evolveum.midpoint.web.page.admin.roles.PageRoles.reconcileObjects=Reconcile roles (GUI)
+operation.com.evolveum.midpoint.web.page.admin.roles.PageRoles.reconcileObject=Reconcile role (GUI)
+operation.com.evolveum.midpoint.web.page.admin.roles.PageRoles.deleteObjects=Delete roles (GUI)
+operation.com.evolveum.midpoint.web.page.admin.roles.PageRoles.deleteObject=Delete role (GUI)
+operation.com.evolveum.midpoint.web.page.admin.services.PageServices.enableObjects=Enable services (GUI)
+operation.com.evolveum.midpoint.web.page.admin.services.PageServices.enableObject=Enable service (GUI)
+operation.com.evolveum.midpoint.web.page.admin.services.PageServices.disableObjects=Disable services (GUI)
+operation.com.evolveum.midpoint.web.page.admin.services.PageServices.disableObject=Disable service (GUI)
+operation.com.evolveum.midpoint.web.page.admin.services.PageServices.reconcileObjects=Reconcile services (GUI)
+operation.com.evolveum.midpoint.web.page.admin.services.PageServices.reconcileObject=Reconcile service (GUI)
+operation.com.evolveum.midpoint.web.page.admin.services.PageServices.deleteObjects=Delete services (GUI)
+operation.com.evolveum.midpoint.web.page.admin.services.PageServices.deleteObject=Delete service (GUI)
+operation.com.evolveum.midpoint.web.page.admin.resources.ResourceContentTabPanel.importObject=Import object (GUI)
+PageConnectorHosts.title=Connector hosts
+operation.com.evolveum.midpoint.web.page.admin.configuration.PageRepositoryQuery.checkQuery=Check query (GUI)
+operation.com.evolveum.midpoint.web.page.admin.configuration.PageRepositoryQuery.translateQuery=Translate query (GUI)
+operation.com.evolveum.midpoint.web.page.admin.configuration.PageRepositoryQuery.executeQuery=Execute query (GUI)
+operation.com.evolveum.midpoint.model.api.ModelDiagnosticService.executeRepositoryQuery=Execute repository query (Model diagnostic service)
+operation.com.evolveum.midpoint.repo.api.RepositoryService.executeQueryDiagnostics=Execute query diagnostics (Repository)
+PageEvaluateMapping.title=Evaluate mapping
+PageEvaluateMapping.button.evaluateMapping=Evaluate mapping
+PageEvaluateMapping.message.emptyString=Please provide a mapping to execute.
+PageEvaluateMapping.result=Result
+PageEvaluateMapping.mapping=Mapping
+PageEvaluateMapping.request=Requête
+PageEvaluateMapping.chooseSample=Or use a sample:
+PageEvaluateMapping.sample.FullName_NoDelta=Full name mapping (no change)
+PageEvaluateMapping.sample.FullName_Delta=Full name mapping (change in givenName)
+PageEvaluateMapping.sample.FullName_Delta_Ref=Full name mapping (change in givenName); source from repository
+PageEvaluateMapping.sample.FullName_Delta_Cond=Full name mapping with condition (change in givenName)
+PageEvaluateMapping.sample.OrgName=Deriving attribute from parent org's name
+PageAssignmentShoppingKart.title=Assignment request
+PageAssignmentShoppingKart.roleCatalogIsNotConfigured=Role catalog is not configured in the system configuration xml
+AssignmentConflictPanel.existingAssignmentLabelMessage=(which user already has)
+AssignmentConflictPanel.addedAssignmentLabelMessage=(which is added to shopping cart)
+AssignmentConflictPanel.conflictMessage=conflicts with
+AssignmentConflictPanel.removeButton=Remove
+AssignmentConflictPanel.unselectButton=Unselect
+AssignmentConflictPanel.undoAction=Undo
+PageAssignmentConflicts.title=Assignments conflicts
+PageAssignmentConflicts.back=Retour
+PageAssignmentConflicts.submit=Submit
+AssignmentCatalogPanel.selectTargetUser=Select target user
+AssignmentCatalogPanel.selectSourceUser=Select assignments source user
+AssignmentCatalogPanel.sourceUserSelected=Assignments of {0}
+AssignmentCatalogPanel.selectAssignmentsUserOwner=Select assignments user owner
+AssignmentCatalogPanel.requestForMe=Target user: me
+AssignmentCatalogPanel.requestFor=Target user: {0}
+AssignmentCatalogPanel.requestForMultiple={0} target users selected
+AssignmentCatalogPanel.assignmentsOwner={0}'s assignments
+MultiButtonPanel.plusIconTitle=Add item to shopping cart
+MultiButtonPanel.assignmentDetailsPopupTitle=Assignment details
+MultiButtonPanel.detailsLink=Propriétés
+MultiButtonPanel.addToCartLink=Add to cart
+MultiButtonPanel.alreadyAssignedIconTitle=Assigned as
+PageAssignmentDetails.title=Assignment details
+PageAssignmentDetails.backButton=Retour
+PageAssignmentDetails.addToCartButton=Add to cart
+PageAssignmentsList.submitButton=Submit
+PageAssignmentsList.resolveConflicts=Resolve conflicts
+PageAssignmentsList.commentHere=Comment here...
+PageAssignmentsList.requestComment=Request comment (optional)
+PageAssignmentsList.saveAssignmentsError=Could not save assignments. Reason:
+AssignmentShoppingCartPanel.treeTitle=Role catalog
+AssignmentViewType.ROLE_CATALOG_VIEW=Role catalog view
+AssignmentViewType.ROLE_TYPE=All roles view
+AssignmentViewType.ORG_TYPE=All organizations view
+AssignmentViewType.SERVICE_TYPE=All services view
+AssignmentViewType.USER_TYPE=User's assignments
+PageAssignmentsList.requestButton = Requête
+operation.com.evolveum.midpoint.web.page.self.PageAssignmentsList.requestAssignments=Request assignment
+com.evolveum.midpoint.web.page.self.PageAssignmentsList.requestAssignments=Request assignments
+PageAssignmentsList.title=New assignments list
+PageAuditLogViewer.title=Audit Log Viewer
+PageAuditLogViewer.menuName=Audit Log Viewer
+PageAuditLogViewer.timeLabel=Time
+PageAuditLogViewer.fromLabel=De
+PageAuditLogViewer.toLabel=A
+PageAuditLogViewer.initiatorNameLabel=Initiator
+PageAuditLogViewer.channelLabel=Channel
+PageAuditLogViewer.hostIdentifierLabel=Host Identifier
+PageAuditLogViewer.targetNameLabel=Cible
+PageAuditLogViewer.targetTypeLabel=Target Type
+PageAuditLogViewer.targetOwnerNameLabel=Target Owner
+PageAuditLogViewer.eventTypeLabel=Type d'événement
+PageAuditLogViewer.eventTypeShortLabel=Type
+PageAuditLogViewer.eventStageLabel=Event Stage
+PageAuditLogViewer.eventStageShortLabel=Stage
+PageAuditLogViewer.outcomeLabel=Outcome
+PageAuditLogViewer.changedItem=Item changed
+PageAuditLogViewer.valueRefTargetNamesLabel=Reference Target
+AuditLogViewerPanel.dateValidatorMessage=From date must be before To date.
+AuditLogViewerPanel.resetSearchButton=Reset search
+AuditEventRecordType.timestamp=Time
+AuditEventRecordType.initiatorRef=Initiator
+AuditEventRecordType.taskIdentifier=Task Identifier
+AuditEventRecordType.channel=Channel
+AuditEventRecordType.delta=Delta
+AuditEventRecordType.targetRef=Cible
+AuditEventRecordType.targetOwnerRef=Target owner
+PageAuditLogDetails.title=Audit Log Details
+PageAuditLogDetails.eventTimestamp=Timestamp
+PageAuditLogDetails.eventIdentifier=Event Identifier
+PageAuditLogDetails.eventType=Type d'événement
+PageAuditLogDetails.eventStage=Event Stage
+PageAuditLogDetails.eventInitiatorRef=Initiator
+PageAuditLogDetails.eventAttorneyRef=Attorney
+PageAuditLogDetails.eventTargetRef=Target ref.
+PageAuditLogDetails.eventTargetOwnerRef= Target Owner ref.
+PageAuditLogDetails.eventResult=Result
+PageAuditLogDetails.eventOutcome=Outcome
+PageAuditLogDetails.sessionIdentifier=Session Identifier
+PageAuditLogDetails.taskIdentifier=Task Identifier
+PageAuditLogDetails.taskOID=Task oid
+PageAuditLogDetails.hostIdentifier=Host Identifier
+PageAuditLogDetails.nodeIdentifier=Node
+PageAuditLogDetails.remoteHostAddress=Remote Host
+PageAuditLogDetails.channel=Channel
+PageAuditLogDetails.parameter=Parameter
+PageAuditLogDetails.message=Message
+PageAuditLogDetails.deltaKey=Delta List
+ObjectDeltaOperationType.resourceName=Resource name
+ObjectDeltaOperationType.objectName=Object name
+ObjectDeltaOperationType.executionResult=Execution result
+PageMergeObjects.noMergeResultObjectWarning=Merge preview object wasn't found
+PageMergeObjects.title=Merge objects
+PageMergeObjects.tabTitle=Merge preview
+PageMergeObjects.switchDirectionButton=Switch direction
+PageMergeObjects.mergeButton=Merge
+PageMergeObjects.mergeDeltaPreviewButton=Merge delta preview
+PageMergeObjects.backButton=Retour
+PageMergeObjects.mergeType=Merge type
+MergeObjectsPanel.switchDirection=Switch direction
+MergeType.DEFAULT=default
+MergeType.EXPRESSION=expression
+MergeType.ALL_RIGHT=allRight
+MergeType.ALL_LEFT=allLeft
+MergeType.EMPTY=empty
+PageMergeObjects.warningMessage=Two objects' oids should be specified
+PageSelfRegistration.back=Retour
+PageSelfRegistration.register=Register
+PageSelfRegistration.registration.success=Registration was successful
+PageSelfRegistration.registration.error=Registration failed : {0}
+PageSelfRegistration.registration.confirm.message=Congratulation! \n\n\n You have been successfully registered. To activate your account check your email and confirm your registration.
+PageRegistrationConfirmation.confirmation.error=Failed to confirm your registration. We are sorry, but probably you'll need to contact system administrator.
+PageRegistrationConfirmation.continueToLogin=Continue to login page
+PageRegistrationConfirmation.confirmation.successful=Confirmation successful
+PageSelfRegistration.title=Registration
+PageRegistrationConfirmation.title=Confirm registration
+PageSelfRegistration.reload=Reload
+PageSelfRegistration.captcha.validation.failed=CAPTCHA validation failed, try again
+ObjectType.name=Nom
+ObjectType.subType=Subtype
+ObjectType.lifecycleState=Lifecycle state
+ObjectType.description=Description
+CaseType.objectRef=Objet
+CaseType.targetRef=Cible
+CaseType.objectChange=Object Delta
+CaseType.state=État
+CaseType.outcome=Outcome
+CaseType.closeTimestamp=Close Timestamp
+CaseType.event=Event
+CaseType.workItem=Work Item
+CaseType.jpegPhoto=Evidence
+AbstractWorkItemType.assigneeRef=Assignee
+AbstractWorkItemType.originalAssigneeRef=Original Assignee
+AbstractWorkItemType.deadline=Deadline
+AbstractWorkItemType.performerRef=Performer
+AbstractWorkItemType.closeTimestamp=Fermé
+PageUserHistory.title='{0}' historical data {1}
+PageXmlDataReview.title=Historical data
+PageXmlDataReview.aceEditorPanelTitle='{0}' historical xml data {1}
+PageLogin.selfRegistration=Sign up
+PageSelfRegistration.registration.failed.unsatisfied.registration.configuration=Registration process not allowed. Please contact system administrator.
+ObjectHistoryTabPanel.viewHistoricalObjectDataTitle=View object data
+ObjectHistoryTabPanel.viewHistoricalObjectXmlTitle=View object xml
+PageRegistrationConfirmation.bad.credentials=Invalid username or password
+PageSelfRegistration.invalid.registration.link=Registration link is not valid
+PageSelfRegistration.welcome.message=Self Registration
+PageSelfRegistration.additional.message=Welcome to MidPoint self registration
+PageSelfRegistration.password.policy=Password that matches password policy.
+PageResetPassword.reset.successful=New password was set successfully. Continue with login.
+PageForgotPassword.form.submited.message=Confirmation link was sent to the email provided. To reset your password, click on the confirmation link and follow instructions.
+pageForgetPassword.message.policy.not.found=Reset password not allowed
+PageAbstractSelfCredentials.save.password.failed=Failed to change password: {0}
+PageResetPassword.title=Reset password
+PageResetPasswordConfirmation.title=Reset password confirmation
+PageResetPasswordConfirmation.confirmation.error=Reset password is not allowed. We are sorry, but probably you'll need to contact system administrator.
+PageResetPasswordConfirmation.authnetication.failed=Incorrect username and/or password
+ItemPathSegmentPanel.itemToSearch=Search for {0}
+DecisionDto.automaticallyApproved=(automatically approved)
+DecisionDto.automaticallyRejected=(automatically rejected)
+DecisionDto.approvedDueToTimeout=(approved due to the timeout)
+DecisionDto.rejectedDueToTimeout=(rejected due to the timeout)
+DecisionDto.AUTO_APPROVAL_CONDITION=(auto-approval condition)
+DecisionDto.AUTO_COMPLETION_CONDITION=(auto-completion condition)
+DecisionDto.NO_ASSIGNEES_FOUND=(no approvers found)
+wf.comment=Comment
+wf.object=Objet
+wf.target=Cible
+wf.originalAssignee=Original assignee
+wf.currentAssignee=Current assignee(s)
+wf.stageNumber=Stage number
+wf.stageCount=Stage count
+wf.stageName=Stage name
+wf.stageDisplayName=Stage display name
+wf.escalationLevelNumber=Escalation level number
+wf.escalationLevelName=Escalation level name
+wf.escalationLevelDisplayName=Escalation level display name
+wf.workItemId=Work item ID
+wf.processInstanceId=Process instance ID
+wf.requesterComment=Requester comment
+wf.causeType=Cause type
+wf.causeName=Cause name
+wf.causeDisplayName=Cause display name
+PageAccountActivation.account.activation.successful=Activation of accounts was successful
+PageAccountActivation.account.activation.failed=Failed to activate accounts. Please, contact system administrator
+PageAccountActivation.activated.shadows=Activated shadows:
+PageAccountActivation.button.activate=Activate
+PageAccountActivation.activate.accounts.label=Account activation for user '{0}'.
+PageAccountActivation.provide.password=Please, provide your password to activate accounts.
+PageAccountActivation.title=Account activation
+PageAccountActivation.nothing.to.activate=Unexpected problem occurs while trying to activate account. Please contact system administrator
+PageAccountActivation.authentication.failed=Authentication failed
+operation.com.evolveum.midpoint.web.page.admin.reports.PageCreatedReports.deleteReportOutput=Delete report (GUI)
+operation.com.evolveum.midpoint.report.impl.ReportManagerImpl.deleteReportOutput=Delete report (Report)
+operation.com.evolveum.midpoint.web.page.admin.reports.PageCreatedReports.downloadReport=Download report (GUI)
+operation..com.evolveum.midpoint.report.impl.ReportManagerImpl.getReportOutputData=Load report (Report)
+PageWorkItem.couldNotGetWorkItem=Couldn't get work item. It might have been already completed or deleted.
+PageWorkItem.noRequest=Couldn't display the work item, as it is not associated with any approval request. Please execute 'Clean-up Activiti processes' if the problem persists.
+PageCaseWorkItem.couldNotGetCase=Couldn't get case. It might have been already completed or deleted.
+PageCaseWorkItem.couldNotGetCaseWorkItem=Couldn't get case work item. It might have been already completed or deleted.
+CsvDownloadButtonPanel.export=CSV export
+CsvDownloadButtonPanel.confirmationMessage=CSV export size is limited to {0} entries. Continue?
+AssignmentEditorDto.policyRuleTitle=Policy rule
+AssignmentDataTablePanel.targetColumnName=Cible
+AssignmentDataTablePanel.validityColumnName=Validity
+AssignmentDataTablePanel.organizationColumnName=Organisation
+AssignmentDataTablePanel.tenantColumnName=Locataire
+AssignmentDataTablePanel.lifecycleColumnName=LifecycleAssignmentsUtil.createAssignmentIconTitleModel(AssignmentDataTablePanel.this, rowModel.getObject().getType())
+AssignmentDataTablePanel.activationColumnName=Activation
+AssignmentDataTablePanel.descriptionColumnName=Description
+PolicyRulesPanel.imageTitle=Policy rule
+PolicyRulesPanel.nameColumn=Nom
+PolicyRulesPanel.constraintsColumn=Constraints
+PolicyRulesPanel.situationColumn=Situation
+PolicyRulesPanel.actionColumn=Action
+PolicyRulesPanel.orderColumn=Ordre
+PolicyRule.constraintsLabel=Constraints
+PolicyRule.situationLabel=Situation
+PolicyRule.actionLabel=Action
+AbstractAssignmentDetailsPanel.doneButton=Done
+ApprovalProcessesPreviewPanel.processRelatedTo=Approval process related to {0}
+ApprovalProcessesPreviewPanel.process=Approval process
+ApprovalProcessExecutionInformationPanel.approver=Approver
+ApprovalProcessExecutionInformationPanel.performer=Performer
+ApprovalProcessExecutionInformationPanel.attorney=Attorney
+ApprovalProcessExecutionInformationPanel.stage=Stage
+PageImportResource.title=Import resource definition
+ObjectReferenceType.relation=Relation
+FocusType.telephoneNumber=Telephone number
+FocusType.consents=Consents
+AbstractAssignmentDetailsPanel.properties=Propriétés
+AssignmentPanel.doneButton=Done
+AssignmentPanel.cancelButton=Annuler
+AssignmentPanel.noName=n/a
+ObjectPolicyConfigurationEditor.conflictResolution=(conflict resolution)
+PageSelfConsents.title=Consents
+SelfConsentPanel.button.revoke=Révoquer
+SelfConsentPanel.button.agree=Agree
+PageAdmin.menu.consent=Consents
+MultiValueExpandablePanel.deleteConfirmationMessage=Do you really want to delete {0} item?
+PolicyRulePropertiesPanel.exclusionConstraints=Add exclusion
+PolicyRulePropertiesPanel.minAssigneesConstraints=minAssignees
+PolicyRulePropertiesPanel.maxAssigneesConstraints=maxAssignees
+PolicyRulePropertiesPanel.modification=modification
+PolicyRulePropertiesPanel.assignmentConstraints=assignment
+PolicyRulePropertiesPanel.timeValidityConstraints=timeValidity
+PolicyRulePropertiesPanel.situationConstraints=situation
+AbstractPolicyConstraintType.name=Nom
+AbstractPolicyConstraintType.description=Description
+AbstractPolicyConstraintType.enforcement=Enforcement
+ExclusionPolicyConstraintType.targetRef=Target reference
+ExclusionPolicyConstraintType.policy=Policy
+ExclusionPolicyConstraintPanel.exclusionTitle=Exclusion
+ValuePolicyBasicPanel.valuePolicy.name=Nom
+ValuePolicyBasicPanel.valuePolicy.description=Description
+comboInput.nullValid=Choose one
+ContainerPanel.containerProperties=Propriétés
+PageOperationResult.title=Résultat de l'opération
+PageOperationResult.noResultAvailable=No operation result available. It was probably "deleted" via script hook.
+PageInternals.tab.clock=Clock
+PageInternals.tab.debugUtil=Debug util
+PageInternals.tab.internalConfig=Internal configuration
+PageInternals.tab.traces=Traces
+PageInternals.tab.counters=Counters
+PageAttorneySelection.title=User selection
+PageWorkItemsAttorney.title=Attorney work items
+PolicyConstraintsType.objectState=Object state
+PolicyConstraintsType.assignmentState=État d'affectation
+PolicyConstraintsType.hasAssignment=A une affectation
+PolicyConstraintsType.hasNoAssignment=N'a pas d'affectation
+PolicyConstraintsType.exclusion=Exclusion
+PolicyConstraintsType.minAssignees=Min assignees
+PolicyConstraintsType.maxAssignees=Max assignees
+PolicyConstraintsType.objectMinAssigneesViolation=Object min assignees violation
+PolicyConstraintsType.objectMaxAssigneesViolation=Object max assignees violation
+PolicyConstraintsType.modification=Modification
+PolicyConstraintsType.assignment=Affectation
+PolicyConstraintsType.objectTimeValidity=Object time validity
+PolicyConstraintsType.assignmentTimeValidity=Validité du temps d'affectation
+PolicyConstraintsType.situation=Situation
+PolicyConstraintsType.transition=Transition
+PolicyConstraintsType.ref=Ref
+AssignmentTypeDetailsPanel.containerTitle=Assignment details
+ResourceObjectAssociationType.details=Association
+ResourceAttributeDefinitionType.details=Attributs
+ExpressionValuePanel.shadowRefValueTitle=Shadow reference
+ExpressionValuePanel.literalValueTitle=Literal value
+ExpressionValuePanel.associationTargetSearchTitle=Association Target Search Filter
+ExpressionValuePanel.path=Path
+ExpressionValuePanel.value=Valeur
+ExpressionValuePanel.specifyExpression=Specify expression
+ExpressionValuePanel.addValueButtonDefaultTitle=Add shadow reference value
+ExpressionValuePanel.addValueButtonTargetSearchTitle=Add association target search
+ExpressionValuePanel.addLiteralValueButton=Add literal value
+ConstructionType.attribute=Attribute
+ConstructionType.association=Association
+operation.Recompute.ALL.members=Recompute all members
+operation.Recompute.SELECTED.members=Recompute selected members
+operation.Recompute.ALL_DIRECT.members=Recompute all direct members
+operation.Remove.ALL.members=Remove all members
+operation.Remove.SELECTED.members=Remove selected members
+operation.Remove.ALL_DIRECT.members=Remove all direct members
+operation.Remove.ALL.managers=Remove all managers
+operation.Remove.SELECTED.managers=Remove selected managers
+operation.Remove.ALL_DIRECT.managers=Remove all direct managers
+operation.Add.members=Add members
+operation.Remove.members=Remove members
+ConstructionStrengthType.STRONG=Fort
+ConstructionStrengthType.WEAK=Faible
+RoleRelationSelectionPanel.approver=Approver
+RoleRelationSelectionPanel.manager=Manager
+RoleRelationSelectionPanel.owner=Propriétaire
+TreeTablePanel.menu.unassignApproversSelected=Unassign selected approvers
+TreeTablePanel.menu.unassignOwnersSelected=Unassign selected owners
+TreeTablePanel.menu.unassignManagersSelected=Unassign selected managers
+Button.cancel=Annuler
+AssociationDetailsPanel.expressionPanel=Outbound expression
+AssociationDetailsPanel.AssociationHeader=Association
+RoleRelationSelectionPanel.select.relation=Select relations to process
+operation.com.evolveum.midpoint.web.page.admin.workflow.PageWorkItem.delegateWorkItem=Delegate work item
+AbstractRoleAssignmentPanel.relationLabel=Relation
+AbstractRoleMainPanel.inducedEntitlements=Induced entitlements
+CertCampaignStateFilter.ALL=All campaign states
+CertCampaignStateFilter.NOT_CLOSED=Non fermé
+CertCampaignStateFilter.CREATED=Créé
+CertCampaignStateFilter.IN_REVIEW_STAGE=En phase de révision
+CertCampaignStateFilter.REVIEW_STAGE_DONE=Phase de révision terminée
+CertCampaignStateFilter.IN_REMEDIATION=En réhabilitation
+CertCampaignStateFilter.CLOSED=Fermé
+DisplayNamePanel.kindIntentLabel=Sorte: {0}, Objectif: {1}
+pageAdminFocus.dataProtection=Data protection
+PageInternals.title.cache=Caches
+PageInternals.tab.cache=Gestion du cache
+InternalsCachePanel.button.clearCaches=Effacer le cache
+PageAccountActivation.user.not.found=Unexpected problem occurs. Please contact system administrator.
diff --git a/gui/admin-gui/src/main/resources/localization/locale.properties b/gui/admin-gui/src/main/resources/localization/locale.properties
index 0eac430109f..f2e50204a27 100644
--- a/gui/admin-gui/src/main/resources/localization/locale.properties
+++ b/gui/admin-gui/src/main/resources/localization/locale.properties
@@ -37,6 +37,9 @@ es.flag=es
fi.name=Suomi
fi.flag=fi
+fr.name=Fran\u00E7ais
+fr.flag=fr
+
hu.name=Magyar
hu.flag=hu
diff --git a/infra/schema/src/main/resources/localization/schema_fr.properties b/infra/schema/src/main/resources/localization/schema_fr.properties
new file mode 100644
index 00000000000..dece0640750
--- /dev/null
+++ b/infra/schema/src/main/resources/localization/schema_fr.properties
@@ -0,0 +1,692 @@
+# Copyright (c) 2010-2017 Evolveum
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+# This file contains localization keys that describe elements of the data
+# model: object types, properties, container types, etc.
+# It may also contain keys for concepts that are common to the whole midPoint
+#
+AbstractRoleType.identifier=Identifiant
+AbstractRoleType.policyConstraints=Contraintes de stratégie
+AccessCertificationCampaignStateType.CLOSED=Fermé
+AccessCertificationCampaignStateType.CREATED=Créé
+AccessCertificationCampaignStateType.IN_REMEDIATION=En réhabilitation
+AccessCertificationCampaignStateType.IN_REVIEW_STAGE_FULL=En phase de révision {0} ({1})
+AccessCertificationCampaignStateType.IN_REVIEW_STAGE=En phase de révision
+AccessCertificationCampaignStateType.REVIEW_STAGE_DONE_FULL=Phase de révision terminée {0} ({1})
+AccessCertificationCampaignStateType.REVIEW_STAGE_DONE=Phase de révision terminée
+AccessCertificationResponseType.ACCEPT=Accepter
+AccessCertificationResponseType.REVOKE=Révoquer
+AccessCertificationResponseType.REDUCE=Réduire
+AccessCertificationResponseType.NOT_DECIDED=Non décidé
+AccessCertificationResponseType.DELEGATE=Déléguer
+AccessCertificationResponseType.NO_RESPONSE=Pas de réponse
+ActivationStatusType.ARCHIVED=Archivé
+ActivationStatusType.DISABLED=Désactivé
+ActivationStatusType.ENABLED=Activé
+ActivationStatusType.null=Non défini
+ActivationType.administrativeStatus=Statut administratif
+ActivationType.effectiveStatus=Statut effectif
+ActivationType.enabled=Activé
+ActivationType.properties=Propriétés
+ActivationType.title=Activation
+ActivationType.validFrom=Valide à partir du
+ActivationType.validTo=Valide jusqu'au
+ActivityType.FOCUS_OPERATION=Operation on focus object (repository)
+ActivityType.NOTIFICATIONS=Envoi des notifications
+ActivityType.PROJECTOR=Computing projections of the focus object
+ActivityType.RESOURCE_OBJECT_OPERATION=Operation on resource object
+ActivityType.WORKFLOWS=Considering or starting approval workflows
+AssignmentPolicyEnforcementType.FULL=Complet
+AssignmentPolicyEnforcementType.LEGALIZE=Légaliser
+AssignmentPolicyEnforcementType.MARK=Marque
+AssignmentPolicyEnforcementType.NONE=Aucun
+AssignmentPolicyEnforcementType.POSITIVE=Positive
+AssignmentPolicyEnforcementType.RELATIVE=Relatif
+AssignmentType.description=Description
+AssignmentType.description.help=Free-form description of the assignment (comment).
+AssignmentType.activation=Activation
+AssignmentType.lifecycleState=Lifecycle state
+AssignmentType.lifecycleState.help=Lifecycle state of the assignment. This property defines whether the assignment represents a draft, proposed definition, whether it is active, deprecated, and so on.
+AssignmnetType.accepted=Accepted
+AssignmentType.policyRule=Policy rule
+AssignmentType.policyRule.help=Policy rule that should be applied to the target object.
+AssignmentType.policySituation=Policy situation
+AssignmentType.policySituation.help=The policy situation(s) of this assignment. The situations are result of evaluation of the policy rules.
+AssignmentType.order=Ordre
+AssignmentType.order.help=Order of the inducement. Simply speaking order specifies the number of assignments that the evaluation must traverse to apply the inducement.
+AssignmentType.target=Cible
+AssignmentType.target.help=Target of assignment or inducement. This is the role, org or service that is assigned.
+AssignmentType.focusType=Focus type
+AssignmentType.focusType.help=Type of focal object that this assignment/inducement applies to. E.g UserType, RoleType, OrgType, ...
+AssignmentType.tenant=Locataire
+AssignmentType.tenantReference=Tenant reference
+AssignmentType.tenantReference.help=Reference to the tenant to which this assignment is associated with. This is an argument to the target of this assignment. E.g. is if frequently used to parametrize the role which is assigned by this assignment.
+AssignmentType.orgReference=Organization reference
+AssignmentType.orgReferenceShorten=Org. reference
+AssignmentType.orgReference.help=Reference to the organization (org. unit, project, ...) which this assignment is associated with. This is an argument to the target of this assignment. E.g. is if frequently used to parametrize the role which is assigned by this assignment.
+AttributeFetchStrategyType.EXPLICIT=Explicite
+AttributeFetchStrategyType.IMPLICIT=Implicite
+AttributeFetchStrategyType.MINIMAL=Minimal
+AuditEventStageType.EXECUTION=Exécution
+AuditEventStageType.REQUEST=Requête
+AuditEventType.ADD_OBJECT=Ajouter objet
+AuditEventType.CREATE_SESSION=Créer une session
+AuditEventType.DELETE_OBJECT=Effacer objet
+AuditEventType.EXECUTE_CHANGES_RAW=Execute changes raw
+AuditEventType.GET_OBJECT=Obtenir un objet
+AuditEventType.MODIFY_OBJECT=Modifier objet
+AuditEventType.null=Tout
+AuditEventType.RECONCILIATION=Réconciliation
+AuditEventType.SYNCHRONIZATION=Synchronisation
+AuditEventType.TERMINATE_SESSION=Terminer la session
+AuditEventTypeType.ADD_OBJECT=Ajouter objet
+AuditEventTypeType.CREATE_SESSION=Créer une session
+AuditEventTypeType.DELETE_OBJECT=Effacer objet
+AuditEventTypeType.EXECUTE_CHANGES_RAW=Execute changes raw
+AuditEventTypeType.GET_OBJECT=Obtenir un objet
+AuditEventTypeType.MODIFY_OBJECT=Modifier objet
+AuditEventTypeType.null=Tout
+AuditEventTypeType.RECONCILIATION=Réconciliation
+AuditEventTypeType.SYNCHRONIZATION=Synchronisation
+AuditEventTypeType.TERMINATE_SESSION=Terminer la session
+AuditEventTypeType.WORKFLOW_PROCESS_INSTANCE=Workflow process instance
+AuditEventTypeType.WORK_ITEM=Objet de travail
+AuditEventType.WORKFLOW_PROCESS_INSTANCE=Workflow process instance
+AuditEventType.WORK_ITEM=Objet de travail
+OperationResultStatusType.FATAL_ERROR=Fatal Error
+OperationResultStatusType.HANDLED_ERROR=Handled Error
+OperationResultStatusType.IN_PROGRESS=In Progress
+OperationResultStatusType.NOT_APPLICABLE=Not Applicable
+OperationResultStatusType.PARTIAL_ERROR=Partial Error
+OperationResultStatusType.SUCCESS=Réussi
+OperationResultStatusType.UNKNOWN=Inconnu
+OperationResultStatusType.WARNING=Alerte
+BeforeAfterType.AFTER=Après
+BeforeAfterType.BEFORE=Avant
+Boolean.FALSE=Faux
+Boolean.NULL=Non défini
+Boolean.TRUE=Vrai
+CapabilitiesType.activation=Activation
+CapabilitiesType.activationStatus=Statut d'activation
+CapabilitiesType.activationLockoutStatus=Verrouillage de l'activation
+CapabilitiesType.activationValidity=Activation Validity
+CapabilitiesType.credentials=Certificat
+CapabilitiesType.password=Mot de passe
+CapabilitiesType.liveSync=Sync en direct
+CapabilitiesType.testConnection=Tester la connexion
+CapabilitiesType.schema=Schéma
+CapabilitiesType.create=Créer
+CapabilitiesType.update=Mettre à jour
+CapabilitiesType.addRemoveAttributeValues=Ajouter/Retirer des valeurs
+CapabilitiesType.countObjects=Compter les objets
+CapabilitiesType.delete=Effacer
+CapabilitiesType.read=Lire
+CapabilitiesType.auxiliaryObjectClasses=Auxiliary Object Classes
+CapabilitiesType.pagedSearch=Paged Search
+CapabilitiesType.script=Script
+ChangeType.ADD=Ajouter
+ChangeType.DELETE=Effacer
+ChangeType.MODIFY=Modifier
+ConnectorOperationalStatus.connectorClassName=Connector class name
+ConnectorOperationalStatus.poolConfigMinSize=Minimum pool size
+ConnectorOperationalStatus.poolConfigMaxSize=Maximum pool size
+ConnectorOperationalStatus.poolConfigMinIdle=Minimum idle connectors
+ConnectorOperationalStatus.poolConfigMaxIdle=Maximum idle connectors
+ConnectorOperationalStatus.poolConfigWaitTimeout=Wait timeout
+ConnectorOperationalStatus.poolConfigMinEvictableIdleTime=Minimum evictable idle time
+ConnectorOperationalStatus.poolStatusNumIdle=Number of idle connectors
+ConnectorOperationalStatus.poolStatusNumActive=Number of active connectors
+AbstractConstructionType.description=Description
+AbstractConstructionType.strength=Force
+AbstractConstructionType.strength.help=Strength of the construction defines how aggressively will the construction be applied.
+ConstructionType.kind=Sorte
+ConstructionType.kind.help=Kind of resource object that should be created on the resource.
+ConstructionType.intent=Objectif
+ConstructionType.intent.help=Intent of resource object that should be created on the resource.
+ConstructionType.auxiliaryObjectClass=Classe d'objet auxiliaire
+ConstructionType.auxiliaryObjectClass.help=The reference to additional type definitions for this object. These auxiliary object classes will be added to the resource object when the construction is provisioned.
+FocusType.activation=Activation
+FocusType.assignment=Affectations
+FocusType.inducement=Inducements
+FocusType.delegations=Delegations
+FocusType.delegatedToMe=Delegated to me
+FocusType.displayName=Nom affiché
+LockoutStatusType.LOCKED=Verrouillé
+LockoutStatusType.NORMAL=Normal
+LockoutStatusType.UNDEFINED=Non défini
+LoggingComponentType.ALL=Tout
+LoggingComponentType.GUI=Enregistreur graphique
+LoggingComponentType.WEB=Enregistreur Web
+LoggingComponentType.MODEL=Model logger
+LoggingComponentType.NOTIFICATIONS = Notification logger
+LoggingComponentType.PROVISIONING=Provisioning logger
+LoggingComponentType.REPOSITORY=Repository logger
+LoggingComponentType.RESOURCEOBJECTCHANGELISTENER=Resource object change listener logger
+LoggingComponentType.TASKMANAGER=Task manager logger
+LoggingComponentType.WORKFLOWS = Workflow logger
+LoggingComponentType.ACCESS_CERTIFICATION = Access certification logger
+LoggingComponentType.SECURITY = Security logger
+LoggingLevelType.ALL=Tout
+LoggingLevelType.DEBUG=Déboguer
+LoggingLevelType.ERROR=Erreur
+LoggingLevelType.INFO=Info
+LoggingLevelType.OFF=Off
+LoggingLevelType.TRACE=Trace
+LoggingLevelType.WARN=Warn
+MailTransportSecurityType.NONE=Aucun
+MailTransportSecurityType.SSL=SSL
+MailTransportSecurityType.STARTTLS_ENABLED=StartTLS enabled
+MailTransportSecurityType.STARTTLS_REQUIRED=StartTLS required
+MappingStrengthType.NORMAL=Normal
+MappingStrengthType.STRONG=Fort
+MappingStrengthType.WEAK=Faible
+MisfireActionType.EXECUTE_IMMEDIATELY=Exécuter immédiatement
+MisfireActionType.RESCHEDULE=Reprogrammer
+NodeExecutionStatusType.COMMUNICATION_ERROR=Injoignable
+NodeExecutionStatusType.DOWN=Turned off
+NodeExecutionStatusType.ERROR=Erreur
+NodeExecutionStatusType.PAUSED=Stoppé
+NodeExecutionStatusType.RUNNING=En éxecution
+ObjectType.description=Description
+ObjectType.AbstractRoleType=Abstract role
+ObjectType.AccessCertificationCampaignType=Access certification campaign
+ObjectType.AccessCertificationDefinitionType=Access certification definition
+ObjectType.AccountType=Compte
+ObjectType.ConnectorType=Connecteur
+ObjectType.ConnectorHostType=Connector host
+ObjectType.FocusType=Focus
+ObjectType.GenericObjectType=Objet générique
+ObjectType.LookupTableType=Lookup table
+ObjectType.NodeType=Node
+ObjectType.ObjectType=Objet
+ObjectType.ObjectTemplateType=Object template
+ObjectType.OrgManagerType=Org. manager
+ObjectType.OrgType=Organisation
+ObjectType.ReportOutputType=Report output
+ObjectType.ReportType=Signaler
+ObjectType.ResourceType=Ressource
+ObjectType.RoleType=Rôle
+ObjectType.SecurityPolicyType=Security policy
+ObjectType.SequenceType=Sequence
+ObjectType.ShadowType=Shadow
+ObjectType.SystemConfigurationType=Configuration du système
+ObjectType.TaskType=Tâche
+ObjectType.UserType=Utilisateur
+ObjectType.ServiceType=Service
+ObjectType.ValuePolicyType=Value policy
+ObjectTypeLowercase.AbstractRoleType=abstract role
+ObjectTypeLowercase.AccessCertificationCampaignType=access certification campaign
+ObjectTypeLowercase.AccessCertificationDefinitionType=access certification definition
+ObjectTypeLowercase.AccountType=account
+ObjectTypeLowercase.ConnectorType=connector
+ObjectTypeLowercase.ConnectorHostType=connector host
+ObjectTypeLowercase.FocusType=focus
+ObjectTypeLowercase.GenericObjectType=generic object
+ObjectTypeLowercase.LookupTableType=lookup table
+ObjectTypeLowercase.NodeType=node
+ObjectTypeLowercase.ObjectType=object
+ObjectTypeLowercase.ObjectTemplateType=object template
+ObjectTypeLowercase.OrgManagerType=org. manager
+ObjectTypeLowercase.OrgType=organization
+ObjectTypeLowercase.ReportOutputType=report output
+ObjectTypeLowercase.ReportType=report
+ObjectTypeLowercase.ResourceType=resource
+ObjectTypeLowercase.RoleType=role
+ObjectTypeLowercase.SecurityPolicyType=security policy
+ObjectTypeLowercase.SequenceType=sequence
+ObjectTypeLowercase.ShadowType=shadow
+ObjectTypeLowercase.SystemConfigurationType=system configuration
+ObjectTypeLowercase.TaskType=task
+ObjectTypeLowercase.UserType=user
+ObjectTypeLowercase.ServiceType=service
+ObjectTypeLowercase.ValuePolicyType=value policy
+ObjectType.name=Nom
+ObjectType.parentOrgRef=Parent org. units
+OrgType.costCenter=Cost center
+OrgType.displayName=Affichage du nom
+OrgType.identifier=Identifiant
+OrgType.mailDomain=Domaine de messagerie
+OrgType.orgType=Org. type
+OrgType.requestable=Requestable
+OrgType.tenant=Locataire
+OriginType.ACTIVATIONS=Activations
+OriginType.ASSIGNMENTS=Affectations
+OriginType.CREDENTIALS=Certificat
+OriginType.INBOUND=Inbound
+OriginType.null=-
+OriginType.OUTBOUND=Outbound
+OriginType.RECONCILIATION=Réconciliation
+OriginType.SYNC_ACTION=Sync action
+OriginType.USER_ACTION=User action
+OriginType.USER_POLICY=User policy
+AccessCertificationCaseOutcomeStrategyType.ONE_ACCEPT_ACCEPTS = Tout "accord" accepte
+AccessCertificationCaseOutcomeStrategyType.ONE_DENY_DENIES = Tout "refus" refuse
+AccessCertificationCaseOutcomeStrategyType.ACCEPTED_IF_NOT_DENIED = Accepté si personne ne rejette
+AccessCertificationCaseOutcomeStrategyType.ALL_MUST_ACCEPT = Accepté uniquement si tous les relecteurs acceptent
+AccessCertificationRemediationStyleType.AUTOMATED=Rapprochement automatique (les éléments non conformes sont automatiquement supprimés)
+AccessCertificationRemediationStyleType.REPORT_ONLY=Rapprochement manuel (les éléments non conformes sont signalés)
+PolicyConstraintEnforcementType.ENFORCE=Enforce
+PolicyConstraintEnforcementType.REMEDIATE=Remediate
+PolicyConstraintEnforcementType.REPORT=Signaler
+ReportType.export=Exporter
+ReportType.orientation=Orientation
+ReportType.parent=Parent
+ReportType.useHibernateSession=Use hibernate session
+ReportType.virtualizer=Jasper virtualizer
+ReportType.virtualizerKickOn=Virtualizer's pages kick-on
+ReportType.maxPages=Nombre maximum de pages
+ReportType.timeout=Execution timeout [ms]
+ResourceObjectAssociationDirectionType.OBJECT_TO_SUBJECT=Object to subject
+ResourceObjectAssociationDirectionType.SUBJECT_TO_OBJECT=Subject to object
+ResourceObjectTypeDependencyStrictnessType.LAX=Lax
+ResourceObjectTypeDependencyStrictnessType.RELAXED=Relaxed
+ResourceObjectTypeDependencyStrictnessType.STRICT=Strict
+ShadowType.dead=Dead
+ShadowType.kind=Sorte
+ShadowType.failedOperationType=Failed operation type
+ShadowType.exists=Exists
+ShadowType.intent=Objectif
+ShadowType.objectClass=Classe d'objet
+ShadowType.synchronizationSituation=Situation
+ShadowKindType.ACCOUNT=Compte
+ShadowKindType.ENTITLEMENT=Entitlement
+ShadowKindType.GENERIC=Générique
+SynchronizationSituationType.DELETED=Effacé
+SynchronizationSituationType.DISPUTED=Disputed
+SynchronizationSituationType.LINKED=Lié
+SynchronizationSituationType.null=Choisir un
+SynchronizationSituationType.UNLINKED=Unlinked
+SynchronizationSituationType.UNMATCHED=Unmatched
+ThreadStopActionType.CLOSE=Fermer
+ThreadStopActionType.RESCHEDULE=Reprogrammer
+ThreadStopActionType.RESTART=Redémarrer
+ThreadStopActionType.SUSPEND=Suspendre
+FocusType.emailAddress=E-mail
+UserType.familyName=Nom de famille
+UserType.fullName=Nom complet
+UserType.givenName=Prénom
+FailedOperationTypeType.ADD=Ajouter
+FailedOperationTypeType.GET=Obtenir
+FailedOperationTypeType.MODIFY=Modifier
+FailedOperationTypeType.DELETE=Effacer
+AbstractRoleType.description=Description
+AbstractRoleType.displayName=Nom affiché
+TaskType.kind=Sorte
+TaskType.intent=Objectif
+TaskType.objectClass=Classe d'objet
+TaskType.executionStatus=Statut
+ObjectTypes.CONNECTOR=Connecteur
+ObjectTypes.CONNECTOR_HOST=Connector host
+ObjectTypes.GENERIC_OBJECT=Objet générique
+ObjectTypes.RESOURCE=Ressource
+ObjectTypes.USER=Utilisateur
+ObjectTypes.OBJECT_TEMPLATE=Object template
+ObjectTypes.SYSTEM_CONFIGURATION=Configuration du système
+ObjectTypes.TASK=Tâche
+ObjectTypes.SHADOW=Shadow
+ObjectTypes.ROLE=Role
+ObjectTypes.PASSWORD_POLICY=Password policy
+ObjectTypes.NODE=Node
+ObjectTypes.ORG=Org
+ObjectTypes.ABSTRACT_ROLE=Abstract role
+ObjectTypes.FOCUS_TYPE=Focus type
+ObjectTypes.REPORT=Signaler
+ObjectTypes.REPORT_OUTPUT=Report output
+ObjectTypes.SECURITY_POLICY=Security policy
+ObjectTypes.LOOKUP_TABLE=Lookup table
+ObjectTypes.ACCESS_CERTIFICATION_DEFINITION=Certification definition
+ObjectTypes.ACCESS_CERTIFICATION_CAMPAIGN=Certification campaign
+ObjectTypes.SEQUENCE=Sequence
+ObjectTypes.SERVICE=Service
+ObjectTypes.OBJECT=Objet
+ObjectTypes.FORM=Form
+ObjectTypes.CASE=Case
+ObjectTypes.FUNCTION_LIBRARY=Function library
+OrgType.parentOrganization=Parent Organization
+ObjectType.extension=Extension
+FocusType.assignmentKey=Affectation
+FocusType.jpegPhoto=Jpeg photo
+UserType.additionalName=Additional Name
+UserType.nickname=Nickname
+UserType.honorificPrefix=Honorific Prefix
+UserType.honorificSuffix=Honorific Suffix
+UserType.title=Title
+FocusType.preferredLanguage=Langue préférée
+FocusType.locale=Local
+FocusType.timezone=Fuseau horaire
+UserType.telephoneNumber=Telephone Number
+UserType.employeeNumber=Employee Number
+UserType.employeeType=Employee Type
+FocusType.costCenter=Centre de coûts
+UserType.organization=Organisation
+UserType.organizationalUnit=Organizational Unit
+FocusType.locality=Localité
+UserType.credentials=Certificat
+CredentialsType.password=Mot de passe
+CredentialsType.securityQuestions=Security Questions
+AssignmentType.assignment=Affectation
+AssignmentType.target=Cible
+AssignmentType.construction=Construction
+AssignmentType.tenantReference=Tenant reference
+AssignmentType.orgReference=Organization reference
+ActivationType.activation=Activation
+ActivationType.validityStatus=Validity Status
+ActivationType.lockOutStatus=Lock-out Status
+ActivationType.lockOutExpiration=Lock-out Expiration
+ConnectorType.displayName=Nom affiché
+ShadowType.activation=Activation
+AbstractRoleType.inducement=Inducement
+AbstractRoleType.requestable=Requestable
+AbstractRoleType.riskLevel=Risk Level
+AbstractRoleType.owner=Propriétaire
+AbstractRoleType.approver=Approver
+AbstractRoleType.idempotent=Idempotent
+RoleType.roleType=Role Type
+OrgType.type=Type
+OrgType.isTenant=Is Tenant
+OrgType.displayOrder=Display Order
+OrgType.securityPolicy=Security Policy
+OrgType.passwordPolicy=Password Policy
+ServiceType.type=Type
+ServiceType.displayOrder=Display Order
+ServiceType.URL=URL
+ResourceAttribute.connIdName=ConnId Name
+ResourceAttribute.connIdUID=ConnId UID
+ResourceValidator.noSchema=Resource schema is not available: {0}
+ResourceValidator.multipleSynchronizationDefinitions=There are multiple synchronization definitions for kind/intent: {0}.
+ResourceValidator.multipleSchemaHandlingDefinitions=There are multiple schema handling definitions for kind/intent: {0}.
+ResourceValidator.multipleSchemaHandlingDefaultDefinitions=There are multiple schema handling definitions for kind "{0}" marked as default.
+ResourceValidator.noDefaultAccountSchemaHandlingDefinition=There is no "account" schema handling definition marked as default. Unqualified assignments of this resource will not work.
+ResourceValidator.missingObjectClass=Missing object class for schema handling definition: "{0}".
+ResourceValidator.unknownObjectClass=Unknown object class "{1}" for schema handling definition: "{0}".
+ResourceValidator.noSynchronizationDefinition=No synchronization definition for "{0}".
+ResourceValidator.noSchemaHandlingDefinition=No schema handling definition for "{0}".
+ResourceValidator.noAttributeName=Unnamed attribute in schema handling for "{0}".
+ResourceValidator.unknownAttributeName=There is no attribute named "{1}" in object class "{2}" (defined in schema handling for "{0}").
+ResourceValidator.noAssociationName=Unnamed association in schema handling for "{0}".
+ResourceValidator.collidingAssociationName=Association "{1}" collides with existing attribute in schema handling for "{0}".
+ResourceValidator.wrongItemName=Illegal reference to attribute or association "{1}" in schema handling for "{0}".
+ResourceValidator.noItemNamespace=No namespace in reference to attribute or association "{1}" in schema handling for "{0}".
+ResourceValidator.missingAssociationTargetKind=Missing "target kind" property for association "{1}" in schema handling for "{0}".
+ResourceValidator.missingAssociationTargetIntent=Missing "target intent" property for association "{1}" in schema handling for "{0}".
+ResourceValidator.missingAssociationDirection=Missing "direction" property for association "{1}" in schema handling for "{0}".
+ResourceValidator.missingAssociationAssociationAttribute=Missing "association attribute" property for association "{1}" in schema handling for "{0}".
+ResourceValidator.missingAssociationValueAttribute=Missing "value attribute" property for association "{1}" in schema handling for "{0}".
+ResourceValidator.wrongMatchingRule=Wrong matching rule for attribute "{1}" in schema handling for "{0}": {2}
+ResourceValidator.multipleItems=There are multiple definitions for attribute or association "{1}" in "{0}".
+ResourceValidator.dependentObjectTypeDoesNotExist=Dependent kind/intent "{1}" does not exist in a dependency of "{0}".
+ResourceValidator.targetObjectTypeDoesNotExist=Target kind/intent "{1}" for association "{2}" does not exist in schema handling for "{0}".
+ResourceValidator.suspiciousMappingSource=Suspicious source for {1} for "{2}" in schema handling for "{0}": {3}
+ResourceValidator.invalidMappingSource=Invalid source for {1} for "{2}" in schema handling for "{0}": {3}
+ResourceValidator.missingMappingSource=Missing source for {1} for "{2}" in schema handling for "{0}"
+ResourceValidator.suspiciousMappingTarget=Suspicious target for {1} for "{2}" in schema handling for "{0}": {3}
+ResourceValidator.invalidMappingTarget=Invalid target for {1} for "{2}" in schema handling for "{0}": {3}
+ResourceValidator.missingMappingTarget=Missing target for {1} for "{2}" in schema handling for "{0}"
+ResourceValidator.superfluousMappingTarget=Superfluous target for {1} for "{2}" in schema handling for "{0}": {3}
+ResourceValidator.unknownObjectClassInSynchronization=Unknown object class "{1}" for synchronization definition: "{0}".
+ResourceValidator.noReaction=No reaction defined in "{0}" for situation(s): {1}
+ResourceValidator.duplicateReactions=Duplicate reactions defined in "{0}" for situation(s): {1}
+ResourceValidator.noSituation=Missing synchronization situation name in a reaction defined in "{0}"
+ResourceValidator.noCorrelationRule=No correlation rule for synchronization of "{0}"
+ResourceValidator.outboundMapping=outbound mapping
+ResourceValidator.inboundMapping=inbound mapping number {0}
+AdminGuiConfigurationType.adminGuiConfiguration=Configuration de l'interface graphique d'administration
+midPointVersion=${pom.version}
+midPointRevision=${git.describe}
+IdempotenceType.CONSERVATIVE=Conservative
+IdempotenceType.AGGRESSIVE=Aggressive
+IdempotenceType.NONE=Aucun
+AdditionalInformationGenerator.exclusionsTitle=Exclusions to be approved
+AdditionalInformationGenerator.assignmentOf=Affectation de {0}
+AdditionalInformationGenerator.isInConflictWithAssignmentOf=est en conflit avec l'affectation de {0}
+AdditionalInformationGenerator.notes=Notes
+ExclusionPolicyType.ENFORCE=Enforce
+ExclusionPolicyType.APPROVE=Approve
+ExclusionPolicyType.REPORT=Signaler
+TechnicalObjectSpecification={0} "{1}" (OID {2})
+ObjectSpecification={0} "{1}"
+ObjectSpecificationWithPath={0} "{1}" ({2})
+DefaultPolicyConstraint.assignmentModification.toBeAdded=L'affectation de {0} (relation {1}) a été ajoutée
+DefaultPolicyConstraint.assignmentModification.wasAdded=L'affectation de {0} (relation {1}) a été ajoutée
+DefaultPolicyConstraint.assignmentModification.toBeDeleted=Assignment of {0} (relation {1}) is to be deleted
+DefaultPolicyConstraint.assignmentModification.wasDeleted=L'affectation de {0} (relation {1}) a été supprimée
+DefaultPolicyConstraint.assignmentModification.toBeModified=L'affectation de {0} (relation {1}) doit être modifiée
+DefaultPolicyConstraint.assignmentModification.wasModified=L'affectation de {0} (relation {1}) a été modifiée
+DefaultPolicyConstraint.objectModification.toBeAdded={0} is to be added
+DefaultPolicyConstraint.objectModification.wasAdded={0} was added
+DefaultPolicyConstraint.objectModification.toBeDeleted={0} is to be deleted
+DefaultPolicyConstraint.objectModification.wasDeleted={0} was deleted
+DefaultPolicyConstraint.objectModification.toBeModified={0} is to be modified
+DefaultPolicyConstraint.objectModification.wasModified={0} was modified
+PolicyConstraints.before=before operation
+PolicyConstraints.after=after operation
+DefaultPolicyConstraint.objectState.unnamed=Object state {0} matches constraint
+DefaultPolicyConstraint.objectState.named=Object state {0} matches constraint "{1}"
+DefaultPolicyConstraint.objectState.namedWithPath=L'état de l'objet {0} correspond à la contrainte "{1}" dans le chemin d'affectation {2}
+# {0} = before/after, {1} target/path, {2} rule name
+DefaultPolicyConstraint.assignmentState.unnamed=Assignment state {0} matches constraint ({1})
+DefaultPolicyConstraint.assignmentState.named=L'état d'affectation {0} correspond à la contrainte "{1}" ({2})
+DefaultPolicyConstraint.exclusion=Violation of SoD policy: {0} excludes {1}, they cannot be assigned at the same time
+DefaultPolicyConstraint.hasAssignment=L'affectation existe pour {0} ({1})
+# {0} = type name, {1} = OID, {2} = before/after. TODO do something with the OID
+DefaultPolicyConstraint.hasNoAssignment=Aucune affectation n'existe pour {0} {1} ({2})
+DefaultPolicyConstraint.multiplicityConstraint.min.object={0} requires at least {1} assignees with the relation of "{2}"
+DefaultPolicyConstraint.multiplicityConstraint.max.object={0} requires at most {1} assignees with the relation of "{2}"
+DefaultPolicyConstraint.multiplicityConstraint.min.target={0} requires at least {1} assignees with the relation of "{2}". The operation would result in {3} assignees.
+DefaultPolicyConstraint.multiplicityConstraint.max.target={0} requires at most {1} assignees with the relation of "{2}". The operation would result in {3} assignees.
+DefaultPolicyConstraint.and=All included constraints triggered
+DefaultPolicyConstraint.or=At least one of included constraints triggered
+DefaultPolicyConstraint.not=Included constraints have not triggered
+DefaultPolicyConstraint.transition=Transition policy constraint matched
+DefaultPolicyConstraint.situation=Situation policy constraint matched
+PolicyViolationException.message.aggregate={0} policy violations occurred
+PolicyViolationException.message.projectionPassword=Provided password does not satisfy password policies in {0}: {1}
+PolicyViolationException.message.credentials.nonce=Provided nonce does not satisfy the policies: {0}
+PolicyViolationException.message.credentials.password=Provided password does not satisfy the policies: {0}
+PolicyViolationException.message.credentials.securityQuestions=Provided security questions do not satisfy the policies: {0}
+Credentials.nonce=nonce
+Credentials.password=password
+Credentials.securityQuestions=security questions
+ValuePolicy.minAgeNotReached=Minimal age was not yet reached.
+ValuePolicy.valueRecentlyUsed=The value was recently used.
+ValuePolicy.valueMustBePresent=The value must be present.
+ValuePolicy.valuesMustBePresent=Au moins {0} valeurs doi(ven)t être présente(s). Nombre actuel de valeur: {1}.
+ValuePolicy.minimalSizeNotMet=Minimal size ({0}) is not met (actual length: {1}).
+ValuePolicy.maximalSizeExceeded=Maximal size ({0}) was exceeded (actual length: {1}).
+ValuePolicy.minimalUniqueCharactersNotMet=Minimal count of unique characters ({0}) is not met (unique characters: {1}).
+ValuePolicy.prohibitedValue=The value is prohibited. Choose a different one.
+ValuePolicy.checkExpressionFailed=Check expression failed.
+ValuePolicy.minimalOccurrenceNotMet=Minimal occurrence ({0}) of characters ({1}) is not met (occurrence of characters: {2}).
+ValuePolicy.maximalOccurrenceExceeded=Maximal occurrence ({0}) of characters ({1}) was exceeded (occurrence of characters: {2}).
+ValuePolicy.firstCharacterNotAllowed=First character is not from allowed set. Allowed set: {0}.
+ValuePolicy.charactersNotAllowed=Characters [ {0} ] are not allowed in the value.
+AbstractRoleType.dataProtection=Data protection
+DataProtectionType.controllerName=Controller name
+DataProtectionType.controllerContact=Controller contact
+DataProtectionType.dpoContact=DPO contact
+DataProtectionType.processingPurposesDescription=Processing purposes
+DataProtectionType.legitimateInterestDescription=Legitimate interest
+DataProtectionType.dataRecipientDescription=Data recipient
+DataProtectionType.periodOfStorageDescription=Period of storage
+DataProtectionType.automatedDecisionMakingDescription=Automated decision making
+DataProtectionType.securityMeasuresDescription=Security measures
+DataProtectionType.dataErasureDescription=Data erasure description
+PolicyRuleEvaluationTargetType.OBJECT=Objet
+PolicyRuleEvaluationTargetType.ASSIGNMENT=Affectation
+PolicyRuleType.name=Nom
+PolicyRuleType.name.help=Short name of the policy rule. It is used to identify the rule in user interface, logfiles, etc.
+PolicyRuleType.description=Description
+PolicyRuleType.description.help=Free-form description of the policy rule (comment).
+PolicyRuleType.policyConstraints=Contraintes de stratégie
+PolicyRuleType.policyConstraints.help=Policy constraints. When the constraints are violated then the policy rule is triggered and the action takes place.
+PolicyRuleType.policySituation=Policy situation
+PolicyRuleType.policySituation.help=Policy situation that is the result when this policy rule is triggered. If the situation is not explicitly stated then default situation will be selected instead. The situation is determined by the constraint that triggered the rule.
+PolicyRuleType.policyActions=Policy actions
+PolicyRuleType.policyActions.help=Action(s) that has to be takes as a reaction to this rule being triggered.
+PolicyRuleType.evaluationTarget=Evaluation target
+PolicyRuleType.evaluationTarget.help=Whether this rule has to be applied on an object or an assignment. Normally this is determined by looking at policy constraints. But this setting can be used to override that.
+AbstractPolicyConstraintType.name=Nom
+AbstractPolicyConstraintType.name.help=Short name of the policy constraint. It is used to identify the constraint in user interface, logfiles, etc.
+AbstractPolicyConstraintType.description=Description
+AbstractPolicyConstraintType.description.help=Free-form description of the policy constraint (comment).
+AbstractPolicyConstraintType.presentation=Presentation
+AbstractPolicyConstraintType.presentation.help=How should be triggering of this constraint presented, e.g. in enforcement messages, in approvals, in certification, in notifications, etc.
+PolicyConstraintsType.objectState=Object state
+PolicyConstraintsType.objectState.help=Constraint on a particular state of the object.
+PolicyConstraintsType.assignmentState=État d'affectation
+PolicyConstraintsType.assignmentState.help=Constraint on a particular state of an assignment.
+PolicyConstraintsType.hasAssignment=A une affectation
+PolicyConstraintsType.hasAssignment.help=Constraint requiring a particular assignment.
+PolicyConstraintsType.hasNoAssignment=N'a pas d'affectation
+PolicyConstraintsType.hasNoAssignment.help=Constraint forbidding a particular assignment.
+PolicyConstraintsType.exclusion=Exclusion
+PolicyConstraintsType.exclusion.help=Exclusion constraint. Constraint that forbids this object to be assigned together with other object.
+PolicyConstraintsType.minAssignees=Minimum assignees
+PolicyConstraintsType.minAssignees.help=Minimum number of assignees constraint. Number of objects (users) that have this role assigned must be higher or equal to prescribed value.
+PolicyConstraintsType.maxAssignees=Maximum assignees
+PolicyConstraintsType.maxAssignees.help=Maximum number of assignees constraint. Number of objects (users) that have this role assigned must be lower or equal to prescribed value.
+PolicyConstraintsType.modification=Modification
+PolicyConstraintsType.modification.help=Constraint that triggers when the object is modified.
+PolicyConstraintsType.assignment=Affectation
+PolicyConstraintsType.assignment=Affectation
+PolicyConstraintsType.objectTimeValidity=Object time validity
+PolicyConstraintsType.objectTimeValidity.help=A constraint that triggers when validity of an object or any of its time-sensitive items (e.g. password) is about to end.
+PolicyConstraintsType.assignmentTimeValidity=Validité du temps d'affectation
+PolicyConstraintsType.assignmentTimeValidity.help=A constraint that triggers when validity of an assignment or any of its time-sensitive items (e.g. password) is about to end.
+PolicyConstraintsType.situation=Policy situation
+PolicyConstraintsType.situation.help=Occurrence of the policy situation within an object or an assignment.
+PolicyConstraintsType.transition=Transition
+PolicyConstraintsType.transition.help=Specifies how the inner constraints are to be evaluated with regards to operation start and end state.
+PolicyConstraintsType.ref=Référence
+PolicyConstraintsType.ref.help=References another policy constraint e.g. by its name.
+ExclusionPolicyConstraintType.targetRef=Cible
+ExclusionPolicyConstraintType.targetRef.help=Target of exclusion. The object defining this "exclusion" and the object defined as target cannot be assigned at the same time.
+PolicyActionsType.enforcement=Enforcement
+PolicyActionsType.enforcement.help=This action stops the operation and results with the error.
+PolicyActionsType.approval=Approbation
+PolicyActionsType.approval.help=The operation will be suspended and the approval workflow will be started. If the workflow ends with success the operation will proceed. If the workflow ends with an error the operation will also end with an error.
+PolicyActionsType.remediation=Remediation
+PolicyActionsType.remediation.help=The operation will proceed. A workflow will be started to remediate the result of the operation after the operation is done.
+PolicyActionsType.prune=Prune
+PolicyActionsType.prune.help=The operation will proceed. Any other assignments that are in conflict with this assignment that triggered the rule will be "pruned": they will be removed. The removal of the conflicting assignments is automatic and silent. It will not be subject to approvals or other policy constraints.
+PolicyActionsType.certification=Certification
+PolicyActionsType.certification.help=The operation will proceed. The object will be scheduled for a certification campaign after the operation is done.
+PolicyActionsType.notification=Notification
+PolicyActionsType.notification.help=The operation will proceed. Notifications are sent at the end of the operation.
+PolicyActionsType.record=Record
+PolicyActionsType.record.help=The operation will proceed. Policy situation will be recorded for given object or assignment.
+PolicyActionType.name=Nom
+PolicyActionType.name.help=Short name of the policy action. It is used to identify the action in user interface, logfiles, etc.
+PolicyActionType.description=Description
+PolicyActionType.description.help=Free-form description of the policy action (comment).
+PolicyActionType.condition=Conditions
+PolicyActionType.condition.help=Condition specifying when should this action be applied.
+ApprovalPolicyActionType.compositionStrategy=Composition strategy
+ApprovalPolicyActionType.compositionStrategy.help=How should be this approval policy action composed with other ones that might be related to the same item (object or assignment).
+ApprovalPolicyActionType.approvalDisplayName=Approval display name
+ApprovalPolicyActionType.approvalDisplayName.help=Display name for this approval definition. If not specified, the name is derived from triggered constraints (short messages).
+ApprovalPolicyActionType.approverRelation=Approver relation
+ApprovalPolicyActionType.approverRelation.help=What relation(s) to use when determining approvers. E.g. "approver", "owner", "securityApprover", and so on.
+ApprovalPolicyActionType.approverRef=Approver
+ApprovalPolicyActionType.approverRef.help=Direct enumeration of the approvers to be used.
+ApprovalPolicyActionType.approverExpression=Approver expression
+ApprovalPolicyActionType.approverExpression.help=Expression(s) that yield approvers to be used. If specified, the expression(s) are evaluated and the result is used as a set of approvers (UserType, OrgType, RoleType, or any combination of them).
+ApprovalPolicyActionType.approvalSchema=Approval schema
+ApprovalPolicyActionType.approvalSchema.help=More complex (multi-stages) approval schema.
+CertificationPolicyActionType.definitionRef=Definition
+CertificationPolicyActionType.definitionRef.help=Certification definition(s) to be started as part of the action execution.
+PolicyConstraintPresentationType.message=Message
+PolicyConstraintPresentationType.message.help=Message to be conveyed to the user.
+PolicyConstraintPresentationType.shortMessage=Message court
+PolicyConstraintPresentationType.shortMessage.help=Very short message describing the situation. Could be used for e.g. notification messages subject, approval process or work item names.
+PolicyConstraintPresentationType.longMessage=Message long
+PolicyConstraintPresentationType.longMessage.help=Long, documentation-like explanation of the rule.
+PolicyConstraintPresentationType.final=Final
+PolicyConstraintPresentationType.final.help=If set to true, no embedded triggers will be presented. Use for hiding constraints that are to be considered too technical to be shown to user.
+PolicyConstraintPresentationType.hidden=Hidden
+PolicyConstraintPresentationType.hidden.help=If set to true, this trigger will be excluded from presentation.
+PolicyConstraintPresentationType.displayOrder=Display order
+PolicyConstraintPresentationType.displayOrder.help=Ordinal number that determines ordering of displayed messages.
+
+DefaultPolicyConstraint.Short.assignmentModification.toBeAdded=Assigning {0} to {1}
+DefaultPolicyConstraint.Short.assignmentModification.wasAdded=Assigned {0} to {1}
+DefaultPolicyConstraint.Short.assignmentModification.toBeDeleted=Unassigning {0} from {1}
+DefaultPolicyConstraint.Short.assignmentModification.wasDeleted=Unassigned {0} from {1}
+DefaultPolicyConstraint.Short.assignmentModification.toBeModified=Modification de l'affectation de {0} sur {1}
+DefaultPolicyConstraint.Short.assignmentModification.wasModified=Affectation modifiée de {0} sur {1}
+DefaultPolicyConstraint.Short.objectModification.toBeAdded=Adding {0}
+DefaultPolicyConstraint.Short.objectModification.wasAdded=Added {0}
+DefaultPolicyConstraint.Short.objectModification.toBeDeleted=Deleting {0}
+DefaultPolicyConstraint.Short.objectModification.wasDeleted=Deleted {0}
+DefaultPolicyConstraint.Short.objectModification.toBeModified=Modifying {0}
+DefaultPolicyConstraint.Short.objectModification.wasModified=Modified {0}
+DefaultPolicyConstraint.Short.objectState.unnamed=Matching state: {0}
+DefaultPolicyConstraint.Short.objectState.named=Matching state: {0} ("{1}")
+# {0} = before/after, {1} target/path, {2} rule name
+DefaultPolicyConstraint.Short.assignmentState.unnamed=Matching state: assignment of {1} ({0})
+DefaultPolicyConstraint.Short.assignmentState.named=Matching state: assignment of {1} ({0}) ("{2}")
+DefaultPolicyConstraint.Short.exclusion={0} excludes {1}
+DefaultPolicyConstraint.Short.hasAssignment=L'affectation existe pour {0} ({1})
+DefaultPolicyConstraint.Short.hasNoAssignment=Aucune affectation n'existe pour {0} {1} ({2})
+DefaultPolicyConstraint.Short.multiplicityConstraint.min.object={0} requires at least {1} assignees ("{2}")
+DefaultPolicyConstraint.Short.multiplicityConstraint.max.object={0} requires at most {1} assignees ("{2}")
+DefaultPolicyConstraint.Short.multiplicityConstraint.min.target={0} requires at least {1} assignees ("{2}")
+DefaultPolicyConstraint.Short.multiplicityConstraint.max.target={0} requires at most {1} assignees ("{2}")
+DefaultPolicyConstraint.Short.and=All constraints triggered
+DefaultPolicyConstraint.Short.or=At least one of constraints triggered
+DefaultPolicyConstraint.Short.not=Constraints have not triggered
+DefaultPolicyConstraint.Short.transition=Transition constraint matched
+DefaultPolicyConstraint.Short.situation=Situation constraint matched
+ApprovingAndExecuting.CreationOf=Approving and executing creation of {0} (started {1})
+ApprovingAndExecuting.DeletionOf=Approving and executing deletion of {0} (started {1})
+ApprovingAndExecuting.ChangeOf=Approving and executing change of {0} (started {1})
+PolicyRuleType.policyConstraints=Contraintes de stratégie
+AssignmentType.policyRule=Policy rule
+ShadowType.attributes=Attributs
+ShadowType.association=Associations
+MetadataType.requestTimestamp=Requested at
+MetadataType.requestorRef=Requester
+MetadataType.requestorComment=Requester comment
+MetadataType.createTimestamp=Created at
+MetadataType.creatorRef=Creator
+MetadataType.createApproverRef=Creation approved by
+MetadataType.createApprovalComment=Creation approval comments
+MetadataType.createApprovalTimestamp=Creation approved at
+MetadataType.createChannel=Creation channel
+MetadataType.modifyTimestamp=Modified at
+MetadataType.modifierRef=Modifier
+MetadataType.modifyApproverRef=Last modification approved by
+MetadataType.modifyApprovalComment=Modification approval comments
+MetadataType.modifyApprovalTimestamp=Modification approved at
+MetadataType.modifyChannel=Modification channel
+MetadataType.lastProvisioningTimestamp=Last provisioning at
+MetadataType.certificationFinishedTimestamp=Last certification finished at
+MetadataType.certificationOutcome=Last certification outcome
+MetadataType.certifierRef=Certifier
+MetadataType.certifierComment=Certifier comment
+MetadataType.originMappingName=Originating mapping name
+MetadataType.createTaskRef=Créer par tâche
+MetadataType.modifyTaskRef=Modifié par tâche
+ResourceObjectAssociationType.ref=ref
+relation.default=default
+relation.manager=manager
+relation.meta=meta
+relation.deputy=deputy
+relation.approver=approver
+relation.owner=owner
+relation.consent=consent
+AbstractCredentialType.forceChange=Changement obligatoire à la prochaine connexion
+PasswordType.value=Valeur
+AdminGuiConfigurationType.enableExperimentalFeature=Activer les fonctionnalités expérimentales de l'interface graphique
From 75b5c269e91e829499f04fcb5ccf7481b158c444 Mon Sep 17 00:00:00 2001
From: Pavol Mederly
Date: Fri, 13 Apr 2018 17:03:11 +0200
Subject: [PATCH 08/16] Fix greaterOrEqual/lessOrEqual dump (MID-4581)
(cherry picked from commit f8f8691)
---
.../prism/query/ComparativeFilter.java | 2 --
.../midpoint/prism/query/GreaterFilter.java | 2 +-
.../midpoint/prism/query/LessFilter.java | 2 +-
.../midpoint/prism/query/ValueFilter.java | 7 +++---
.../midpoint/schema/TestQueryConvertor.java | 10 ++++++++
.../queryconvertor/test305GreaterOrEqual.xml | 25 +++++++++++++++++++
6 files changed, 40 insertions(+), 8 deletions(-)
create mode 100644 infra/schema/src/test/resources/queryconvertor/test305GreaterOrEqual.xml
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java
index 0bf4a87277a..4d49a7e09b7 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java
@@ -27,8 +27,6 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import javax.xml.namespace.QName;
-
public abstract class ComparativeFilter extends PropertyValueFilter {
private boolean equals;
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/GreaterFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/GreaterFilter.java
index ea863fad7aa..119364a8937 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/GreaterFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/GreaterFilter.java
@@ -76,7 +76,7 @@ public GreaterFilter clone() {
@Override
protected String getFilterName() {
- return "GREATER";
+ return isEquals() ? "GREATER-OR-EQUAL" : "GREATER";
}
@Override
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/LessFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/LessFilter.java
index 79f83b3eeed..084ca603749 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/LessFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/LessFilter.java
@@ -75,7 +75,7 @@ public LessFilter clone() {
@Override
protected String getFilterName() {
- return "LESS";
+ return isEquals() ? "LESS-OR-EQUAL" : "LESS";
}
@Override
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ValueFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ValueFilter.java
index 471971b5c70..f5e55cbf8f9 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ValueFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ValueFilter.java
@@ -332,7 +332,8 @@ public String debugDump(int indent) {
StringBuilder sb = new StringBuilder();
DebugUtil.indentDebugDump(sb, indent);
sb.append(getFilterName()).append(":");
- return debugDump(indent, sb);
+ debugDump(indent, sb);
+ return sb.toString();
}
@Override
@@ -344,7 +345,7 @@ public String toString() {
protected abstract String getFilterName();
- protected String debugDump(int indent, StringBuilder sb) {
+ protected void debugDump(int indent, StringBuilder sb) {
sb.append("\n");
DebugUtil.indentDebugDump(sb, indent+1);
sb.append("PATH: ");
@@ -401,8 +402,6 @@ protected String debugDump(int indent, StringBuilder sb) {
sb.append("MATCHING: ");
sb.append(matchingRule);
}
-
- return sb.toString();
}
protected String toString(StringBuilder sb){
diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestQueryConvertor.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestQueryConvertor.java
index 9b0bf91d649..181d7eb2124 100644
--- a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestQueryConvertor.java
+++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestQueryConvertor.java
@@ -548,6 +548,16 @@ public void test305GreaterLesserMatchingNorm() throws Exception {
checkQueryRoundtripFile(UserType.class, q, TEST_NAME);
}
+ @Test
+ public void test305GreaterOrEqual() throws Exception {
+ final String TEST_NAME = "test305GreaterOrEqual";
+ displayTestTitle(TEST_NAME);
+ ObjectQuery q = QueryBuilder.queryFor(UserType.class, getPrismContext())
+ .item(UserType.F_COST_CENTER).ge("100000")
+ .build();
+ checkQueryRoundtripFile(UserType.class, q, TEST_NAME);
+ }
+
@Test
public void test310AllComparisons() throws Exception {
final String TEST_NAME = "test310AllComparisons";
diff --git a/infra/schema/src/test/resources/queryconvertor/test305GreaterOrEqual.xml b/infra/schema/src/test/resources/queryconvertor/test305GreaterOrEqual.xml
new file mode 100644
index 00000000000..1c995027cfa
--- /dev/null
+++ b/infra/schema/src/test/resources/queryconvertor/test305GreaterOrEqual.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ c:costCenter
+ 100000
+
+
+
From 178b2acb8f81630ecb0dfa311f546ab3547f7a1d Mon Sep 17 00:00:00 2001
From: Pavol Mederly
Date: Fri, 13 Apr 2018 17:23:22 +0200
Subject: [PATCH 09/16] Fix compilation error
---
.../com/evolveum/midpoint/prism/query/ComparativeFilter.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java
index 4d49a7e09b7..0bf4a87277a 100644
--- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java
+++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/query/ComparativeFilter.java
@@ -27,6 +27,8 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import javax.xml.namespace.QName;
+
public abstract class ComparativeFilter extends PropertyValueFilter {
private boolean equals;
From 3a363e82a87305012458507ff8571bc17ef3a1aa Mon Sep 17 00:00:00 2001
From: Michael Gruber
Date: Wed, 11 Apr 2018 17:44:03 +0200
Subject: [PATCH 10/16] use givenName fixed documentation
---
.../testing/story/TestReconNullValue.java | 199 +++++++++++++++---
.../recon-null-value/resource-opendj.xml | 9 +-
2 files changed, 180 insertions(+), 28 deletions(-)
diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestReconNullValue.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestReconNullValue.java
index b6abbb964de..f9e41f2e014 100644
--- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestReconNullValue.java
+++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestReconNullValue.java
@@ -26,21 +26,14 @@
import java.util.Collections;
import java.util.List;
-import javax.xml.namespace.QName;
-
import org.opends.server.types.DirectoryException;
-import org.opends.server.types.Entry;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
-import org.testng.AssertJUnit;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
-import com.evolveum.midpoint.util.exception.PolicyViolationException;
-import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismObject;
-import com.evolveum.midpoint.prism.delta.ItemDelta;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.util.PrismAsserts;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
@@ -54,15 +47,10 @@
import com.evolveum.midpoint.util.exception.CommunicationException;
import com.evolveum.midpoint.util.exception.ConfigurationException;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
-import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SecurityViolationException;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.CredentialsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.PasswordType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
@@ -71,13 +59,15 @@
/**
*
- * Recon should delete resourceAttribute
+ * Recon should delete resourceAttributes
*
- * Users and the roles being assigned in tests:
- * User0: IT-Role-HR
-
- *
+ * resourceAttributes title and givenName have strong mappings
+ * title has source honorificPrefix
+ * givenName has source givenName
*
+ * focus attributes honorificPrefix and/or givenName do not exist and resourceAttributes title and givenName are added manually
+ * -> reconcile should remove resourceAtributes
+ * as of git-v3.7.1-57-gc5757c3b0d this seems to work for honorificPrefix/title but not for givenName/givenName
*
* @author michael gruber
*
@@ -91,8 +81,6 @@ public class TestReconNullValue extends AbstractStoryTest {
private static final String RESOURCE_OPENDJ_OID = "10000000-0000-0000-0000-000000000003";
private static final String RESOURCE_OPENDJ_NAMESPACE = MidPointConstants.NS_RI;
- /// private static final QName OPENDJ_ASSOCIATION_GROUP_NAME = new
- /// QName(RESOURCE_OPENDJ_NAMESPACE, "group");
public static final String ORG_TOP_OID = "00000000-8888-6666-0000-100000000001";
public static final String OBJECT_TEMPLATE_USER_OID = "10000000-0000-0000-0000-000000000222";
@@ -102,6 +90,7 @@ public class TestReconNullValue extends AbstractStoryTest {
private static final String LDAP_INTENT_DEFAULT = "default";
private static final String ACCOUNT_ATTRIBUTE_TITLE = "title";
+ private static final String ACCOUNT_ATTRIBUTE_GIVENNAME = "givenName";
private ResourceType resourceOpenDjType;
@@ -187,6 +176,9 @@ public void test100CreateUsers() throws Exception {
display("user0 after", user0After);
dumpOrgTree();
+
+ assertShadowAttribute(user0After, ShadowKindType.ACCOUNT, LDAP_INTENT_DEFAULT, ACCOUNT_ATTRIBUTE_GIVENNAME, "givenName0");
+
}
@@ -197,7 +189,7 @@ public void test100CreateUsers() throws Exception {
*
*/
@Test
- public void test140AddHonorificPrefix() throws Exception {
+ public void test130AddHonorificPrefix() throws Exception {
final String TEST_NAME = "test140AddHonorificPrefix";
displayTestTitle(TEST_NAME);
@@ -207,6 +199,63 @@ public void test140AddHonorificPrefix() throws Exception {
dummyAuditService.clear();
+ //TODO: best way to set extension properties?
+ PrismObject userBefore = getObjectByName(UserType.class, USER_0_NAME);
+ display("User before", userBefore);
+ PrismObject userNewPrism = userBefore.clone();
+ prismContext.adopt(userNewPrism);
+ UserType userNew = userNewPrism.asObjectable();
+ userNew.setHonorificPrefix(new PolyStringType("Princess"));
+
+ ObjectDelta delta = userBefore.diff(userNewPrism);
+ display("Modifying user with delta", delta);
+
+ Collection> deltas = MiscSchemaUtil.createCollection(delta);
+
+ // WHEN
+ displayWhen(TEST_NAME);
+ modelService.executeChanges(deltas, null, task, result);
+
+
+ // THEN
+ displayThen(TEST_NAME);
+ assertSuccess(result);
+
+ PrismObject userAfter = getObjectByName(UserType.class, USER_0_NAME);
+ display("User after adding attribute honorificPrefix", userAfter);
+
+ String accountOid = getLinkRefOid(userAfter, RESOURCE_OPENDJ_OID);
+
+ // Check shadow
+ PrismObject accountShadow = repositoryService.getObject(ShadowType.class, accountOid, null, result);
+ display("accountShadow after attribute deletion", accountShadow);
+
+ // Check account
+ PrismObject accountModel = modelService.getObject(ShadowType.class, accountOid, null, task, result);
+ display("accountModel after attribute deletion", accountModel);
+
+ assertShadowAttribute(userAfter, ShadowKindType.ACCOUNT, LDAP_INTENT_DEFAULT, ACCOUNT_ATTRIBUTE_GIVENNAME, "givenName0");
+ assertShadowAttribute(userAfter, ShadowKindType.ACCOUNT, LDAP_INTENT_DEFAULT, ACCOUNT_ATTRIBUTE_TITLE, "Princess");
+
+ }
+
+ /**
+ * delete honorificPrefix and givenName
+ *
+ * in resource account value for title and givenName should have been deleted
+ *
+ */
+ @Test
+ public void test140dDeleteHonorificPrefixGivenName() throws Exception {
+ final String TEST_NAME = "test140dDeleteHonorificPrefixGivenName";
+ displayTestTitle(TEST_NAME);
+
+ // GIVEN
+ Task task = createTask(TEST_NAME);
+ OperationResult result = task.getResult();
+ dummyAuditService.clear();
+
+
//TODO: best way to set extension properties?
PrismObject userBefore = getObjectByName(UserType.class, USER_0_NAME);
display("User before", userBefore);
@@ -214,6 +263,7 @@ public void test140AddHonorificPrefix() throws Exception {
prismContext.adopt(userNewPrism);
UserType userNew = userNewPrism.asObjectable();
userNew.setHonorificPrefix(null);
+ userNew.setGivenName(null);
ObjectDelta delta = userBefore.diff(userNewPrism);
display("Modifying user with delta", delta);
@@ -244,17 +294,18 @@ public void test140AddHonorificPrefix() throws Exception {
display("accountModel after attribute deletion", accountModel);
PrismAsserts.assertNoItem(accountModel, openDJController.getAttributePath(ACCOUNT_ATTRIBUTE_TITLE));
+ PrismAsserts.assertNoItem(accountModel, openDJController.getAttributePath(ACCOUNT_ATTRIBUTE_GIVENNAME));
}
/**
- * remove title in Resoure Attributer
- *
- * in resource account value for title should have been removed
+ * add title in resource account (not using midpoint)
+ * do recompute
+ * in resource account value for title should have been removed again
*
*/
- @Test //MID-4567
+ @Test
public void test150RemoveTitleRA() throws Exception {
final String TEST_NAME = "test150RemoveTitleRA";
displayTestTitle(TEST_NAME);
@@ -274,12 +325,16 @@ public void test150RemoveTitleRA() throws Exception {
"changetype: modify\n"+
"add: title\n"+
"title: Earl");
-
+
+ display("LDAP after addition");
+ dumpLdap();
+
// WHEN
displayWhen(TEST_NAME);
modelService.recompute(UserType.class, userBefore.getOid(), null, task, result);
-
+ display("LDAP after reconcile");
+ dumpLdap();
// THEN
displayThen(TEST_NAME);
@@ -301,6 +356,65 @@ public void test150RemoveTitleRA() throws Exception {
PrismAsserts.assertNoItem(accountModel, openDJController.getAttributePath( ACCOUNT_ATTRIBUTE_TITLE));
+ }
+
+ /**
+ * add givenName in resource account (not using midpoint)
+ * do recompute
+ * in resource account value for givenName should have been removed again
+ *
+ */
+ @Test //MID-4567
+ public void test160AddGivenNameRA() throws Exception {
+ final String TEST_NAME = "test160AddGivenNameRA";
+ displayTestTitle(TEST_NAME);
+
+ // GIVEN
+ Task task = createTask(TEST_NAME);
+ OperationResult result = task.getResult();
+ dummyAuditService.clear();
+
+
+ //TODO: best way to set extension properties?
+ PrismObject userBefore = getObjectByName(UserType.class, USER_0_NAME);
+ display("User before", userBefore);
+
+
+ openDJController.executeLdifChange("dn: uid="+USER_0_NAME+",ou=people,dc=example,dc=com\n"+
+ "changetype: modify\n"+
+ "add: givenName\n"+
+ "givenName: given0again");
+
+ display("LDAP after addition");
+ dumpLdap();
+
+ // WHEN
+ displayWhen(TEST_NAME);
+ modelService.recompute(UserType.class, userBefore.getOid(), null, task, result);
+
+ display("LDAP after reconcile");
+ dumpLdap();
+
+ // THEN
+ displayThen(TEST_NAME);
+ assertSuccess(result);
+
+ PrismObject userAfter = getObjectByName(UserType.class, USER_0_NAME);
+ display("User smack after adding attribute title", userAfter);
+
+
+ String accountOid = getLinkRefOid(userAfter, RESOURCE_OPENDJ_OID);
+
+ // Check shadow
+ PrismObject accountShadow = repositoryService.getObject(ShadowType.class, accountOid, null, result);
+ display("accountShadow after attribute addition", accountShadow);
+
+ // Check account
+ PrismObject accountModel = modelService.getObject(ShadowType.class, accountOid, null, task, result);
+ display("accountModel after attribute addition", accountModel);
+
+ PrismAsserts.assertNoItem(accountModel, openDJController.getAttributePath( ACCOUNT_ATTRIBUTE_GIVENNAME));
+
}
private void dumpLdap() throws DirectoryException {
@@ -318,5 +432,38 @@ protected objShadow = getShadowModel(objOid);
+ display("Focus " + focusName + " kind " + kind + " intent " + intent + " shadow", objShadow);
+
+ List valuesList = new ArrayList(Arrays.asList(values));
+
+ for (Object att : objShadow.asObjectable().getAttributes().asPrismContainerValue().getItems()) {
+ if (att instanceof ResourceAttribute) {
+ Collection propVals = ((ResourceAttribute) att).getRealValues();
+
+ if (attribute.equals(((ResourceAttribute) att).getNativeAttributeName())) {
+
+ List propValsString = new ArrayList(propVals.size());
+ for (Object pval : propVals) {
+ propValsString.add(pval.toString());
+ }
+
+ Collections.sort(propValsString);
+ Collections.sort(valuesList);
+
+ assertEquals(propValsString, valuesList);
+
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/testing/story/src/test/resources/recon-null-value/resource-opendj.xml b/testing/story/src/test/resources/recon-null-value/resource-opendj.xml
index 89ac7cdc6fa..4531bdbd73e 100644
--- a/testing/story/src/test/resources/recon-null-value/resource-opendj.xml
+++ b/testing/story/src/test/resources/recon-null-value/resource-opendj.xml
@@ -127,6 +127,7 @@
ri:givenName
+ strong
@@ -173,8 +174,12 @@
-
-
+
+
+
+ relative
+
+
From 6b206431cc868cf298ae20cb0307c80b932b8b41 Mon Sep 17 00:00:00 2001
From: Radovan Semancik
Date: Fri, 13 Apr 2018 17:44:25 +0200
Subject: [PATCH 11/16] Correcting and extending the TestReconNullValue test
---
.../testing/story/TestReconNullValue.java | 62 +++++++++++++++++--
.../recon-null-value/resource-opendj.xml | 4 ++
2 files changed, 62 insertions(+), 4 deletions(-)
diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestReconNullValue.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestReconNullValue.java
index f9e41f2e014..4ffd4f8a8c1 100644
--- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestReconNullValue.java
+++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestReconNullValue.java
@@ -362,11 +362,12 @@ public void test150RemoveTitleRA() throws Exception {
* add givenName in resource account (not using midpoint)
* do recompute
* in resource account value for givenName should have been removed again
+ * See also https://wiki.evolveum.com/display/midPoint/Resource+Schema+Handling#ResourceSchemaHandling-AttributeTolerance
*
*/
@Test //MID-4567
- public void test160AddGivenNameRA() throws Exception {
- final String TEST_NAME = "test160AddGivenNameRA";
+ public void test160SetGivenNameAttributeAndReconcile() throws Exception {
+ final String TEST_NAME = "test160SetGivenNameAttributeAndReconcile";
displayTestTitle(TEST_NAME);
// GIVEN
@@ -382,7 +383,7 @@ public void test160AddGivenNameRA() throws Exception {
openDJController.executeLdifChange("dn: uid="+USER_0_NAME+",ou=people,dc=example,dc=com\n"+
"changetype: modify\n"+
- "add: givenName\n"+
+ "replace: givenName\n"+
"givenName: given0again");
display("LDAP after addition");
@@ -413,7 +414,60 @@ public void test160AddGivenNameRA() throws Exception {
PrismObject accountModel = modelService.getObject(ShadowType.class, accountOid, null, task, result);
display("accountModel after attribute addition", accountModel);
- PrismAsserts.assertNoItem(accountModel, openDJController.getAttributePath( ACCOUNT_ATTRIBUTE_GIVENNAME));
+ PrismAsserts.assertNoItem(accountModel, openDJController.getAttributePath(ACCOUNT_ATTRIBUTE_GIVENNAME));
+
+ }
+
+ /**
+ * See also https://wiki.evolveum.com/display/midPoint/Resource+Schema+Handling#ResourceSchemaHandling-AttributeTolerance
+ */
+ @Test //MID-4567
+ public void test170ReplaceGivenNameEmpty() throws Exception {
+ final String TEST_NAME = "test170ReplaceGivenNameEmpty";
+ displayTestTitle(TEST_NAME);
+
+ // GIVEN
+ Task task = createTask(TEST_NAME);
+ OperationResult result = task.getResult();
+ dummyAuditService.clear();
+
+ PrismObject userBefore = getObjectByName(UserType.class, USER_0_NAME);
+ display("User before", userBefore);
+
+ openDJController.executeLdifChange("dn: uid="+USER_0_NAME+",ou=people,dc=example,dc=com\n"+
+ "changetype: modify\n"+
+ "replace: givenName\n"+
+ "givenName: given1again");
+
+ display("LDAP after addition");
+ dumpLdap();
+
+ // WHEN
+ displayWhen(TEST_NAME);
+ modifyUserReplace(userBefore.getOid(), UserType.F_GIVEN_NAME, task, result /* no value */);
+
+ display("LDAP after reconcile");
+ dumpLdap();
+
+ // THEN
+ displayThen(TEST_NAME);
+ assertSuccess(result);
+
+ PrismObject userAfter = getObjectByName(UserType.class, USER_0_NAME);
+ display("User smack after adding attribute title", userAfter);
+
+
+ String accountOid = getLinkRefOid(userAfter, RESOURCE_OPENDJ_OID);
+
+ // Check shadow
+ PrismObject accountShadow = repositoryService.getObject(ShadowType.class, accountOid, null, result);
+ display("accountShadow after attribute addition", accountShadow);
+
+ // Check account
+ PrismObject accountModel = modelService.getObject(ShadowType.class, accountOid, null, task, result);
+ display("accountModel after attribute addition", accountModel);
+
+ PrismAsserts.assertNoItem(accountModel, openDJController.getAttributePath(ACCOUNT_ATTRIBUTE_GIVENNAME));
}
diff --git a/testing/story/src/test/resources/recon-null-value/resource-opendj.xml b/testing/story/src/test/resources/recon-null-value/resource-opendj.xml
index 4531bdbd73e..1e74c72572f 100644
--- a/testing/story/src/test/resources/recon-null-value/resource-opendj.xml
+++ b/testing/story/src/test/resources/recon-null-value/resource-opendj.xml
@@ -126,6 +126,10 @@
ri:givenName
+
+ 1
+
+ falsestrong