Skip to content

Commit 644c432

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 2d06092 + 0d2cb8a commit 644c432

File tree

21 files changed

+738
-150
lines changed

21 files changed

+738
-150
lines changed

gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/connector/development/component/wizard/scimrest/objectclass/schema/WaitingObjectClassDetailsConnectorStepPanel.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,10 @@
77
package com.evolveum.midpoint.gui.impl.page.admin.connector.development.component.wizard.scimrest.objectclass.schema;
88

99
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
10-
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
11-
import com.evolveum.midpoint.gui.api.util.WebPrismUtil;
1210
import com.evolveum.midpoint.gui.impl.page.admin.connector.development.component.wizard.ConnectorDevelopmentWizardUtil;
13-
import com.evolveum.midpoint.prism.PrismContainerValue;
1411
import com.evolveum.midpoint.prism.path.ItemName;
15-
import com.evolveum.midpoint.prism.path.ItemPath;
1612
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
1713

18-
import org.apache.commons.lang3.Strings;
1914
import org.apache.wicket.model.IModel;
2015

2116
import com.evolveum.midpoint.gui.impl.component.wizard.WizardPanelHelper;
@@ -31,8 +26,6 @@
3126
import com.evolveum.midpoint.web.application.PanelInstance;
3227
import com.evolveum.midpoint.web.application.PanelType;
3328

