diff --git a/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/cases/QCaseMapping.java b/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/cases/QCaseMapping.java index 9ee84f7589a..dbf13db3fbd 100644 --- a/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/cases/QCaseMapping.java +++ b/repo/repo-sqale/src/main/java/com/evolveum/midpoint/repo/sqale/qmodel/cases/QCaseMapping.java @@ -8,6 +8,12 @@ import static com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType.*; +import com.evolveum.midpoint.repo.sqale.qmodel.task.MTask; + +import com.evolveum.midpoint.repo.sqlbase.JdbcSession; + +import com.evolveum.midpoint.util.MiscUtil; + import org.jetbrains.annotations.NotNull; import com.evolveum.midpoint.repo.sqale.SqaleRepoContext; @@ -60,5 +66,30 @@ public MCase newRowObject() { return new MCase(); } - // TODO transformation code + @Override + public @NotNull MCase toRowObjectWithoutFullObject( + CaseType acase, JdbcSession jdbcSession) { + MCase row = super.toRowObjectWithoutFullObject(acase, jdbcSession); + + row.state = acase.getState(); + row.closeTimestamp = MiscUtil.asInstant(acase.getCloseTimestamp()); + setReference(acase.getObjectRef(), + o -> row.objectRefTargetOid = o, + t -> row.objectRefTargetType = t, + r -> row.objectRefRelationId = r); + setReference(acase.getParentRef(), + o -> row.parentRefTargetOid = o, + t -> row.parentRefTargetType = t, + r -> row.parentRefRelationId = r); + setReference(acase.getRequestorRef(), + o -> row.requestorRefTargetOid = o, + t -> row.requestorRefTargetType = t, + r -> row.requestorRefRelationId = r); + setReference(acase.getTargetRef(), + o -> row.targetRefTargetOid = o, + t -> row.targetRefTargetType = t, + r -> row.targetRefRelationId = r); + + return row; + } } diff --git a/repo/repo-sqale/src/test/java/com/evolveum/midpoint/repo/sqale/func/SqaleRepoAddDeleteObjectTest.java b/repo/repo-sqale/src/test/java/com/evolveum/midpoint/repo/sqale/func/SqaleRepoAddDeleteObjectTest.java index b4e51abf1cf..5ae99c81376 100644 --- a/repo/repo-sqale/src/test/java/com/evolveum/midpoint/repo/sqale/func/SqaleRepoAddDeleteObjectTest.java +++ b/repo/repo-sqale/src/test/java/com/evolveum/midpoint/repo/sqale/func/SqaleRepoAddDeleteObjectTest.java @@ -18,6 +18,10 @@ import java.util.UUID; import javax.xml.namespace.QName; +import com.evolveum.midpoint.repo.sqale.qmodel.cases.MCase; + +import com.evolveum.midpoint.repo.sqale.qmodel.cases.QCase; + import org.testng.annotations.Test; import com.evolveum.midpoint.repo.api.DeleteObjectResult; @@ -1118,6 +1122,58 @@ public void test840AccessCertificationDefinition() throws Exception { assertThat(row.ownerRefTargetType).isEqualTo(MObjectType.USER); assertCachedUri(row.ownerRefRelationId, relationUri); } + + @Test + public void test850Case() throws Exception { + OperationResult result = createOperationResult(); + + given("case"); + String objectName = "case" + getTestNumber(); + UUID parentOid = UUID.randomUUID(); + QName parentRelation = QName.valueOf("{https://random.org/ns}case-parent-rel"); + UUID objectOid = UUID.randomUUID(); + QName objectRelation = QName.valueOf("{https://random.org/ns}case-object-rel"); + UUID requestorOid = UUID.randomUUID(); + QName requestorRelation = QName.valueOf("{https://random.org/ns}case-requestor-rel"); + UUID targetOid = UUID.randomUUID(); + QName targetRelation = QName.valueOf("{https://random.org/ns}case-target-rel"); + + CaseType acase = new CaseType(prismContext) + .name(objectName) + .state("closed") + .closeTimestamp(MiscUtil.asXMLGregorianCalendar(321L)) + .parentRef(parentOid.toString(), + CaseType.COMPLEX_TYPE, parentRelation) + .objectRef(objectOid.toString(), + RoleType.COMPLEX_TYPE, objectRelation) + .requestorRef(requestorOid.toString(), + UserType.COMPLEX_TYPE, requestorRelation) + .targetRef(targetOid.toString(), + OrgType.COMPLEX_TYPE, targetRelation); + + when("adding it to the repository"); + repositoryService.addObject(acase.asPrismObject(), null, result); + + then("it is stored and relevant attributes are in columns"); + assertThatOperationResult(result).isSuccess(); + + MCase row = selectObjectByOid(QCase.class, acase.getOid()); + assertThat(row.state).isEqualTo("closed"); + assertThat(row.closeTimestamp).isEqualTo(Instant.ofEpochMilli(321)); + assertThat(row.parentRefTargetOid).isEqualTo(parentOid); + assertThat(row.parentRefTargetType).isEqualTo(MObjectType.CASE); + assertCachedUri(row.parentRefRelationId, parentRelation); + assertThat(row.objectRefTargetOid).isEqualTo(objectOid); + assertThat(row.objectRefTargetType).isEqualTo(MObjectType.ROLE); + assertCachedUri(row.objectRefRelationId, objectRelation); + assertThat(row.requestorRefTargetOid).isEqualTo(requestorOid); + assertThat(row.requestorRefTargetType).isEqualTo(MObjectType.USER); + assertCachedUri(row.requestorRefRelationId, requestorRelation); + assertThat(row.targetRefTargetOid).isEqualTo(targetOid); + assertThat(row.targetRefTargetType).isEqualTo(MObjectType.ORG); + assertCachedUri(row.targetRefRelationId, targetRelation); + } + // endregion // region delete tests