diff --git a/build-system/pom.xml b/build-system/pom.xml
index 66d8ea1e598..b8e146e259f 100644
--- a/build-system/pom.xml
+++ b/build-system/pom.xml
@@ -685,7 +685,7 @@
com.evolveum.polygonconnector-ldap
- 2.1
+ 2.3-SNAPSHOT
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/ComponentConstants.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/ComponentConstants.java
index 1c3a14f1b97..62bdf416b8d 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/ComponentConstants.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/ComponentConstants.java
@@ -77,5 +77,14 @@ public class ComponentConstants {
public static final QName UI_FOCUS_TAB_MEMBERS = new QName(NS_COMPONENTS_PREFIX, "focusTabMembers");
public static final String UI_FOCUS_TAB_MEMBERS_URL = QNameUtil.qNameToUri(UI_FOCUS_TAB_MEMBERS);
+
+ public static final QName UI_CASE_TAB_OVERVIEW_MANUAL = new QName(NS_COMPONENTS_PREFIX, "caseTabOverviewManual");
+ public static final String UI_CASE_TAB_OVERVIEW_MANUAL_URL = QNameUtil.qNameToUri(UI_CASE_TAB_OVERVIEW_MANUAL);
+
+ public static final QName UI_CASE_TAB_OVERVIEW_REQUEST = new QName(NS_COMPONENTS_PREFIX, "caseTabOverviewRequest");
+ public static final String UI_CASE_TAB_OVERVIEW_REQUEST_URL = QNameUtil.qNameToUri(UI_CASE_TAB_OVERVIEW_REQUEST);
+
+ public static final QName UI_CASE_TAB_OVERVIEW_APPROVAL = new QName(NS_COMPONENTS_PREFIX, "caseTabOverviewApproval");
+ public static final String UI_CASE_TAB_OVERVIEW_APPROVAL_URL = QNameUtil.qNameToUri(UI_CASE_TAB_OVERVIEW_APPROVAL);
}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.html
index f6183536c7e..0eea901d0e8 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.html
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.html
@@ -81,6 +81,10 @@
+
+
+
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.java
index f8b576d615b..b9a67d0b77d 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogDetails.java
@@ -80,6 +80,7 @@ public class PageAuditLogDetails extends PageBase {
private static final String ID_PARAMETERS_EVENT_IDENTIFIER = "eventIdentifier";
private static final String ID_PARAMETERS_SESSION_IDENTIFIER = "sessionIdentifier";
private static final String ID_PARAMETERS_TASK_IDENTIFIER = "taskIdentifier";
+ private static final String ID_PARAMETERS_REQUEST_IDENTIFIER = "requestIdentifier";
private static final String ID_PARAMETERS_TASK_OID = "taskOID";
private static final String ID_PARAMETERS_HOST_IDENTIFIER = "hostIdentifier";
private static final String ID_PARAMETERS_NODE_IDENTIFIER = "nodeIdentifier";
@@ -293,6 +294,10 @@ private void initEventPanel(WebMarkupContainer eventPanel){
taskOID.setOutputMarkupId(true);
eventDetailsPanel.add(taskOID);
+ final Label requestIdentifier = new Label(ID_PARAMETERS_REQUEST_IDENTIFIER, new PropertyModel(recordModel,ID_PARAMETERS_REQUEST_IDENTIFIER));
+ requestIdentifier.setOutputMarkupId(true);
+ eventDetailsPanel.add(requestIdentifier);
+
final Label hostIdentifier = new Label(ID_PARAMETERS_HOST_IDENTIFIER, new PropertyModel(recordModel,ID_PARAMETERS_HOST_IDENTIFIER));
hostIdentifier.setOutputMarkupId(true);
eventDetailsPanel.add(hostIdentifier);
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.html
index 59a3000646f..fec3d095d1b 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.html
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.html
@@ -68,16 +68,20 @@
+
+
+
+
-
-
+
+
-
-
+
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java
index 8b7e44cd3b2..5247e598a41 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java
@@ -114,11 +114,10 @@ public abstract class AuditLogViewerPanel extends BasePanel {
private static final String ID_VALUE_REF_TARGET_NAMES_FIELD = "valueRefTargetNamesField";
private static final String ID_VALUE_REF_TARGET_NAMES = "valueRefTargetNames";
private static final String ID_USED_QUERY = "usedQueryField";
- private static final String ID_USED_QUERY_LABEL = "usedQueryLabel";
- private static final String ID_USED_QUERY_LABEL_KEY = "PageAuditLogViewer.usedQueryLabel";
+ private static final String ID_USED_QUERY_CONTAINER = "usedQueryContainer";
private static final String ID_USED_INTERVAL = "usedIntervalField";
- private static final String ID_USED_INTERVAL_LABEL = "usedIntervalLabel";
- private static final String ID_USED_INTERVAL_LABEL_KEY = "PageAuditLogViewer.usedIntervalLabel";
+ private static final String ID_USED_INTERVAL_CONTAINER = "usedIntervalContainer";
+ private static final String ID_REQUEST_IDENTIFIER_FIELD = "requestIdentifierField";
private static final String ID_MAIN_FORM = "mainForm";
private static final String ID_SEARCH_BUTTON = "searchButton";
@@ -198,25 +197,32 @@ private void initParametersPanel(Form mainForm) {
hostIdentifier.getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
hostIdentifier.setOutputMarkupId(true);
parametersPanel.add(hostIdentifier);
-
- Label usedQueryLabel = new Label(ID_USED_QUERY_LABEL, getString(ID_USED_QUERY_LABEL_KEY));
- usedQueryLabel.add(getVisibleBehaviourForUsedQueryComponent());
- parametersPanel.add(usedQueryLabel);
+
+ TextPanel requestIdentifier = new TextPanel<>(ID_REQUEST_IDENTIFIER_FIELD, new PropertyModel<>(getModel(),
+ AuditSearchDto.F_REQUEST_IDENTIFIER));
+ requestIdentifier.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior());
+ requestIdentifier.getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
+ requestIdentifier.setOutputMarkupId(true);
+ parametersPanel.add(requestIdentifier);
+
+ WebMarkupContainer usedQueryContainer = new WebMarkupContainer(ID_USED_QUERY_CONTAINER);
+ usedQueryContainer.add(getVisibleBehaviourForUsedQueryComponent());
+ usedQueryContainer.setOutputMarkupId(true);
+ parametersPanel.add(usedQueryContainer);
TextPanel usedQuery = new TextPanel<>(ID_USED_QUERY, new PropertyModel<>(getModel(),
AuditSearchDto.F_COLLECTION + ".auditSearch.recordQuery"));
- usedQuery.getBaseFormComponent().add(getVisibleBehaviourForUsedQueryComponent());
usedQuery.setOutputMarkupId(true);
usedQuery.setEnabled(false);
parametersPanel.add(usedQuery);
- Label usedIntervalLabel = new Label(ID_USED_INTERVAL_LABEL, getString(ID_USED_INTERVAL_LABEL_KEY));
- usedIntervalLabel.add(getVisibleBehaviourForUsedQueryComponent());
- parametersPanel.add(usedIntervalLabel);
+ WebMarkupContainer usedIntervalContainer = new WebMarkupContainer(ID_USED_INTERVAL_CONTAINER);
+ usedIntervalContainer.setOutputMarkupId(true);
+ usedIntervalContainer.add(getVisibleBehaviourForUsedQueryComponent());
+ parametersPanel.add(usedIntervalContainer);
TextPanel usedInterval = new TextPanel<>(ID_USED_INTERVAL, new PropertyModel<>(getModel(),
AuditSearchDto.F_COLLECTION + ".auditSearch.interval"));
- usedInterval.getBaseFormComponent().add(getVisibleBehaviourForUsedQueryComponent());
usedInterval.setOutputMarkupId(true);
usedInterval.setEnabled(false);
parametersPanel.add(usedInterval);
@@ -442,6 +448,7 @@ private Map getAuditEventProviderParameters() {
parameters.put(AuditEventRecordProvider.PARAMETER_CHANNEL, search.getChannel().getChannel());
}
parameters.put(AuditEventRecordProvider.PARAMETER_HOST_IDENTIFIER, search.getHostIdentifier());
+ parameters.put(AuditEventRecordProvider.PARAMETER_REQUEST_IDENTIFIER, search.getRequestIdentifier());
if (search.getInitiatorName() != null) {
parameters.put(AuditEventRecordProvider.PARAMETER_INITIATOR_NAME, search.getInitiatorName().getOid());
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java
index 7c00d182ea8..00b1781b130 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java
@@ -74,6 +74,7 @@ public class AuditEventRecordProvider extends BaseSortableDataProvider parameters, boolean ordered
} else {
parameters.remove(PARAMETER_HOST_IDENTIFIER);
}
+ if (parameters.get(PARAMETER_REQUEST_IDENTIFIER) != null) {
+ conditions.add("aer.requestIdentifier = :requestIdentifier");
+ } else {
+ parameters.remove(PARAMETER_REQUEST_IDENTIFIER);
+ }
if (parameters.get(PARAMETER_TARGET_OWNER_NAME) != null) {
conditions.add("aer.targetOwnerOid = :targetOwnerName");
} else {
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditSearchDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditSearchDto.java
index 775e9695c60..b80f5c0b61f 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditSearchDto.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditSearchDto.java
@@ -46,6 +46,7 @@ public class AuditSearchDto implements Serializable {
public static final String F_INITIATOR_NAME = "initiatorName";
public static final String F_CHANNEL = "channel";
public static final String F_HOST_IDENTIFIER = "hostIdentifier";
+ public static final String F_REQUEST_IDENTIFIER = "requestIdentifier";
public static final String F_TARGET_NAME = "targetName";
public static final String F_TARGET_NAMES_OBJECTS = "targetNamesObjects";
public static final String F_TARGET_OWNER_NAME = "targetOwnerName";
@@ -61,6 +62,7 @@ public class AuditSearchDto implements Serializable {
private ObjectReferenceType initiatorName;
private Channel channel;
private String hostIdentifier;
+ private String requestIdentifier;
private List targetNames = new ArrayList<>();
private List targetNamesObjects = new ArrayList<>();
private ObjectReferenceType targetOwnerName;
@@ -114,6 +116,14 @@ public void setHostIdentifier(String hostIdentifier) {
this.hostIdentifier = hostIdentifier;
}
+ public String getRequestIdentifier() {
+ return requestIdentifier;
+ }
+
+ public void setRequestIdentifier(String requestIdentifier) {
+ this.requestIdentifier = requestIdentifier;
+ }
+
public List getTargetNames() {
return targetNames;
}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java
index f9108ba271e..decc4a6cefd 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java
@@ -739,7 +739,7 @@ supportedTypes, new QNameObjectTypeChoiceRenderer(){
@Override
public Object getDisplayValue(QName qname) {
- if (qname == null || AssignmentHolderType.COMPLEX_TYPE.equals(qname)){
+ if (qname == null || FocusType.COMPLEX_TYPE.equals(qname)){
return StringUtils.leftPad(createStringResource("ObjectTypes.all").getString(), 1);
} else {
return super.getDisplayValue(qname);
@@ -750,7 +750,7 @@ public Object getDisplayValue(QName qname) {
public QName getObject(String id, IModel extends List extends QName>> choices) {
QName qname = super.getObject(id, choices);
if (qname == null){
- return AssignmentHolderType.COMPLEX_TYPE;
+ return FocusType.COMPLEX_TYPE;
}
return qname;
}
diff --git a/gui/admin-gui/src/main/resources/initial-objects/023-archetype-manual-provisioning-case.xml b/gui/admin-gui/src/main/resources/initial-objects/023-archetype-manual-provisioning-case.xml
index affc8a215c9..478a997e521 100644
--- a/gui/admin-gui/src/main/resources/initial-objects/023-archetype-manual-provisioning-case.xml
+++ b/gui/admin-gui/src/main/resources/initial-objects/023-archetype-manual-provisioning-case.xml
@@ -30,6 +30,16 @@
fa fa-hand-paper-o
+
+
+
+
+ http://midpoint.evolveum.com/xml/ns/public/gui/component-3#caseTabOverviewManual
+
+ true
+
+
+
diff --git a/gui/admin-gui/src/main/resources/initial-objects/024-archetype-operation-request.xml b/gui/admin-gui/src/main/resources/initial-objects/024-archetype-operation-request.xml
index 8d7260e4cd3..acbd7a31fce 100644
--- a/gui/admin-gui/src/main/resources/initial-objects/024-archetype-operation-request.xml
+++ b/gui/admin-gui/src/main/resources/initial-objects/024-archetype-operation-request.xml
@@ -30,6 +30,16 @@
fa fa-play-circle
+
+
+
+
+ http://midpoint.evolveum.com/xml/ns/public/gui/component-3#caseTabOverviewRequest
+
+ true
+
+
+
diff --git a/gui/admin-gui/src/main/resources/initial-objects/025-archetype-approval-case.xml b/gui/admin-gui/src/main/resources/initial-objects/025-archetype-approval-case.xml
index 049090e0e52..11b8c549df2 100644
--- a/gui/admin-gui/src/main/resources/initial-objects/025-archetype-approval-case.xml
+++ b/gui/admin-gui/src/main/resources/initial-objects/025-archetype-approval-case.xml
@@ -30,6 +30,16 @@
fe fe-approver
+
+
+
+
+ http://midpoint.evolveum.com/xml/ns/public/gui/component-3#caseTabOverviewApproval
+
+ true
+
+
+
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties
index 140ff773dcf..87d8ba3bc12 100755
--- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties
@@ -3993,6 +3993,7 @@ PageAuditLogViewer.eventStageShortLabel=Stage
PageAuditLogViewer.outcomeLabel=Outcome
PageAuditLogViewer.changedItem=Item changed
PageAuditLogViewer.valueRefTargetNamesLabel=Reference Target
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=From date must be before To date.
AuditLogViewerPanel.resetSearchButton=Reset search
AuditEventRecordType.timestamp=Time
@@ -4015,6 +4016,7 @@ PageAuditLogDetails.eventResult=Result
PageAuditLogDetails.eventOutcome=Outcome
PageAuditLogDetails.sessionIdentifier=Session Identifier
PageAuditLogDetails.taskIdentifier=Task Identifier
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Task oid
PageAuditLogDetails.hostIdentifier=Host Identifier
PageAuditLogDetails.nodeIdentifier=Node
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties
index 4637af7dc8f..722ddeac029 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties
@@ -2737,7 +2737,8 @@ DownloadButtonPanel.download=Stáhnout
ReconciliationPopupPanel.resource=Aplikace
ReconciliationPopupPanel.title.basic=Základní konfigurace reportů rekonciliace
repeater.input.nullValid=Vyberte jeden
-RepoInitialSetup.message.init.fatalError=Selhaly kroky následné inicializaci repozitáře.
+RepoInitialSetup.message.init.fatalError=Došlo k selhání akcí návazných na inicializaci repozitáře.
+RepoCacheInitialSetup.message.init.fatalError=Došlo k selhání akcí návazných na inicializaci mezipaměti repozitáře.
ReportConfigurationPanel.title.basic=Základní
ReportConfigurationPanel.title.advanced=Rozšířený
Requestable.ALL=Vše
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Fáze
PageAuditLogViewer.outcomeLabel=Výsledek
PageAuditLogViewer.changedItem=Změněná položka
PageAuditLogViewer.valueRefTargetNamesLabel=Cíl odkazu
+PageAuditLogViewer.requestIdentifier=Identifikátor žádosti
AuditLogViewerPanel.dateValidatorMessage=Položka Datum od musí být před položkou Datum do.
AuditLogViewerPanel.resetSearchButton=Resetovat vyhledávání
AuditEventRecordType.timestamp=Čas
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Výsledek
PageAuditLogDetails.eventOutcome=Výsledek
PageAuditLogDetails.sessionIdentifier=Identifikátor sezení
PageAuditLogDetails.taskIdentifier=Identifikátor úlohy
+PageAuditLogDetails.requestIdentifier=Identifikátor žádosti
PageAuditLogDetails.taskOID=Oid úlohy
PageAuditLogDetails.hostIdentifier=Identifikátor hostitele
PageAuditLogDetails.nodeIdentifier=Uzel
@@ -4251,8 +4254,8 @@ chooseFocusTypeAndRelationDialogPanel.tooltip.type=Příjemce přiřazení/Typ c
abstractRoleMemberPanel.menu.assign=Přiřadit
abstractRoleMemberPanel.menu.assignMember=Assign {0} member {1}
abstractRoleMemberPanel.menu.createMember=Create {0} member {1}
-abstractRoleMemberPanel.withRelation=with {0} relation
-abstractRoleMemberPanel.withType={0} type
+abstractRoleMemberPanel.withRelation=se vztahem {0}
+abstractRoleMemberPanel.withType=typ: {0}
abstractRoleMemberPanel.menu.unassign=Odebrat přiřazení
abstractRoleMemberPanel.menu.recompute=Přepočítat
abstractRoleMemberPanel.menu.create=Vytvořit
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_de.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_de.properties
index 857e5181e5e..4290a8fa600 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_de.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_de.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Ressource
ReconciliationPopupPanel.title.basic=Basis Abstimmungsbericht Konfiguration
repeater.input.nullValid=Auswählen
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=grundlegend
ReportConfigurationPanel.title.advanced=erweitert
Requestable.ALL=Alle
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Phase
PageAuditLogViewer.outcomeLabel=Ergebnis
PageAuditLogViewer.changedItem=Element verändert
PageAuditLogViewer.valueRefTargetNamesLabel=Referenzziel
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=Das "Von Datum" muss vor dem "Bis Datum" liegen
AuditLogViewerPanel.resetSearchButton=Suche zurücksetzen
AuditEventRecordType.timestamp=Zeit
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Ergebnis
PageAuditLogDetails.eventOutcome=Ergebnis
PageAuditLogDetails.sessionIdentifier=Session Bezeichner
PageAuditLogDetails.taskIdentifier=Aufgaben Bezeichner
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Aufgabe oid
PageAuditLogDetails.hostIdentifier=System Bezeichner
PageAuditLogDetails.nodeIdentifier=Knoten
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties
index dc1f101fed1..462d1a1ea34 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Resource
ReconciliationPopupPanel.title.basic=Basic Reconciliation Report Configuration
repeater.input.nullValid=Choose One
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=Basic
ReportConfigurationPanel.title.advanced=Advanced
Requestable.ALL=All
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Stage
PageAuditLogViewer.outcomeLabel=Outcome
PageAuditLogViewer.changedItem=Item changed
PageAuditLogViewer.valueRefTargetNamesLabel=Reference Target
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=From date must be before To date.
AuditLogViewerPanel.resetSearchButton=Reset search
AuditEventRecordType.timestamp=Time
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Result
PageAuditLogDetails.eventOutcome=Outcome
PageAuditLogDetails.sessionIdentifier=Session Identifier
PageAuditLogDetails.taskIdentifier=Task Identifier
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Task oid
PageAuditLogDetails.hostIdentifier=Host Identifier
PageAuditLogDetails.nodeIdentifier=Node
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_es.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_es.properties
index b032a8dc230..4a6edb9db94 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_es.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_es.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Recurso
ReconciliationPopupPanel.title.basic=Configuración Básica de Informe de Reconciliación
repeater.input.nullValid=Elija uno
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=Básico
ReportConfigurationPanel.title.advanced=Avanzado
Requestable.ALL=Todo
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Etapa
PageAuditLogViewer.outcomeLabel=Resultado
PageAuditLogViewer.changedItem=Elemento modificado
PageAuditLogViewer.valueRefTargetNamesLabel=Objetivo referenciado
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=From date must be before To date.
AuditLogViewerPanel.resetSearchButton=Resetear búsqueda
AuditEventRecordType.timestamp=Tiempo
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Resultado
PageAuditLogDetails.eventOutcome=Resultado
PageAuditLogDetails.sessionIdentifier=Session Identifier
PageAuditLogDetails.taskIdentifier=Task Identifier
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Task oid
PageAuditLogDetails.hostIdentifier=Identificador del host
PageAuditLogDetails.nodeIdentifier=Nodo
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_et.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_et.properties
index 8c55f7050cb..ffe36127354 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_et.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_et.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Ressurss
ReconciliationPopupPanel.title.basic=Lepituse põhiaruande konfiguratsioon
repeater.input.nullValid=Vali üks
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=Põhiteave
ReportConfigurationPanel.title.advanced=Täpsemalt
Requestable.ALL=Kõik
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Etapp
PageAuditLogViewer.outcomeLabel=Tulemus
PageAuditLogViewer.changedItem=Muutunud üksus
PageAuditLogViewer.valueRefTargetNamesLabel=Viite sihtüksus
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=Alates kuupäev peab olema enne Kuni kuupäeva.
AuditLogViewerPanel.resetSearchButton=Reset search
AuditEventRecordType.timestamp=Aeg
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Tulem
PageAuditLogDetails.eventOutcome=Tulemus
PageAuditLogDetails.sessionIdentifier=Seansiidentifikaator
PageAuditLogDetails.taskIdentifier=Ülesandeidentifikaator
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Ülesande oid
PageAuditLogDetails.hostIdentifier=Hostiidentifikaator
PageAuditLogDetails.nodeIdentifier=Sõlm
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_fi.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_fi.properties
index e11797bbb28..fc9909422be 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_fi.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_fi.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Resurssi
ReconciliationPopupPanel.title.basic=Perus Täsmäyttämisraportin asetukset
repeater.input.nullValid=Valitse Yksi
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=Perus
ReportConfigurationPanel.title.advanced=Edistynyt
Requestable.ALL=Kaikki
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Vaihe
PageAuditLogViewer.outcomeLabel=Tulos
PageAuditLogViewer.changedItem=Alkion muutos
PageAuditLogViewer.valueRefTargetNamesLabel=Viittauksen kohde
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=Aloitus päivämäärä pitää olla ennen lopetus päivämäärää.
AuditLogViewerPanel.resetSearchButton=Nollaa haku
AuditEventRecordType.timestamp=Aika
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Tulos
PageAuditLogDetails.eventOutcome=Tulos
PageAuditLogDetails.sessionIdentifier=Session tunnistaja
PageAuditLogDetails.taskIdentifier=Tehtävän tunnistaja
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Tehtävä oid
PageAuditLogDetails.hostIdentifier=Isännän tunnistaja
PageAuditLogDetails.nodeIdentifier=Solmu
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_fr.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_fr.properties
index 468898a74f0..87874ca425f 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_fr.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_fr.properties
@@ -1170,7 +1170,7 @@ PageAdmin.menu.top.cases.list=Mes cas
PageAdmin.menu.top.cases.listAll=Tous les cas
pageAdmin.reports.description=Export de rapports
pageAdmin.reports=Rapports
-PageAdmin.menu.top.users.requestAssign=Demande d'attribution
+PageAdmin.menu.top.users.requestAssign=Demander une attribution
PageAdminObjectDetails.title.editUserType=Modifier l'utilisateur « {0} »
PageAdminObjectDetails.title.viewUserType=Voir utilisateur « {0} »
PageAdminObjectDetails.title.newUserType=Créer un nouvel utilisateur
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Ressource
ReconciliationPopupPanel.title.basic=Configuration de base du rapport d'harmonisation
repeater.input.nullValid=Choisissez...
RepoInitialSetup.message.init.fatalError=La post-initialisation du composant Repository a échoué.
+RepoCacheInitialSetup.message.init.fatalError=La post-initialisation du cache du dépôt a échoué.
ReportConfigurationPanel.title.basic=Base
ReportConfigurationPanel.title.advanced=Avancé
Requestable.ALL=Tout
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Phase
PageAuditLogViewer.outcomeLabel=Issue
PageAuditLogViewer.changedItem=Élément modifié
PageAuditLogViewer.valueRefTargetNamesLabel=Reference Target
+PageAuditLogViewer.requestIdentifier=Identifiant de demande
AuditLogViewerPanel.dateValidatorMessage=La date Début doit être antérieure à la date Fin.
AuditLogViewerPanel.resetSearchButton=Réinitialiser la recherche
AuditEventRecordType.timestamp=Temps
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Résultat
PageAuditLogDetails.eventOutcome=Issue
PageAuditLogDetails.sessionIdentifier=Identifiant de session
PageAuditLogDetails.taskIdentifier=Identifiant de tâche
+PageAuditLogDetails.requestIdentifier=Identifiant de demande
PageAuditLogDetails.taskOID=OID de la tâche
PageAuditLogDetails.hostIdentifier=Identifiant d'hôte
PageAuditLogDetails.nodeIdentifier=Nœud
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_hu.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_hu.properties
index f205399fe68..66fea8e5754 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_hu.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_hu.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Erőforrás
ReconciliationPopupPanel.title.basic=Basic Reconciliation Report Configuration
repeater.input.nullValid=Válasszon egyet
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=Basic
ReportConfigurationPanel.title.advanced=Advanced
Requestable.ALL=Összes
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Stage
PageAuditLogViewer.outcomeLabel=Outcome
PageAuditLogViewer.changedItem=Item changed
PageAuditLogViewer.valueRefTargetNamesLabel=Reference Target
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=From date must be before To date.
AuditLogViewerPanel.resetSearchButton=Reset search
AuditEventRecordType.timestamp=Idő
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Result
PageAuditLogDetails.eventOutcome=Outcome
PageAuditLogDetails.sessionIdentifier=Session Identifier
PageAuditLogDetails.taskIdentifier=Task Identifier
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Task oid
PageAuditLogDetails.hostIdentifier=Host Identifier
PageAuditLogDetails.nodeIdentifier=Node
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_it.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_it.properties
index eece0909bbc..e5105e57004 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_it.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_it.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Risorsa
ReconciliationPopupPanel.title.basic=Configurazione del report di riconciliazione di base
repeater.input.nullValid=Scegline uno
RepoInitialSetup.message.init.fatalError=post-Inizializzazione repository non riuscita.
+RepoCacheInitialSetup.message.init.fatalError=Post-nizializzazione della cache del repository non riuscita.
ReportConfigurationPanel.title.basic=Di base
ReportConfigurationPanel.title.advanced=Avanzate
Requestable.ALL=Tutti
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Fase
PageAuditLogViewer.outcomeLabel=Risultato
PageAuditLogViewer.changedItem=Oggetto modificato
PageAuditLogViewer.valueRefTargetNamesLabel=Target di riferimento
+PageAuditLogViewer.requestIdentifier=Identificativo richiesta
AuditLogViewerPanel.dateValidatorMessage=La data di inizio deve essere precedente alla data di fine.
AuditLogViewerPanel.resetSearchButton=Resetta la ricerca
AuditEventRecordType.timestamp=Orario
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Risultato
PageAuditLogDetails.eventOutcome=Risultato
PageAuditLogDetails.sessionIdentifier=Identificatore della sessione
PageAuditLogDetails.taskIdentifier=Identificatore Task
+PageAuditLogDetails.requestIdentifier=Identificativo richiesta
PageAuditLogDetails.taskOID=Vecchio Task
PageAuditLogDetails.hostIdentifier=Identificatore Host
PageAuditLogDetails.nodeIdentifier=Nodo
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_ja.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_ja.properties
index 2436fcfd911..c26accc3f46 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_ja.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_ja.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=リソース
ReconciliationPopupPanel.title.basic=基本的なリコンシリエーションレポート設定
repeater.input.nullValid=1つを選択
RepoInitialSetup.message.init.fatalError=リポジトリのポスト初期化に失敗しました。
+RepoCacheInitialSetup.message.init.fatalError=リポジトリキャッシュのポスト初期化に失敗しました。
ReportConfigurationPanel.title.basic=基本情報
ReportConfigurationPanel.title.advanced=高度
Requestable.ALL=すべて
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=ステージ
PageAuditLogViewer.outcomeLabel=結果
PageAuditLogViewer.changedItem=変更されたアイテム
PageAuditLogViewer.valueRefTargetNamesLabel=リファレンス・ターゲット
+PageAuditLogViewer.requestIdentifier=リクエスト識別子
AuditLogViewerPanel.dateValidatorMessage=開始日が終了日よりも後になっています。
AuditLogViewerPanel.resetSearchButton=検索のリセット
AuditEventRecordType.timestamp=時刻
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=結果
PageAuditLogDetails.eventOutcome=結果
PageAuditLogDetails.sessionIdentifier=セッション識別子
PageAuditLogDetails.taskIdentifier=タスク識別子
+PageAuditLogDetails.requestIdentifier=リクエスト識別子
PageAuditLogDetails.taskOID=タスクoid
PageAuditLogDetails.hostIdentifier=ホスト識別子
PageAuditLogDetails.nodeIdentifier=ノード
@@ -4359,7 +4362,7 @@ PolyStringEditorPanel.hideLanguages=言語を隠す
PolyStringEditorPanel.addLanguage=言語の追加
ValueChoosePanel.undefined=未定義
TaskKindType.STANDALONE=Standalone
-TaskKindType.COORDINATOR=Coordinator
+TaskKindType.COORDINATOR=コーディネーター
TaskKindType.WORKER=ワーカー
TaskKindType.PARTITIONED_MASTER=Partitioned master
SubtasksPanel.label.kind=タスク種類
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_lt.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_lt.properties
index 360ed9e3e5d..902a7f1442a 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_lt.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_lt.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Resursas
ReconciliationPopupPanel.title.basic=Pagrindinė ataskaitos konfigūracija
repeater.input.nullValid=Pasirinkite
RepoInitialSetup.message.init.fatalError=Duomenų saugyklos post inicializavimas nepavyko.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=Pagrindinė informacija
ReportConfigurationPanel.title.advanced=Papildoma informacija
Requestable.ALL=Visi
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Etapas
PageAuditLogViewer.outcomeLabel=Rezultatas
PageAuditLogViewer.changedItem=Redaguotas elementas
PageAuditLogViewer.valueRefTargetNamesLabel=Adresatas
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=Data "Nuo" turi būti ankstesnė nei data "Iki".
AuditLogViewerPanel.resetSearchButton=Nauja paieška
AuditEventRecordType.timestamp=Data
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Rezultatas
PageAuditLogDetails.eventOutcome=Rezultatas
PageAuditLogDetails.sessionIdentifier=Sesijos identifikatorius
PageAuditLogDetails.taskIdentifier=Užduoties identifikatorius
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Užduoties oid
PageAuditLogDetails.hostIdentifier=Įrenginio identifikatorius
PageAuditLogDetails.nodeIdentifier=Mazgas
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties
index d352af14246..707fb92948a 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=System
ReconciliationPopupPanel.title.basic=Podstawowa konfiguracja raportu z rekoncyliacji
repeater.input.nullValid=Wybierz
RepoInitialSetup.message.init.fatalError=Post-inicjalizacja nie powiodła się.
+RepoCacheInitialSetup.message.init.fatalError=Inicjalizacja pamięci podręcznej repozytorium nie powiodła się.
ReportConfigurationPanel.title.basic=Dane podstawowe
ReportConfigurationPanel.title.advanced=Zaawansowane
Requestable.ALL=Wszystko
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Etap
PageAuditLogViewer.outcomeLabel=Wynik
PageAuditLogViewer.changedItem=Zmieniona pozycja
PageAuditLogViewer.valueRefTargetNamesLabel=Cel referencji
+PageAuditLogViewer.requestIdentifier=Identyfikator żądania
AuditLogViewerPanel.dateValidatorMessage=Data "od" musi być wcześniejsza od daty "do".
AuditLogViewerPanel.resetSearchButton=Reset wyszukiwania
AuditEventRecordType.timestamp=Czas
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Wynik
PageAuditLogDetails.eventOutcome=Wynik
PageAuditLogDetails.sessionIdentifier=Identyfikator sesji
PageAuditLogDetails.taskIdentifier=Identyfikator zadania
+PageAuditLogDetails.requestIdentifier=Identyfikator żądania
PageAuditLogDetails.taskOID=oid zadania
PageAuditLogDetails.hostIdentifier=Identyfikator hosta
PageAuditLogDetails.nodeIdentifier=Węzeł
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_pt_BR.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_pt_BR.properties
index 8bbb352dab8..2dba8e6ae77 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_pt_BR.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_pt_BR.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Recurso
ReconciliationPopupPanel.title.basic=Configuração de relatório de reconciliação básica
repeater.input.nullValid=Escolher um
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=Básico
ReportConfigurationPanel.title.advanced=Avançado
Requestable.ALL=Todos
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Etapa
PageAuditLogViewer.outcomeLabel=Resultado
PageAuditLogViewer.changedItem=Item alterado
PageAuditLogViewer.valueRefTargetNamesLabel=Alvo de referência
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=A "data de" deve ser anterior à "data até".
AuditLogViewerPanel.resetSearchButton=Reset search
AuditEventRecordType.timestamp=Hora
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Resultado
PageAuditLogDetails.eventOutcome=Resultado
PageAuditLogDetails.sessionIdentifier=Identificador da sessão
PageAuditLogDetails.taskIdentifier=Identificador de tarefas
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Oid de tarefa
PageAuditLogDetails.hostIdentifier=Identificador do 'host'
PageAuditLogDetails.nodeIdentifier=Nó
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_ru.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_ru.properties
index bb348ead16a..bbb88cd9135 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_ru.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_ru.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Ресурс
ReconciliationPopupPanel.title.basic=Конфигурация отчёта по основной реконсиляции
repeater.input.nullValid=Выбрать
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=Основной
ReportConfigurationPanel.title.advanced=Дополнительно
Requestable.ALL=Все
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Этап
PageAuditLogViewer.outcomeLabel=Выходные данные
PageAuditLogViewer.changedItem=Элемент изменён
PageAuditLogViewer.valueRefTargetNamesLabel=Предмет ссылки
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=Дата От должна быть меньше Даты По.
AuditLogViewerPanel.resetSearchButton=Reset search
AuditEventRecordType.timestamp=Время
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Результат
PageAuditLogDetails.eventOutcome=Выходные данные
PageAuditLogDetails.sessionIdentifier=Идентификатор сессии
PageAuditLogDetails.taskIdentifier=Идентификатор задачи
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Задача oid
PageAuditLogDetails.hostIdentifier=Идентификатор хоста
PageAuditLogDetails.nodeIdentifier=Узел
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_sk.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_sk.properties
index 4af805a2d6b..2e9b921fd95 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_sk.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_sk.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Systém
ReconciliationPopupPanel.title.basic=Základná konfigurácia pre schvaľujúci report
repeater.input.nullValid=Vyberte hodnotu
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=Základný
ReportConfigurationPanel.title.advanced=Rozšírené
Requestable.ALL=Všetky
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Etapa
PageAuditLogViewer.outcomeLabel=Výsledok
PageAuditLogViewer.changedItem=Item changed
PageAuditLogViewer.valueRefTargetNamesLabel=Reference Target
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=From date must be before To date.
AuditLogViewerPanel.resetSearchButton=Reset search
AuditEventRecordType.timestamp=Čas
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Výsledok
PageAuditLogDetails.eventOutcome=Výsledok
PageAuditLogDetails.sessionIdentifier=Session Identifier
PageAuditLogDetails.taskIdentifier=Task Identifier
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Task oid
PageAuditLogDetails.hostIdentifier=Host Identifier
PageAuditLogDetails.nodeIdentifier=Uzol
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_tr.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_tr.properties
index 68357a4e578..f3360b333dc 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_tr.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_tr.properties
@@ -2640,7 +2640,7 @@ passwordPanel.passwordRemove=Kaldır
passwordPanel.passwordSet=şifre atandı
passwordPanel.passwordRemoveLabel=Şifre değiştirilecek
PasswordPanel.passwordPlaceholder=Şifre
-PasswordPanel.repeatPasswordPlaceholder=Repeat password
+PasswordPanel.repeatPasswordPlaceholder=Şifreyi tekrar girin
past.ChangeType.ADD=Eklendi
past.ChangeType.DELETE=Silinmiş
past.ChangeType.MODIFY=Değiştirildi
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=Kaynak
ReconciliationPopupPanel.title.basic=Temel Uzlaştırma Raporu Yapılandırması
repeater.input.nullValid=Birini Seçiniz
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=Temel bilgiler
ReportConfigurationPanel.title.advanced=Gelişmiş
Requestable.ALL=Hepsi
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=Etap
PageAuditLogViewer.outcomeLabel=Çıktı
PageAuditLogViewer.changedItem=Öğe değişti
PageAuditLogViewer.valueRefTargetNamesLabel=Referans Hedefi
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=Başlangıç tarihi bitiş tarihinden önce olmalıdır.
AuditLogViewerPanel.resetSearchButton=Aramayı sıfırla
AuditEventRecordType.timestamp=Zaman
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=Sonuç
PageAuditLogDetails.eventOutcome=Çıktı
PageAuditLogDetails.sessionIdentifier=Oturum Tanımlayıcısı
PageAuditLogDetails.taskIdentifier=Görev Tanımlayıcı
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=Görev oid
PageAuditLogDetails.hostIdentifier=Sunucu Tanımlayıcı
PageAuditLogDetails.nodeIdentifier=Düğüm
@@ -4232,11 +4235,11 @@ DisplayNamePanel.kindIntentLabel=Kind: {0}, Intent: {1}
DisplayNamePanel.viewObjectDetails=View object details
PageUsersView.title=Users view
pageAdminFocus.dataProtection=Veri koruma
-PageInternals.title.cache=Caches
+PageInternals.title.cache=Önbellekler
PageInternals.title.threads=Threads
-PageInternals.tab.cache=Cache management
+PageInternals.tab.cache=Önbellek Yönetimi
PageInternals.tab.threads=Threads
-InternalsCachePanel.button.clearCaches=Clear caches
+InternalsCachePanel.button.clearCaches=Önbellekleri Temizle
InternalsThreadsPanel.button.showAllThreads=Show all threads
InternalsThreadsPanel.button.showTasksThreads=Show tasks threads
InternalsThreadsPanel.button.recordTasksThreads=Record tasks threads
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_zh_CN.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_zh_CN.properties
index be9cef69c72..39e633e4ed6 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint_zh_CN.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint_zh_CN.properties
@@ -2738,6 +2738,7 @@ ReconciliationPopupPanel.resource=资源
ReconciliationPopupPanel.title.basic=复核报告基本配置
repeater.input.nullValid=请选择
RepoInitialSetup.message.init.fatalError=Repository post initialization failed.
+RepoCacheInitialSetup.message.init.fatalError=Repository cache post initialization failed.
ReportConfigurationPanel.title.basic=基本
ReportConfigurationPanel.title.advanced=高级
Requestable.ALL=所有
@@ -3948,6 +3949,7 @@ PageAuditLogViewer.eventStageShortLabel=阶段
PageAuditLogViewer.outcomeLabel=结果
PageAuditLogViewer.changedItem=修改的项
PageAuditLogViewer.valueRefTargetNamesLabel=引用目标
+PageAuditLogViewer.requestIdentifier=Request identifier
AuditLogViewerPanel.dateValidatorMessage=起始日期必须在截至日期之前。
AuditLogViewerPanel.resetSearchButton=Reset search
AuditEventRecordType.timestamp=时间
@@ -3970,6 +3972,7 @@ PageAuditLogDetails.eventResult=结果
PageAuditLogDetails.eventOutcome=结果
PageAuditLogDetails.sessionIdentifier=会话标识符
PageAuditLogDetails.taskIdentifier=任务标识
+PageAuditLogDetails.requestIdentifier=Request Identifier
PageAuditLogDetails.taskOID=任务OID
PageAuditLogDetails.hostIdentifier=主机标识符
PageAuditLogDetails.nodeIdentifier=节点
diff --git a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrimitiveType.java b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrimitiveType.java
index 7024338e5ed..18e67448cd1 100644
--- a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrimitiveType.java
+++ b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrimitiveType.java
@@ -35,7 +35,7 @@ public enum PrimitiveType {
FLOAT("float"),
DOUBLE("double"),
BOOLEAN("boolean"),
- BASE64BINARY("base64binary"),
+ BASE64BINARY("base64Binary"),
DATETIME("dateTime"),
DURATION("duration"),
BYTE("byte"),
diff --git a/infra/schema/src/main/resources/localization/schema_tr.properties b/infra/schema/src/main/resources/localization/schema_tr.properties
index 7818f227021..0b00dfd6678 100644
--- a/infra/schema/src/main/resources/localization/schema_tr.properties
+++ b/infra/schema/src/main/resources/localization/schema_tr.properties
@@ -550,7 +550,7 @@ ObjectTypeLowercase.ValuePolicyType=değer politikası
ObjectType.name=İsim
ObjectType.parentOrgRef=Ata org. birimleri
ObjectType.subtype=Alt Tipi
-OrgType.costCenter=Maliyet merkezi
+OrgType.costCenter=Ödeme merkezi
OrgType.displayName=Gösterim adı
OrgType.identifier=Tanıtıcı
OrgType.mailDomain=E-Posta Domaini
@@ -775,7 +775,7 @@ UserType.telephoneNumber=Telefon Numarası
UserType.employeeNumber=Sicil Numarası
UserType.employeeType=Çalışan Tipi
UserType.emailAddress=Email Adresi
-FocusType.costCenter=Maliyet Merkezi
+FocusType.costCenter=Ödeme Merkezi
UserType.organization=Organizasyon
UserType.organizationalUnit=Organizasyon Birimi
FocusType.locality=Yer
diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd
index 3ef9371091b..af4bff499f0 100755
--- a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd
+++ b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd
@@ -14709,6 +14709,52 @@
+
+
+
+
+ Definition of GUI-related configuration for the archetyped objects. This is using
+ principle similar to adminGuiConfiguration in system configuraiton.
+
+
+
+ 4.0
+ ArchetypePolicyType.adminGuiConfiguration
+
+
+
+
+
+
+
+
+
+ Definition of GUI-related configuration for the archetyped objects.
+ This is similar to AdminGuiConfigurationType, but it is supposed to be
+ applicable to a specific (archetyped) type. Therefore the elements that
+ select a type are removed or they are simply ignored.
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ Specifies the look and feel of the pages for displaying object details and
+ editing of objects.
+
+
+
+ 4.0
+ AdminGuiConfigurationType.objectDetails
+
+
+
+
@@ -17431,6 +17477,7 @@
Specifies the set of default forms that are used for displaying and
editing of objects, such as User, Role, Org, ...
+
3.4
@@ -23930,6 +23977,23 @@
+
+
+
+
+ Specification of forms (tabs) to be used on object details page.
+
+
+ NOTE: As of midPoint 4.0 this works for archetypes only.
+ It is not supposed to work anywhere else than in archetypePolicy.
+
+
+
+ 4.0
+ GuiObjectDetailsPageType.forms
+
+
+
diff --git a/model/model-intest/src/test/resources/common/task-reconcile-dummy.xml b/model/model-intest/src/test/resources/common/task-reconcile-dummy.xml
index 5ef70a27f53..025e0dc9fe0 100644
--- a/model/model-intest/src/test/resources/common/task-reconcile-dummy.xml
+++ b/model/model-intest/src/test/resources/common/task-reconcile-dummy.xml
@@ -24,7 +24,6 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-
Reconciliation: Dummy
diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ProvisioningServiceImpl.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ProvisioningServiceImpl.java
index a5335506db4..f8fe9b655be 100644
--- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ProvisioningServiceImpl.java
+++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ProvisioningServiceImpl.java
@@ -1223,6 +1223,7 @@ public void applyDefinition(Class type, ObjectQuery qu
try {
if (ObjectQueryUtil.hasAllDefinitions(query)) {
+ result.recordNotApplicableIfUnknown();
return;
}
diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/AbstractOpenDjTest.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/AbstractOpenDjTest.java
index 778644d31f4..bd5eeaa926c 100644
--- a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/AbstractOpenDjTest.java
+++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/AbstractOpenDjTest.java
@@ -154,6 +154,7 @@ public abstract class AbstractOpenDjTest extends AbstractIntegrationTest {
public static final ItemName ATTRIBUTE_DESCRIPTION_QNAME = new ItemName(RESOURCE_OPENDJ_NS, ATTRIBUTE_DESCRIPTION_NAME);
protected static final File QUERY_COMPLEX_FILTER_FILE = new File(TEST_DIR, "query-complex-filter.xml");
+ protected static final File QUERY_COMPLEX_FILTER_STARTS_WITH_FILE = new File(TEST_DIR, "query-complex-filter-starts-with.xml");
protected static final File QUERY_ALL_ACCOUNTS_FILE = new File(TEST_DIR, "query-filter-all-accounts.xml");
protected static final File QUERY_ALL_LDAP_GROUPS_FILE = new File(TEST_DIR, "query-filter-all-ldap-groups.xml");
protected static final File QUERY_VANHELGEN_FILE = new File(TEST_DIR, "query-vanhelgen.xml");
diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/TestOpenDj.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/TestOpenDj.java
index 9bddef0b581..a4aefeffa40 100644
--- a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/TestOpenDj.java
+++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/opendj/TestOpenDj.java
@@ -1349,9 +1349,11 @@ public boolean handle(PrismObject prismObject, OperationResult paren
};
// WHEN
+ displayWhen(TEST_NAME);
SearchResultMetadata searchMetadata = provisioningService.searchObjectsIterative(ShadowType.class, query, null, handler, task, result);
// THEN
+ displayThen(TEST_NAME);
display("Count", objects.size());
assertEquals("Unexpected number of shadows", 9, objects.size());
@@ -1460,7 +1462,7 @@ public boolean handle(PrismObject prismObject, OperationResult paren
// No offset. Which means SPR search. We do not have result number estimate.
assertApproxNumberOfAllResults(searchMetadata, null);
}
-
+
protected void assertShadows(int expectedCount) throws SchemaException {
OperationResult result = new OperationResult(TestOpenDj.class.getName() + ".assertShadows");
int actualCount = repositoryService.countObjects(ShadowType.class, null, null, result);
@@ -1796,8 +1798,7 @@ public void test202SearchObjectsCompexFilter() throws Exception {
Task task = createTask(TEST_NAME);
OperationResult result = task.getResult();
- QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_COMPLEX_FILTER_FILE,
- QueryType.COMPLEX_TYPE);
+ QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_COMPLEX_FILTER_FILE, QueryType.COMPLEX_TYPE);
ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType);
provisioningService.applyDefinition(ShadowType.class, query, task, result);
@@ -1845,8 +1846,7 @@ public void test203SearchObjectsByDnExists() throws Exception {
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
for (PrismObject objType : objListType) {
assertNotNull("Null search result", objType);
@@ -1888,8 +1888,7 @@ public void test205SearchObjectsByDnNotExists() throws Exception {
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
for (PrismObject objType : objListType) {
assertNotNull("Null search result", objType);
@@ -1901,6 +1900,45 @@ public void test205SearchObjectsByDnNotExists() throws Exception {
assertConnectorOperationIncrement(1, 1);
assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0);
}
+
+ /**
+ * MID-5383
+ */
+ @Test
+ public void test206SearchObjectsCompexFilterStartsWith() throws Exception {
+ final String TEST_NAME = "test206SearchObjectsCompexFilterStartsWith";
+ displayTestTitle(TEST_NAME);
+
+ Task task = createTask(TEST_NAME);
+ OperationResult result = task.getResult();
+
+ QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_COMPLEX_FILTER_STARTS_WITH_FILE, QueryType.COMPLEX_TYPE);
+ ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType);
+ provisioningService.applyDefinition(ShadowType.class, query, task, result);
+
+ rememberCounter(InternalCounters.CONNECTOR_OPERATION_COUNT);
+ rememberCounter(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT);
+
+ // WHEN
+ displayWhen(TEST_NAME);
+ List> objListType =
+ provisioningService.searchObjects(ShadowType.class, query, null, task, result);
+
+ // THEN
+ displayThen(TEST_NAME);
+ assertSuccess(result);
+
+ for (PrismObject objType : objListType) {
+ assertNotNull("Null search result", objType);
+ display("found object", objType);
+ }
+
+ assertEquals("Unexpected number of objects found", 1, objListType.size());
+
+ assertConnectorOperationIncrement(1, 3);
+ assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0);
+ }
+
@Test
public void test230SearchObjectsPagedNoOffset() throws Exception {
diff --git a/provisioning/provisioning-impl/src/test/resources/opendj/query-complex-filter-starts-with.xml b/provisioning/provisioning-impl/src/test/resources/opendj/query-complex-filter-starts-with.xml
new file mode 100644
index 00000000000..131d4d6d898
--- /dev/null
+++ b/provisioning/provisioning-impl/src/test/resources/opendj/query-complex-filter-starts-with.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+ i:resourceRef
+
+ ef2bc95b-76e0-59e2-86d6-3d4f02d3ffff
+
+
+
+ i:objectClass
+ ri:inetOrgPerson
+
+
+ attributes/cn
+ true
+ a
+
+
+
+
diff --git a/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/query/ValueOperation.java b/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/query/ValueOperation.java
index 6dd2ba564b8..c25c3aaa5d8 100644
--- a/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/query/ValueOperation.java
+++ b/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/query/ValueOperation.java
@@ -88,7 +88,16 @@ public Filter interpret(ObjectFilter objectFilter, ConnIdNameMapper icfNameM
throw new IllegalArgumentException("Substring filter with multiple values makes no sense");
//maybe it does, through OR clauses
}
- return FilterBuilder.contains(AttributeBuilder.build(icfName, convertedValues.iterator().next()));
+
+ if (substring.isAnchorStart() && !substring.isAnchorEnd()) {
+ return FilterBuilder.startsWith(AttributeBuilder.build(icfName, convertedValues.iterator().next()));
+ } else if (!substring.isAnchorStart() && substring.isAnchorEnd()) {
+ return FilterBuilder.endsWith(AttributeBuilder.build(icfName, convertedValues.iterator().next()));
+ } else if (!substring.isAnchorStart() && !substring.isAnchorEnd()) {
+ return FilterBuilder.contains(AttributeBuilder.build(icfName, convertedValues.iterator().next()));
+ } else {
+ return FilterBuilder.equalTo(AttributeBuilder.build(icfName, convertedValues.iterator().next()));
+ }
}
} else if (objectFilter instanceof ComparativeFilter) {
ComparativeFilter comparativeFilter = (ComparativeFilter) objectFilter;
diff --git a/provisioning/ucf-impl-connid/src/test/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/TestUcfOpenDj.java b/provisioning/ucf-impl-connid/src/test/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/TestUcfOpenDj.java
index 11d10a6b677..dc2b4b47fd2 100644
--- a/provisioning/ucf-impl-connid/src/test/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/TestUcfOpenDj.java
+++ b/provisioning/ucf-impl-connid/src/test/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/TestUcfOpenDj.java
@@ -642,7 +642,7 @@ public void test510Search() throws Exception {
ShadowResultHandler handler = new ShadowResultHandler() {
@Override
public boolean handle(PrismObject object) {
- System.out.println("Search: found: " + object);
+ display("Search: found: " + object);
return true;
}
};
diff --git a/provisioning/ucf-impl-connid/src/test/resources/connector-ldap.xml b/provisioning/ucf-impl-connid/src/test/resources/connector-ldap.xml
index a0462083133..805d397c9c9 100644
--- a/provisioning/ucf-impl-connid/src/test/resources/connector-ldap.xml
+++ b/provisioning/ucf-impl-connid/src/test/resources/connector-ldap.xml
@@ -23,7 +23,7 @@
ICF com.evolveum.polygon.connector.ldap.LdapConnectorhttp://midpoint.evolveum.com/xml/ns/public/connector/icf-1com.evolveum.polygon.connector.ldap.LdapConnector
- 2.1
+ 2.3-SNAPSHOTcom.evolveum.polygon.connector-ldaphttp://midpoint.evolveum.com/xml/ns/public/connector/icf-1/bundle/com.evolveum.polygon.connector-ldap/com.evolveum.polygon.connector.ldap.LdapConnector
diff --git a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskManagerQuartzImpl.java b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskManagerQuartzImpl.java
index 789b968edc6..f48a13869cc 100644
--- a/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskManagerQuartzImpl.java
+++ b/repo/task-quartz-impl/src/main/java/com/evolveum/midpoint/task/quartzimpl/TaskManagerQuartzImpl.java
@@ -1417,7 +1417,7 @@ private List> getSubtasks(Object task, OperationResult result) throws SchemaEx
}
}
- // task is Task or TaskType
+ // task is Task, TaskType or PrismObject
// subtask is Task or PrismObject
private void addSubtask(Object task, Object subtask) {
TaskType subtaskBean;
@@ -1429,11 +1429,13 @@ private void addSubtask(Object task, Object subtask) {
} else {
throw new IllegalArgumentException("subtask: " + task);
}
-
+
if (task instanceof Task) {
((InternalTaskInterface) task).addSubtask(subtaskBean);
} else if (task instanceof TaskType) {
((TaskType) task).getSubtask().add(subtaskBean);
+ } else if (task instanceof PrismObject>) {
+ ((PrismObject) task).asObjectable().getSubtask().add(subtaskBean);
} else {
throw new IllegalArgumentException("task: " + task);
}
diff --git a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/AbstractLdapTest.java b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/AbstractLdapTest.java
index e27d83491ad..892113b6829 100644
--- a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/AbstractLdapTest.java
+++ b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/AbstractLdapTest.java
@@ -155,8 +155,8 @@ public abstract class AbstractLdapTest extends AbstractModelIntegrationTest {
protected static final String USER_BARBOSSA_FULL_NAME = "Hector Barbossa";
protected static final String USER_BARBOSSA_PASSWORD = "deadjack.tellnotales123";
protected static final String USER_BARBOSSA_PASSWORD_2 = "hereThereBeMonsters";
- protected static final String USER_BARBOSSA_PASSWORD_AD_1 = "There.Be.Monsters.111";
- protected static final String USER_BARBOSSA_PASSWORD_AD_2 = "There.Be.Monsters.222";
+ protected static final String USER_BARBOSSA_PASSWORD_AD_1 = "There.Be.Mönsters.111"; // MID-5242
+ protected static final String USER_BARBOSSA_PASSWORD_AD_2 = "Thére.Be.Mönšters.222"; // MID-5242
protected static final String USER_BARBOSSA_PASSWORD_AD_3 = "There.Be.Monsters.333";
// Barbossa after rename
diff --git a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapMultidomainRunAsTest.java b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapMultidomainRunAsTest.java
index aec86bfd1e1..ff52d6a6fec 100644
--- a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapMultidomainRunAsTest.java
+++ b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapMultidomainRunAsTest.java
@@ -60,6 +60,7 @@ public void test222ModifyUserBarbossaPasswordSelfServicePassword1Again() throws
* Change password back to the first password. This password was used before.
* In admin mode (in superclass) this should go well. Admin can set password to anything.
* But in self-service mode this should fail due to password history check.
+ * MID-5242
*/
@Test
@Override
diff --git a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapMultidomainTest.java b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapMultidomainTest.java
index 196fd58ed63..b07169a90f7 100644
--- a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapMultidomainTest.java
+++ b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapMultidomainTest.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2015-2017 Evolveum
+ * Copyright (c) 2015-2019 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -108,13 +108,6 @@ public abstract class AbstractAdLdapMultidomainTest extends AbstractLdapTest {
protected static final File ROLE_META_ORG_GROUP_FILE = new File(TEST_DIR, "role-meta-org-group.xml");
protected static final String ROLE_META_ORG_GROUP_OID = "c5d3294a-0d8e-11e7-bd9d-ff848c2e7e3f";
- public static final String ATTRIBUTE_OBJECT_GUID_NAME = "objectGUID";
- public static final String ATTRIBUTE_SAM_ACCOUNT_NAME_NAME = "sAMAccountName";
- public static final String ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME = "userAccountControl";
- public static final QName ATTRIBUTE_USER_ACCOUNT_CONTROL_QNAME = new QName(MidPointConstants.NS_RI, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME);
- public static final String ATTRIBUTE_UNICODE_PWD_NAME = "unicodePwd";
- public static final String ATTRIBUTE_MS_EXCH_HIDE_FROM_ADDRESS_LISTS_NAME = "msExchHideFromAddressLists";
-
protected static final String ACCOUNT_JACK_SAM_ACCOUNT_NAME = "jack";
protected static final String ACCOUNT_JACK_SID = "S-1-5-21-3305462238-3617280118-659738602-4878";
protected static final String ACCOUNT_JACK_FULL_NAME = "Jack Sparrow";
@@ -128,7 +121,7 @@ public abstract class AbstractAdLdapMultidomainTest extends AbstractLdapTest {
private static final String GROUP_MELEE_ISLAND_PIRATES_NAME = "Mêlée Island Pirates";
private static final String GROUP_MELEE_ISLAND_PIRATES_DESCRIPTION = "swashbuckle and loot";
- protected static final int NUMBER_OF_ACCOUNTS = 17;
+ protected static final int NUMBER_OF_ACCOUNTS = 18;
private static final String ASSOCIATION_GROUP_NAME = "group";
private static final String NS_EXTENSION = "http://whatever.com/my";
@@ -159,6 +152,9 @@ public abstract class AbstractAdLdapMultidomainTest extends AbstractLdapTest {
private static final String USER_EMPTYHEAD_NAME = "emptyhead";
+ private static final String PROXY_ADDRES_ADDR_UPCASE = "smpt:ADDR";
+ private static final String PROXY_ADDRES_ADDR_LOWCASE = "smpt:addr";
+
private boolean allowDuplicateSearchResults = false;
protected String jackAccountOid;
@@ -285,13 +281,17 @@ private UserLdapConnectionConfig getSubLdapConnectionConfig() {
config.setBaseContext(getLdapSubSuffix());
return config;
}
+
+ protected abstract File getReconciliationTaskFile();
+
+ protected abstract String getReconciliationTaskOid();
@Override
public void initSystem(Task initTask, OperationResult initResult) throws Exception {
super.initSystem(initTask, initResult);
- binaryAttributeDetector.addBinaryAttribute(ATTRIBUTE_OBJECT_GUID_NAME);
- binaryAttributeDetector.addBinaryAttribute(ATTRIBUTE_UNICODE_PWD_NAME);
+ binaryAttributeDetector.addBinaryAttribute(AdUtils.ATTRIBUTE_OBJECT_GUID_NAME);
+ binaryAttributeDetector.addBinaryAttribute(AdUtils.ATTRIBUTE_UNICODE_PWD_NAME);
// Users
repoAddObjectFromFile(USER_BARBOSSA_FILE, initResult);
@@ -822,7 +822,7 @@ public void test200AssignAccountBarbossa() throws Exception {
assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, USER_BARBOSSA_PASSWORD);
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
// MID-4624
ResourceAttribute createTimestampAttribute = ShadowUtil.getAttribute(shadow, new QName(MidPointConstants.NS_RI, "createTimeStamp"));
@@ -846,7 +846,7 @@ public void test210ModifyAccountBarbossaTitle() throws Exception {
ObjectDelta delta = prismContext.deltaFactory().object()
.createEmptyModifyDelta(ShadowType.class, accountBarbossaOid);
- QName attrQName = new QName(MidPointConstants.NS_RI, "title");
+ QName attrQName = new QName(MidPointConstants.NS_RI, AdUtils.ATTRIBUTE_TITLE_NAME);
ResourceAttributeDefinition attrDef = accountObjectClassDefinition.findAttributeDefinition(attrQName);
PropertyDelta attrDelta = prismContext.deltaFactory().property().createModificationReplaceProperty(
ItemPath.create(ShadowType.F_ATTRIBUTES, attrQName), attrDef, "Captain");
@@ -854,15 +854,15 @@ public void test210ModifyAccountBarbossaTitle() throws Exception {
// WHEN
displayWhen(TEST_NAME);
- modelService.executeChanges(MiscSchemaUtil.createCollection(delta), null, task, result);
+ executeChanges(delta, null, task, result);
// THEN
displayThen(TEST_NAME);
assertSuccess(result);
Entry entry = assertLdapAccount(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME);
- assertAttribute(entry, "title", "Captain");
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_TITLE_NAME, "Captain");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, USER_BARBOSSA_PASSWORD);
PrismObject user = getUser(USER_BARBOSSA_OID);
@@ -891,7 +891,7 @@ public void test212ModifyAccountBarbossaShowInAdvancedViewOnlyTrue() throws Exce
// WHEN
displayWhen(TEST_NAME);
- modelService.executeChanges(MiscSchemaUtil.createCollection(delta), null, task, result);
+ executeChanges(delta, null, task, result);
// THEN
displayThen(TEST_NAME);
@@ -899,7 +899,7 @@ public void test212ModifyAccountBarbossaShowInAdvancedViewOnlyTrue() throws Exce
Entry entry = assertLdapAccount(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME);
assertAttribute(entry, "showInAdvancedViewOnly", "TRUE");
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, USER_BARBOSSA_PASSWORD);
PrismObject user = getUser(USER_BARBOSSA_OID);
@@ -941,7 +941,7 @@ public void test213ModifyUserBarbossaShowInAdvancedViewOnlyFalse() throws Except
Entry entry = assertLdapAccount(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME);
assertAttribute(entry, "showInAdvancedViewOnly", "FALSE");
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, USER_BARBOSSA_PASSWORD);
PrismObject user = getUser(USER_BARBOSSA_OID);
@@ -950,6 +950,50 @@ public void test213ModifyUserBarbossaShowInAdvancedViewOnlyFalse() throws Except
assertLdapConnectorInstances(2);
}
+
+ /**
+ * Just normal modification of proxyAddress, directly on the account.
+ * As proxyAddress is multivalue, this is ADD and not REPLACE. This is what GUI would do.
+ * No previous value for proxyAddress is set in the AD account.
+ * MID-5330
+ */
+ @Test
+ public void test214ModifyAccountBarbossaProxyAddressesSimple() throws Exception {
+ final String TEST_NAME = "test214ModifyAccountBarbossaProxyAddressesSimple";
+ displayTestTitle(TEST_NAME);
+
+ // GIVEN
+ Task task = createTask(TEST_NAME);
+ OperationResult result = task.getResult();
+
+ ObjectDelta delta = prismContext.deltaFactory().object()
+ .createEmptyModifyDelta(ShadowType.class, accountBarbossaOid);
+ QName attrQName = new QName(MidPointConstants.NS_RI, AdUtils.ATTRIBUTE_PROXY_ADDRESSES_NAME);
+ ResourceAttributeDefinition attrDef = accountObjectClassDefinition.findAttributeDefinition(attrQName);
+ assertNotNull("No definition for attribute "+attrQName, attrDef);
+ PropertyDelta attrDelta = prismContext.deltaFactory().property().createModificationAddProperty(
+ ItemPath.create(ShadowType.F_ATTRIBUTES, attrQName), attrDef, PROXY_ADDRES_ADDR_UPCASE);
+ delta.addModification(attrDelta);
+
+ // WHEN
+ displayWhen(TEST_NAME);
+ executeChanges(delta, null, task, result);
+
+ // THEN
+ displayThen(TEST_NAME);
+ assertSuccess(result);
+
+ Entry entry = assertLdapAccount(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME);
+ assertAttribute(entry, AdUtils.ATTRIBUTE_PROXY_ADDRESSES_NAME, PROXY_ADDRES_ADDR_UPCASE);
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, USER_BARBOSSA_PASSWORD);
+
+ PrismObject user = getUser(USER_BARBOSSA_OID);
+ String shadowOid = getSingleLinkOid(user);
+ assertEquals("Shadows have moved", accountBarbossaOid, shadowOid);
+
+// assertLdapConnectorInstances(2);
+ }
@Test
public void test220ModifyUserBarbossaPasswordSelfServicePassword1() throws Exception {
@@ -970,6 +1014,7 @@ public void test222ModifyUserBarbossaPasswordSelfServicePassword1Again() throws
/**
* Change to different password. This should go well for both admin and self-service.
+ * MID-5242
*/
@Test
public void test224ModifyUserBarbossaPasswordSelfServicePassword2() throws Exception {
@@ -1211,8 +1256,8 @@ protected PrismObject assertBarbossaEnabled() throws Exception {
Entry entry = assertLdapAccount(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME);
assertAttribute(entry, "title", "Captain");
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
- assertAttribute(entry, ATTRIBUTE_MS_EXCH_HIDE_FROM_ADDRESS_LISTS_NAME, "FALSE");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_MS_EXCH_HIDE_FROM_ADDRESS_LISTS_NAME, "FALSE");
String shadowOid = getSingleLinkOid(user);
PrismObject shadow = getObject(ShadowType.class, shadowOid);
@@ -1231,9 +1276,9 @@ private void assertBarbossaDisabled() throws Exception {
Entry entry = assertLdapAccount(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME);
display("disabled Barbossa entry", entry);
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "514");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "514");
- assertAttribute(entry, ATTRIBUTE_MS_EXCH_HIDE_FROM_ADDRESS_LISTS_NAME, "TRUE");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_MS_EXCH_HIDE_FROM_ADDRESS_LISTS_NAME, "TRUE");
String shadowOid = getSingleLinkOid(user);
PrismObject shadow = getObject(ShadowType.class, shadowOid);
@@ -1275,7 +1320,7 @@ public void test250AssignGuybrushPirates() throws Exception {
Entry entry = assertLdapAccount(USER_GUYBRUSH_USERNAME, USER_GUYBRUSH_FULL_NAME);
display("Entry", entry);
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "514");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "514");
assertLdapGroupMember(entry, GROUP_PIRATES_NAME);
@@ -1312,7 +1357,7 @@ public void test255ModifyUserGuybrushPassword() throws Exception {
TestUtil.assertSuccess(result);
Entry entry = assertLdapAccount(USER_GUYBRUSH_USERNAME, USER_GUYBRUSH_FULL_NAME);
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "514");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "514");
try {
assertLdapPassword(USER_GUYBRUSH_USERNAME, USER_GUYBRUSH_FULL_NAME, "wanna.be.a.123");
@@ -1347,7 +1392,7 @@ public void test260EnableGyubrush() throws Exception {
assertAdministrativeStatus(user, ActivationStatusType.ENABLED);
Entry entry = assertLdapAccount(USER_GUYBRUSH_USERNAME, USER_GUYBRUSH_FULL_NAME);
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
String shadowOid = getSingleLinkOid(user);
PrismObject shadow = getObject(ShadowType.class, shadowOid);
@@ -1910,7 +1955,7 @@ public void test600AssignAccountSubman() throws Exception {
assertLdapPassword(getSubLdapConnectionConfig(), USER_SUBMAN_USERNAME, USER_SUBMAN_FULL_NAME, USER_SUBMAN_PASSWORD);
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
// MID-4624
ResourceAttribute createTimestampAttribute = ShadowUtil.getAttribute(shadow, new QName(MidPointConstants.NS_RI, "createTimeStamp"));
@@ -1935,17 +1980,16 @@ public void test610ModifyUserSubmanTitle() throws Exception {
// WHEN
displayWhen(TEST_NAME);
modifyUserReplace(USER_SUBMAN_OID, UserType.F_TITLE, task, result,
- PrismTestUtil.createPolyString("Underdog"));
+ createPolyString("Underdog"));
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
Entry entry = assertLdapSubAccount(USER_SUBMAN_USERNAME, USER_SUBMAN_FULL_NAME);
display("Sub entry", entry);
assertAttribute(entry, "title", "Underdog");
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
PrismObject user = getUser(USER_SUBMAN_OID);
String shadowOid = getSingleLinkOid(user);
@@ -1972,13 +2016,12 @@ public void test620ModifyUserSubmanPassword() throws Exception {
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
Entry entry = assertLdapSubAccount(USER_SUBMAN_USERNAME, USER_SUBMAN_FULL_NAME);
assertAttribute(entry, "title", "Underdog");
assertLdapPassword(getSubLdapConnectionConfig(), USER_SUBMAN_USERNAME, USER_SUBMAN_FULL_NAME, "SuB.321");
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
PrismObject user = getUser(USER_SUBMAN_OID);
String shadowOid = getSingleLinkOid(user);
@@ -2004,8 +2047,7 @@ public void test630DisableUserSubman() throws Exception {
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
// assertLdapConnectorInstances(2);
@@ -2013,7 +2055,7 @@ public void test630DisableUserSubman() throws Exception {
assertAdministrativeStatus(user, ActivationStatusType.DISABLED);
Entry entry = assertLdapSubAccount(USER_SUBMAN_USERNAME, USER_SUBMAN_FULL_NAME);
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "514");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "514");
String shadowOid = getSingleLinkOid(user);
PrismObject shadow = getObject(ShadowType.class, shadowOid);
@@ -2046,14 +2088,13 @@ public void test639EnableUserSubman() throws Exception {
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
PrismObject user = getUser(USER_SUBMAN_OID);
assertAdministrativeStatus(user, ActivationStatusType.ENABLED);
Entry entry = assertLdapSubAccount(USER_SUBMAN_USERNAME, USER_SUBMAN_FULL_NAME);
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
String shadowOid = getSingleLinkOid(user);
PrismObject shadow = getObject(ShadowType.class, shadowOid);
@@ -2072,20 +2113,17 @@ public void test690ModifyUserSubmanRename() throws Exception {
OperationResult result = task.getResult();
ObjectDelta objectDelta = createModifyUserReplaceDelta(USER_SUBMAN_OID, UserType.F_NAME,
- PrismTestUtil.createPolyString(USER_SUBDOG_USERNAME));
+ createPolyString(USER_SUBDOG_USERNAME));
objectDelta.addModificationReplaceProperty(UserType.F_FULL_NAME,
- PrismTestUtil.createPolyString(USER_SUBDOG_FULL_NAME));
- Collection> deltas = MiscSchemaUtil.createCollection(objectDelta);
-
+ createPolyString(USER_SUBDOG_FULL_NAME));
// WHEN
displayWhen(TEST_NAME);
- modelService.executeChanges(deltas, null, task, result);
+ executeChanges(objectDelta, null, task, result);
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
Entry entry = assertLdapSubAccount(USER_SUBDOG_USERNAME, USER_SUBDOG_FULL_NAME);
assertAttribute(entry, "title", "Underdog");
@@ -2119,8 +2157,7 @@ public void test699UnAssignAccountSubdog() throws Exception {
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
assertNoLdapSubAccount(USER_SUBMAN_USERNAME, USER_SUBMAN_FULL_NAME);
assertNoLdapSubAccount(USER_SUBDOG_USERNAME, USER_SUBDOG_FULL_NAME);
@@ -2157,8 +2194,7 @@ public void test700AssignAccountSubmarineAndModify() throws Exception {
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
long tsEnd = System.currentTimeMillis();
@@ -2179,7 +2215,7 @@ public void test700AssignAccountSubmarineAndModify() throws Exception {
AdUtils.formatGuidToDashedNotation(MiscUtil.binaryToHex(entry.get(getPrimaryIdentifierAttributeName()).getBytes())),
accountIcfUid);
- assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+ assertAttribute(entry, AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
// assertLdapConnectorInstances(2);
}
@@ -2199,14 +2235,39 @@ public void test809UnAssignAccountSubmarine() throws Exception {
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
assertNoLdapSubAccount(USER_SUBMARINE_USERNAME, USER_SUBMARINE_FULL_NAME);
PrismObject user = getUser(USER_SUBMARINE_OID);
assertNoLinkedAccount(user);
+// assertLdapConnectorInstances(2);
+ }
+
+ @Test
+ public void test850ReconcileAccounts() throws Exception {
+ final String TEST_NAME = "test850ReconcileAccounts";
+ displayTestTitle(TEST_NAME);
+
+ // GIVEN
+ Task task = createTask(TEST_NAME);
+ OperationResult result = task.getResult();
+
+ assertUsers(6);
+
+ // WHEN
+ displayWhen(TEST_NAME);
+ addTask(getReconciliationTaskFile());
+
+ waitForTaskFinish(getReconciliationTaskOid(), true);
+
+ // THEN
+ displayThen(TEST_NAME);
+
+ assertUsers(23);
+ // TODO
+
// assertLdapConnectorInstances(2);
}
@@ -2234,14 +2295,14 @@ protected void assertSid(PrismObject shadow, String expectedSid) thr
protected Entry assertLdapAccount(String samAccountName, String cn) throws LdapException, IOException, CursorException {
Entry entry = searchLdapAccount("(cn="+cn+")");
assertAttribute(entry, "cn", cn);
- assertAttribute(entry, ATTRIBUTE_SAM_ACCOUNT_NAME_NAME, samAccountName);
+ assertAttribute(entry, AdUtils.ATTRIBUTE_SAM_ACCOUNT_NAME_NAME, samAccountName);
return entry;
}
protected Entry assertLdapSubAccount(String samAccountName, String cn) throws LdapException, IOException, CursorException {
Entry entry = searchLdapAccount(getSubLdapConnectionConfig(), "(cn="+cn+")");
assertAttribute(entry, "cn", cn);
- assertAttribute(entry, ATTRIBUTE_SAM_ACCOUNT_NAME_NAME, samAccountName);
+ assertAttribute(entry, AdUtils.ATTRIBUTE_SAM_ACCOUNT_NAME_NAME, samAccountName);
return entry;
}
@@ -2344,7 +2405,7 @@ protected void assertLdapPassword(String uid, String password) throws LdapExcept
protected ObjectQuery createSamAccountNameQuery(String samAccountName) throws SchemaException {
ObjectQuery query = ObjectQueryUtil.createResourceAndObjectClassQuery(getResourceOid(), getAccountObjectClass(), prismContext);
- ObjectQueryUtil.filterAnd(query.getFilter(), createAttributeFilter(ATTRIBUTE_SAM_ACCOUNT_NAME_NAME, samAccountName),
+ ObjectQueryUtil.filterAnd(query.getFilter(), createAttributeFilter(AdUtils.ATTRIBUTE_SAM_ACCOUNT_NAME_NAME, samAccountName),
prismContext);
return query;
}
@@ -2354,12 +2415,12 @@ protected Entry createAccountEntry(String uid, String cn, String givenName, Stri
byte[] password = encodePassword("Secret.123");
Entry entry = new DefaultEntry(toAccountDn(uid, cn),
"objectclass", getLdapAccountObjectClass(),
- ATTRIBUTE_SAM_ACCOUNT_NAME_NAME, uid,
+ AdUtils.ATTRIBUTE_SAM_ACCOUNT_NAME_NAME, uid,
"cn", cn,
"givenName", givenName,
"sn", sn,
- ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512",
- ATTRIBUTE_UNICODE_PWD_NAME, password);
+ AdUtils.ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512",
+ AdUtils.ATTRIBUTE_UNICODE_PWD_NAME, password);
return entry;
}
@@ -2384,4 +2445,5 @@ public void assertAttribute(PrismObject shadow, QName attrQname,
protected abstract void assertAccountDisabled(PrismObject shadow);
protected abstract void assertAccountEnabled(PrismObject shadow);
+
}
diff --git a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapTest.java b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapTest.java
index 8eca9eec69c..6ded4877ca5 100644
--- a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapTest.java
+++ b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AbstractAdLdapTest.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2015-2016 Evolveum
+ * Copyright (c) 2015-2019 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -117,7 +117,7 @@ public abstract class AbstractAdLdapTest extends AbstractLdapSynchronizationTest
private static final String GROUP_PIRATES_NAME = "pirates";
private static final String GROUP_MELEE_ISLAND_NAME = "Mêlée Island";
- protected static final int NUMBER_OF_ACCOUNTS = 23;
+ protected static final int NUMBER_OF_ACCOUNTS = 12;
private static final String ASSOCIATION_GROUP_NAME = "group";
private static final String NS_EXTENSION = "http://whatever.com/my";
@@ -412,7 +412,7 @@ public void test150SeachAllAccounts() throws Exception {
NUMBER_OF_ACCOUNTS, task, result);
// TODO: why 11? should be 1
- assertCounterIncrement(InternalCounters.CONNECTOR_OPERATION_COUNT, 11);
+ assertCounterIncrement(InternalCounters.CONNECTOR_OPERATION_COUNT, 9);
assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0);
SearchResultMetadata metadata = searchResultList.getMetadata();
@@ -606,8 +606,8 @@ public void test182Search2AccountsOffset1SortCn() throws Exception {
SearchResultList> shadows = doSearch(TEST_NAME, query, 2, task, result);
- assertAccountShadow(shadows.get(0), "CN=Adalbert Meduza,OU=evolveum,DC=win,DC=evolveum,DC=com");
- assertAccountShadow(shadows.get(1), "CN=Adalbert Meduza1,OU=evolveum,DC=win,DC=evolveum,DC=com");
+ assertAccountShadow(shadows.get(0), "CN=Administrator,CN=Users,DC=win,DC=evolveum,DC=com");
+ assertAccountShadow(shadows.get(1), "CN=Chuck LeChuck,CN=Users,DC=win,DC=evolveum,DC=com");
assertCounterIncrement(InternalCounters.CONNECTOR_OPERATION_COUNT, 1);
assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0);
@@ -771,8 +771,7 @@ public void test213ModifyUserBarbossaShowInAdvancedViewOnlyFalse() throws Except
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
Entry entry = assertLdapAccount(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME);
assertAttribute(entry, "showInAdvancedViewOnly", "FALSE");
@@ -795,7 +794,7 @@ public void test220ModifyUserBarbossaPassword() throws Exception {
OperationResult result = task.getResult();
ProtectedStringType userPasswordPs = new ProtectedStringType();
- userPasswordPs.setClearValue("here.There.Be.Monsters");
+ userPasswordPs.setClearValue(USER_BARBOSSA_PASSWORD_2);
// WHEN
displayWhen(TEST_NAME);
@@ -803,12 +802,46 @@ public void test220ModifyUserBarbossaPassword() throws Exception {
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
+
+ Entry entry = assertLdapAccount(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME);
+ assertAttribute(entry, "title", "Captain");
+ assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, USER_BARBOSSA_PASSWORD_2);
+ assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
+
+ PrismObject user = getUser(USER_BARBOSSA_OID);
+ String shadowOid = getSingleLinkOid(user);
+ assertEquals("Shadows have moved", accountBarbossaOid, shadowOid);
+
+ assertLdapConnectorInstances(2);
+ }
+
+ /**
+ * MID-5242
+ */
+ @Test
+ public void test222ModifyUserBarbossaPasswordNational() throws Exception {
+ final String TEST_NAME = "test222ModifyUserBarbossaPasswordNational";
+ displayTestTitle(TEST_NAME);
+
+ // GIVEN
+ Task task = taskManager.createTaskInstance(this.getClass().getName() + "." + TEST_NAME);
+ OperationResult result = task.getResult();
+
+ ProtectedStringType userPasswordPs = new ProtectedStringType();
+ userPasswordPs.setClearValue(USER_BARBOSSA_PASSWORD_AD_1);
+
+ // WHEN
+ displayWhen(TEST_NAME);
+ modifyUserReplace(USER_BARBOSSA_OID, PATH_CREDENTIALS_PASSWORD_VALUE, task, result, userPasswordPs);
+
+ // THEN
+ displayThen(TEST_NAME);
+ assertSuccess(result);
Entry entry = assertLdapAccount(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME);
assertAttribute(entry, "title", "Captain");
- assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, "here.There.Be.Monsters");
+ assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, USER_BARBOSSA_PASSWORD_AD_1);
assertAttribute(entry, ATTRIBUTE_USER_ACCOUNT_CONTROL_NAME, "512");
PrismObject user = getUser(USER_BARBOSSA_OID);
@@ -833,8 +866,7 @@ public void test230DisableUserBarbossa() throws Exception {
// THEN
displayThen(TEST_NAME);
- result.computeStatus();
- TestUtil.assertSuccess(result);
+ assertSuccess(result);
assertLdapConnectorInstances(2);
@@ -849,7 +881,7 @@ public void test230DisableUserBarbossa() throws Exception {
assertAccountDisabled(shadow);
try {
- assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, "here.There.Be.Monsters");
+ assertLdapPassword(USER_BARBOSSA_USERNAME, USER_BARBOSSA_FULL_NAME, USER_BARBOSSA_PASSWORD_AD_2);
AssertJUnit.fail("Password authentication works, but it should fail");
} catch (SecurityException e) {
// this is expected
diff --git a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AdUtils.java b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AdUtils.java
index f8f6f084e5f..2458e8f194f 100644
--- a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AdUtils.java
+++ b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/AdUtils.java
@@ -25,6 +25,7 @@
import com.evolveum.midpoint.common.refinery.RefinedResourceSchema;
import com.evolveum.midpoint.common.refinery.RefinedResourceSchemaImpl;
+import com.evolveum.midpoint.prism.PrimitiveType;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.util.PrismAsserts;
@@ -52,6 +53,8 @@ public class AdUtils {
public static final String ATTRIBUTE_UNICODE_PWD_NAME = "unicodePwd";
public static final String ATTRIBUTE_MS_EXCH_HIDE_FROM_ADDRESS_LISTS_NAME = "msExchHideFromAddressLists";
public static final QName ATTRIBUTE_MS_EXCH_HIDE_FROM_ADDRESS_LISTS_QNAME = new QName(MidPointConstants.NS_RI, ATTRIBUTE_MS_EXCH_HIDE_FROM_ADDRESS_LISTS_NAME);
+ public static final String ATTRIBUTE_TITLE_NAME = "title";
+ public static final String ATTRIBUTE_PROXY_ADDRESSES_NAME = "proxyAddresses";
public static final QName OBJECT_CLASS_MS_EXCH_BASE_CLASS_QNAME = new QName(MidPointConstants.NS_RI, "msExchBaseClass");
@@ -171,31 +174,39 @@ private static ObjectClassComplexTypeDefinition assertAdSchemaBase(ResourceSchem
ResourceAttributeDefinition isCriticalSystemObjectDef = accountObjectClassDefinition.findAttributeDefinition("isCriticalSystemObject");
PrismAsserts.assertDefinition(isCriticalSystemObjectDef, new QName(MidPointConstants.NS_RI, "isCriticalSystemObject"),
- DOMUtil.XSD_BOOLEAN, 0, 1);
+ PrimitiveType.XSD_BOOLEAN, 0, 1);
assertTrue("isCriticalSystemObject read", isCriticalSystemObjectDef.canRead());
assertTrue("isCriticalSystemObject modify", isCriticalSystemObjectDef.canModify());
assertTrue("isCriticalSystemObject add", isCriticalSystemObjectDef.canAdd());
ResourceAttributeDefinition nTSecurityDescriptorDef = accountObjectClassDefinition.findAttributeDefinition("nTSecurityDescriptor");
PrismAsserts.assertDefinition(nTSecurityDescriptorDef, new QName(MidPointConstants.NS_RI, "nTSecurityDescriptor"),
- DOMUtil.XSD_BASE64BINARY, 0, 1);
+ PrimitiveType.XSD_BASE64BINARY, 0, 1);
assertTrue("nTSecurityDescriptor read", nTSecurityDescriptorDef.canRead());
assertTrue("nTSecurityDescriptor modify", nTSecurityDescriptorDef.canModify());
assertTrue("nTSecurityDescriptor add", nTSecurityDescriptorDef.canAdd());
ResourceAttributeDefinition objectSidDef = accountObjectClassDefinition.findAttributeDefinition(ATTRIBUTE_OBJECT_SID_NAME);
PrismAsserts.assertDefinition(objectSidDef, new QName(MidPointConstants.NS_RI, ATTRIBUTE_OBJECT_SID_NAME),
- DOMUtil.XSD_STRING, 0, 1);
+ PrimitiveType.XSD_STRING, 0, 1);
assertTrue("objectSid read", objectSidDef.canRead());
assertFalse("objectSid modify", objectSidDef.canModify());
assertFalse("objectSid add", objectSidDef.canAdd());
ResourceAttributeDefinition lastLogonDef = accountObjectClassDefinition.findAttributeDefinition("lastLogon");
PrismAsserts.assertDefinition(lastLogonDef, new QName(MidPointConstants.NS_RI, "lastLogon"),
- DOMUtil.XSD_LONG, 0, 1);
+ PrimitiveType.XSD_LONG, 0, 1);
assertTrue("lastLogonDef read", lastLogonDef.canRead());
assertTrue("lastLogonDef modify", lastLogonDef.canModify());
assertTrue("lastLogonDef add", lastLogonDef.canAdd());
+
+ ResourceAttributeDefinition proxyAddressesDef = accountObjectClassDefinition.findAttributeDefinition(ATTRIBUTE_PROXY_ADDRESSES_NAME);
+ PrismAsserts.assertDefinition(proxyAddressesDef, new QName(MidPointConstants.NS_RI, ATTRIBUTE_PROXY_ADDRESSES_NAME),
+ PrimitiveType.XSD_STRING, 0, -1);
+ assertTrue("proxyAddressesDef read", proxyAddressesDef.canRead());
+ assertTrue("proxyAddressesDef modify", proxyAddressesDef.canModify());
+ assertTrue("proxyAddressesDef add", proxyAddressesDef.canAdd());
+ // TODO: proxyAddressesDef.getMatchingRuleQName()
return accountObjectClassDefinition;
}
diff --git a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/TestAdLdapChimera.java b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/TestAdLdapChimera.java
index f4f20edc18e..2ee6c73eb86 100644
--- a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/TestAdLdapChimera.java
+++ b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/TestAdLdapChimera.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2015-2017 Evolveum
+ * Copyright (c) 2015-2019 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -54,6 +54,16 @@ protected String getLdapServerHost() {
protected int getLdapServerPort() {
return 636;
}
+
+ @Override
+ protected File getReconciliationTaskFile() {
+ return new File(getBaseDir(), "task-reconcile-chimera-users.xml");
+ }
+
+ @Override
+ protected String getReconciliationTaskOid() {
+ return "6e2689dc-88fa-11e9-a382-0baf927677fd";
+ }
@Override
protected void assertAccountDisabled(PrismObject shadow) {
diff --git a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/TestAdLdapChimeraRunAs.java b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/TestAdLdapChimeraRunAs.java
index 6b3897d1667..de62e002081 100644
--- a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/TestAdLdapChimeraRunAs.java
+++ b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/ad/TestAdLdapChimeraRunAs.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2015-2017 Evolveum
+ * Copyright (c) 2015-2019 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
import org.testng.annotations.Listeners;
+import org.testng.annotations.Test;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType;
@@ -33,7 +34,7 @@
@ContextConfiguration(locations = {"classpath:ctx-conntest-test-main.xml"})
@Listeners({ com.evolveum.midpoint.tools.testng.AlphabeticalMethodInterceptor.class })
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
-public class TestAdLdapChimeraRunAs extends AbstractAdLdapMultidomainRunAsTest {
+public class TestAdLdapChimeraRunAs extends TestAdLdapChimera {
@Override
protected String getResourceOid() {
@@ -45,24 +46,25 @@ protected File getResourceFile() {
return new File(getBaseDir(), "resource-chimera-runas.xml");
}
+ /**
+ * Try to set the same password again. In "selfservice mode" (runAs capability)
+ * this change should fail.
+ */
@Override
- protected String getLdapServerHost() {
- return "chimera.ad.evolveum.com";
+ @Test
+ public void test222ModifyUserBarbossaPasswordSelfServicePassword1Again() throws Exception {
+ final String TEST_NAME = "test222ModifyUserBarbossaPasswordSelfServicePassword1Again";
+ testModifyUserBarbossaPasswordSelfServiceFailure(TEST_NAME, USER_BARBOSSA_PASSWORD_AD_1, USER_BARBOSSA_PASSWORD_AD_1);
}
-
- @Override
- protected int getLdapServerPort() {
- return 636;
- }
-
+
+ /**
+ * Change password back to the first password. This password was used before.
+ * In self-service mode (in subclass) this should fail due to password history check.
+ */
@Override
- protected void assertAccountDisabled(PrismObject shadow) {
- assertAdministrativeStatus(shadow, ActivationStatusType.DISABLED);
+ @Test
+ public void test226ModifyUserBarbossaPasswordSelfServicePassword1AgainAgain() throws Exception {
+ final String TEST_NAME = "test226ModifyUserBarbossaPasswordSelfServicePassword1AgainAgain";
+ testModifyUserBarbossaPasswordSelfServiceFailure(TEST_NAME, USER_BARBOSSA_PASSWORD_AD_2, USER_BARBOSSA_PASSWORD_AD_1);
}
-
- @Override
- protected void assertAccountEnabled(PrismObject shadow) {
- assertAdministrativeStatus(shadow, ActivationStatusType.ENABLED);
- }
-
}
diff --git a/testing/conntest/src/test/resources/ad-ldap-multidomain/task-reconcile-chimera-users.xml b/testing/conntest/src/test/resources/ad-ldap-multidomain/task-reconcile-chimera-users.xml
new file mode 100644
index 00000000000..f992af2d2ab
--- /dev/null
+++ b/testing/conntest/src/test/resources/ad-ldap-multidomain/task-reconcile-chimera-users.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+ Reconciliation: Chimera users
+
+
+ ri:user
+
+
+ 6e2689dc-88fa-11e9-a382-0baf927677fd
+
+ runnable
+
+ http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/reconciliation/handler-3
+
+ single
+
+
diff --git a/testing/conntest/src/test/resources/logback-test.xml b/testing/conntest/src/test/resources/logback-test.xml
index 8a880f3153c..eacbd5ed2a7 100644
--- a/testing/conntest/src/test/resources/logback-test.xml
+++ b/testing/conntest/src/test/resources/logback-test.xml
@@ -56,6 +56,7 @@
+
diff --git a/testing/conntest/src/test/resources/truststore.jks b/testing/conntest/src/test/resources/truststore.jks
index ed8a1ed29ea..e5be81c24a8 100644
Binary files a/testing/conntest/src/test/resources/truststore.jks and b/testing/conntest/src/test/resources/truststore.jks differ
diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestConfiguredCapabilitiesActivation.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestConfiguredCapabilitiesActivation.java
new file mode 100644
index 00000000000..72254ec8003
--- /dev/null
+++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestConfiguredCapabilitiesActivation.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2018-2019 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.
+ */
+package com.evolveum.midpoint.testing.story;
+
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.io.File;
+import java.util.List;
+
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.annotation.DirtiesContext.ClassMode;
+import org.springframework.test.context.ContextConfiguration;
+import org.testng.annotations.Test;
+
+import com.evolveum.icf.dummy.resource.ConflictException;
+import com.evolveum.icf.dummy.resource.SchemaViolationException;
+import com.evolveum.midpoint.prism.PrismObject;
+import com.evolveum.midpoint.schema.CapabilityUtil;
+import com.evolveum.midpoint.schema.constants.MidPointConstants;
+import com.evolveum.midpoint.schema.result.OperationResult;
+import com.evolveum.midpoint.task.api.Task;
+import com.evolveum.midpoint.test.DummyResourceContoller;
+import com.evolveum.midpoint.test.util.MidPointTestConstants;
+import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
+import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
+import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.AddRemoveAttributeValuesCapabilityType;
+import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.UpdateCapabilityType;
+
+/**
+ * Test for resources with configured capabilities (MID-5400)
+ *
+ * @author Gustav Palos
+ */
+@ContextConfiguration(locations = {"classpath:ctx-story-test-main.xml"})
+@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
+public class TestConfiguredCapabilitiesActivation extends AbstractStoryTest {
+
+ public static final File TEST_DIR = new File(MidPointTestConstants.TEST_RESOURCES_DIR, "configured-capabilities-activation");
+
+ protected static final File RESOURCE_DUMMY_ACTIVATION_FILE = new File(TEST_DIR, "resource-dummy-activation.xml");
+ protected static final String RESOURCE_DUMMY_ACTIVATION_OID = "4bac305c-ed1f-4919-9670-e11863156811";
+ protected static final String RESOURCE_DUMMY_ACTIVATION_NAME = "activation";
+
+ protected static final File SHADOW_FILE = new File(TEST_DIR, "shadow-sample.xml");
+ protected static final String SHADOW_OID = "6925f5a7-2acb-409b-b2e1-94a6534a9745";
+
+ @Override
+ public void initSystem(Task initTask, OperationResult initResult) throws Exception {
+ super.initSystem(initTask, initResult);
+
+ initDummyResourcePirate(RESOURCE_DUMMY_ACTIVATION_NAME, RESOURCE_DUMMY_ACTIVATION_FILE, RESOURCE_DUMMY_ACTIVATION_OID, initTask, initResult);
+ addObject(SHADOW_FILE);
+ }
+
+ @Test
+ public void test000ImportAccount() throws Exception {
+ final String TEST_NAME = "test000ImportAccount";
+ displayTestTitle(TEST_NAME);
+
+ Task task = createTask(TEST_NAME);
+ OperationResult result = task.getResult();
+
+ // WHEN
+ displayWhen(TEST_NAME);
+
+ modelService.importFromResource(SHADOW_OID, task, result);
+
+ // THEN
+ displayThen(TEST_NAME);
+ assertSuccess(result);
+
+/* List