34-
import java.util.Optional;
35-
3629
/**
3730
* @author lskublik
3831
*/
@@ -56,7 +49,7 @@ public WaitingObjectClassDetailsConnectorStepPanel(
5649

5750
@Override
5851
protected StatusInfo<?> obtainResult(String token, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
59-
return getDetailsModel().getServiceLocator().getConnectorService().getDiscoverObjectClassDetailsStatus(token, task, result);
52+
return getDetailsModel().getServiceLocator().getConnectorService().getDiscoverObjectClassAttributesStatus(token, task, result);
6053
}
6154

6255
@Override
@@ -92,7 +85,7 @@ protected IModel<String> getSubTextModel() {
9285

9386
@Override
9487
protected ItemName getActivityType() {
95-
return WorkDefinitionsType.F_DISCOVER_OBJECT_CLASS_DETAILS;
88+
return WorkDefinitionsType.F_DISCOVER_OBJECT_CLASS_ATTRIBUTES;
9689
}
9790

9891
@Override

infra/schema/src/main/java/com/evolveum/midpoint/schema/util/task/work/WorkDefinitionUtil.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ public class WorkDefinitionUtil {
8282
addTypedParameters(values, definitions.getProcessDocumentation());
8383
addTypedParameters(values, definitions.getDiscoverGlobalInformation());
8484
addTypedParameters(values, definitions.getDiscoverObjectClassInformation());
85-
addTypedParameters(values, definitions.getDiscoverObjectClassDetails());
85+
addTypedParameters(values, definitions.getDiscoverObjectClassAttributes());
86+
addTypedParameters(values, definitions.getDiscoverObjectClassEndpoints());
8687
addTypedParameters(values, definitions.getGenerateConnectorArtifact());
8788

8889
addUntypedParameters(values, definitions.getExtension());

infra/schema/src/main/resources/xml/ns/public/common/common-tasks-3.xsd

Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2837,7 +2837,15 @@
28372837
</xsd:annotation>
28382838
</xsd:element>
28392839

2840-
<xsd:element name="discoverObjectClassDetails" type="tns:ConnDevDiscoverObjectClassDetailsDefinitionType">
2840+
<xsd:element name="discoverObjectClassAttributes" type="tns:ConnDevDiscoverObjectClassAttributesDefinitionType">
2841+
<xsd:annotation>
2842+
<xsd:appinfo>
2843+
<a:since>4.11</a:since>
2844+
</xsd:appinfo>
2845+
</xsd:annotation>
2846+
</xsd:element>
2847+
2848+
<xsd:element name="discoverObjectClassEndpoints" type="tns:ConnDevDiscoverObjectClassEndpointsDefinitionType">
28412849
<xsd:annotation>
28422850
<xsd:appinfo>
28432851
<a:since>4.11</a:since>
@@ -11509,8 +11517,8 @@
1150911517
</xsd:sequence>
1151011518
</xsd:complexType>
1151111519

11512-
<!-- Discover Object-Class specific information -->
11513-
<xsd:complexType name="ConnDevDiscoverObjectClassDetailsDefinitionType">
11520+
<!-- Discover Object-Class attributes -->
11521+
<xsd:complexType name="ConnDevDiscoverObjectClassAttributesDefinitionType">
1151411522
<xsd:complexContent>
1151511523
<xsd:extension base="tns:ConnDevBaseWorkDefinitionType">
1151611524
<xsd:sequence>
@@ -11520,22 +11528,50 @@
1152011528
</xsd:complexContent>
1152111529
</xsd:complexType>
1152211530

11523-
<xsd:complexType name="ConnDevDiscoverObjectClassDetailsWorkStateType">
11531+
<xsd:complexType name="ConnDevDiscoverObjectClassAttributesWorkStateType">
1152411532
<xsd:complexContent>
1152511533
<xsd:extension base="tns:AbstractActivityWorkStateType">
1152611534
<xsd:sequence>
11527-
<xsd:element name="result" type="tns:ConnDevDiscoverObjectClassDetailsResultType"/>
11535+
<xsd:element name="result" type="tns:ConnDevDiscoverObjectClassAttributesResultType"/>
1152811536
</xsd:sequence>
1152911537
</xsd:extension>
1153011538
</xsd:complexContent>
1153111539
</xsd:complexType>
1153211540

11533-
<xsd:complexType name="ConnDevDiscoverObjectClassDetailsResultType">
11534-
<xsd:annotation>
11535-
<xsd:appinfo>
11536-
<a:container/>
11537-
</xsd:appinfo>
11538-
</xsd:annotation>
11541+
<xsd:complexType name="ConnDevDiscoverObjectClassAttributesResultType">
11542+
<xsd:sequence>
11543+
<xsd:element name="connectorRef" type="tns:ObjectReferenceType">
11544+
<xsd:annotation>
11545+
<xas:appinfo>
11546+
<a:objectReferenceTargetType>ConnectorType</a:objectReferenceTargetType>
11547+
</xas:appinfo>
11548+
</xsd:annotation>
11549+
</xsd:element>
11550+
</xsd:sequence>
11551+
</xsd:complexType>
11552+
11553+
<!-- Discover Object-Class endpoints -->
11554+
<xsd:complexType name="ConnDevDiscoverObjectClassEndpointsDefinitionType">
11555+
<xsd:complexContent>
11556+
<xsd:extension base="tns:ConnDevBaseWorkDefinitionType">
11557+
<xsd:sequence>
11558+
<xsd:element name="objectClass" type="xsd:string"/>
11559+
</xsd:sequence>
11560+
</xsd:extension>
11561+
</xsd:complexContent>
11562+
</xsd:complexType>
11563+
11564+
<xsd:complexType name="ConnDevDiscoverObjectClassEndpointsWorkStateType">
11565+
<xsd:complexContent>
11566+
<xsd:extension base="tns:AbstractActivityWorkStateType">
11567+
<xsd:sequence>
11568+
<xsd:element name="result" type="tns:ConnDevDiscoverObjectClassEndpointsResultType"/>
11569+
</xsd:sequence>
11570+
</xsd:extension>
11571+
</xsd:complexContent>
11572+
</xsd:complexType>
11573+
11574+
<xsd:complexType name="ConnDevDiscoverObjectClassEndpointsResultType">
1153911575
<xsd:sequence>
1154011576
<xsd:element name="connectorRef" type="tns:ObjectReferenceType">
1154111577
<xsd:annotation>

model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/smart/conndev/ConnectorBootstrapStoryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ public void test310GenerateUserSchema() throws Exception {
284284

285285
when("waiting for the operation to finish successfully");
286286
var response = waitForFinish(
287-
() -> connectorService.getDiscoverObjectClassDetailsStatus(detailsToken, task, result),
287+
() -> connectorService.getDiscoverObjectClassAttributesStatus(detailsToken, task, result),
288288
TIMEOUT);
289289

290290
assertThat(response).isNotNull();

model/smart-api/src/main/java/com/evolveum/midpoint/smart/api/conndev/ConnectorDevelopmentOperation.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ public interface ConnectorDevelopmentOperation {
4141

4242
String submitDiscoverObjectClasses(Task task, OperationResult result);
4343

44-
String submitDiscoverObjectClassDetails(String user, Task testTask, OperationResult testOperationResult);
44+
String submitDiscoverObjectClassDetails(String objectClass, Task testTask, OperationResult testOperationResult);
45+
46+
String submitDiscoverObjectClassAttributes(String objectClass, Task testTask, OperationResult testOperationResult);
47+
48+
String submitDiscoverObjectClassEndpoints(String objectClass, Task testTask, OperationResult testOperationResult);
4549

4650
String submitGenerateArtifact(ConnDevArtifactType artifact, Task testTask, OperationResult testOperationResult);
4751

model/smart-api/src/main/java/com/evolveum/midpoint/smart/api/conndev/ConnectorDevelopmentService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public interface ConnectorDevelopmentService {
3131

3232
StatusInfo<ConnDevDiscoverObjectClassInformationResultType> getDiscoverObjectClassInformationStatus(String token, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException;
3333

34-
StatusInfo<ConnDevDiscoverObjectClassDetailsResultType> getDiscoverObjectClassDetailsStatus(String token, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException;
34+
StatusInfo<ConnDevDiscoverObjectClassAttributesResultType> getDiscoverObjectClassAttributesStatus(String token, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException;
35+
36+
StatusInfo<ConnDevDiscoverObjectClassEndpointsResultType> getDiscoverObjectClassEndpointsStatus(String token, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException;
3537

3638
}

model/smart-impl/pom.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,14 @@
358358
<artifactId>assertj-core</artifactId>
359359
<scope>test</scope>
360360
</dependency>
361+
362+
<dependency>
363+
<groupId>org.wiremock</groupId>
364+
<artifactId>wiremock-standalone</artifactId>
365+
<version>3.12.1</version>
366+
<scope>test</scope>
367+
</dependency>
368+
361369
</dependencies>
362370

363371
<build>

model/smart-impl/src/main/java/com/evolveum/midpoint/smart/impl/StatusInfoImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ public StatusInfoImpl(TaskType task, ItemName resultItemName, Class<T> resultCla
6060
this.taskInformation = ActivityBasedTaskInformation.createForTask(task, null);
6161

6262
var affected = task.getAffectedObjects();
63-
if (affected != null && affected.getActivity() != null) {
64-
this.request = task.getAffectedObjects().getActivity().get(0).getResourceObjects(); // FIXME implement more robustly
63+
if (affected != null && !affected.getActivity().isEmpty()) {
64+
this.request = affected.getActivity().get(0).getResourceObjects(); // FIXME implement more robustly
6565
} else {
6666
this.request = null;
6767
}

model/smart-impl/src/main/java/com/evolveum/midpoint/smart/impl/conndev/ConnectorDevelopmentBackend.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.evolveum.midpoint.smart.api.conndev.ConnectorDevelopmentArtifacts;
1010
import com.evolveum.midpoint.smart.api.conndev.SupportedAuthorization;
1111
import com.evolveum.midpoint.smart.impl.conndev.activity.ConnDevBeans;
12+
import com.evolveum.midpoint.task.api.RunningTask;
1213
import com.evolveum.midpoint.task.api.Task;
1314
import com.evolveum.midpoint.util.exception.*;
1415
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
@@ -22,6 +23,7 @@
2223
import java.util.HashSet;
2324
import java.util.List;
2425
import java.util.Properties;
26+
import java.util.function.BooleanSupplier;
2527

2628
public abstract class ConnectorDevelopmentBackend {
2729

@@ -43,6 +45,17 @@ public ConnectorDevelopmentBackend(ConnDevBeans beans, ConnectorDevelopmentType
4345
this.result = result;
4446
}
4547

48+
/**
49+
* Returns a supplier that operations must poll to implement cooperative cancellation.
50+
*
51+
* Because operations run in threads that cannot be forcibly killed, each operation is
52+
* responsible for periodically checking this supplier and stopping itself when it returns
53+
* false — which happens once the task has been suspended or stopped.
54+
*/
55+
protected BooleanSupplier canRun() {
56+
return task instanceof RunningTask rt ? rt::canRun : () -> true;
57+
}
58+
4659

4760
public static ConnectorDevelopmentBackend backendFor(String connectorDevelopmentOid, Task task, OperationResult result) throws CommonException {
4861
var beans = ConnDevBeans.get();

model/smart-impl/src/main/java/com/evolveum/midpoint/smart/impl/conndev/ConnectorDevelopmentServiceImpl.java

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,30 @@ public String submitDiscoverObjectClasses(Task task, OperationResult result) {
112112
}
113113

114114
@Override
115-
public String submitDiscoverObjectClassDetails(String objectClass, Task task, OperationResult result) {
116-
return submitTask("Discovering '" + objectClass +"'object classe details for " + stateObject.getOid(),
117-
new WorkDefinitionsType().discoverObjectClassDetails(new ConnDevDiscoverObjectClassDetailsDefinitionType()
115+
public String submitDiscoverObjectClassAttributes(String objectClass, Task task, OperationResult result) {
116+
return submitTask(
117+
"Discovering attributes for object class '" + objectClass + "'",
118+
new WorkDefinitionsType().discoverObjectClassAttributes(new ConnDevDiscoverObjectClassAttributesDefinitionType()
118119
.connectorDevelopmentRef(stateObject.getOid(), ConnectorDevelopmentType.COMPLEX_TYPE)
119-
.objectClass(objectClass)
120-
), task, result);
120+
.objectClass(objectClass)),
121+
task, result);
122+
}
123+
124+
@Override
125+
public String submitDiscoverObjectClassEndpoints(String objectClass, Task task, OperationResult result) {
126+
return submitTask(
127+
"Discovering endpoints for object class '" + objectClass + "'",
128+
new WorkDefinitionsType().discoverObjectClassEndpoints(new ConnDevDiscoverObjectClassEndpointsDefinitionType()
129+
.connectorDevelopmentRef(stateObject.getOid(), ConnectorDevelopmentType.COMPLEX_TYPE)
130+
.objectClass(objectClass)),
131+
task, result);
132+
}
133+
134+
@Deprecated
135+
@Override
136+
public String submitDiscoverObjectClassDetails(String objectClass, Task task, OperationResult result) {
137+
submitDiscoverObjectClassAttributes(objectClass, task, result);
138+
return submitDiscoverObjectClassEndpoints(objectClass, task, result);
121139
}
122140

123141
@Override
@@ -251,7 +269,6 @@ private String submitTask(String name, WorkDefinitionsType work, Task task, Oper
251269
} catch (Exception e) {
252270
throw new SystemException(e);
253271
}
254-
255272
}
256273

257274
private String connectorTemplateFor(ConnDevIntegrationType integrationType) {
@@ -326,11 +343,20 @@ public StatusInfo<ConnDevDiscoverObjectClassInformationResultType> getDiscoverOb
326343
}
327344

328345
@Override
329-
public StatusInfo<ConnDevDiscoverObjectClassDetailsResultType> getDiscoverObjectClassDetailsStatus(String token, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
346+
public StatusInfo<ConnDevDiscoverObjectClassAttributesResultType> getDiscoverObjectClassAttributesStatus(String token, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
330347
return new StatusInfoImpl<>(
331-
getTask(token,result),
348+
getTask(token, result),
349+
ConnDevCreateConnectorWorkStateType.F_RESULT,
350+
ConnDevDiscoverObjectClassAttributesResultType.class
351+
);
352+
}
353+
354+
@Override
355+
public StatusInfo<ConnDevDiscoverObjectClassEndpointsResultType> getDiscoverObjectClassEndpointsStatus(String token, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
356+
return new StatusInfoImpl<>(
357+
getTask(token, result),
332358
ConnDevCreateConnectorWorkStateType.F_RESULT,
333-
ConnDevDiscoverObjectClassDetailsResultType.class
359+
ConnDevDiscoverObjectClassEndpointsResultType.class
334360
);
335361
}
336362
}

0 commit comments

Comments
 (0)