diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ObjectDeltaUpdaterTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ObjectDeltaUpdaterTest.java index c62ea0bb478..6cc583cb8a2 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ObjectDeltaUpdaterTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ObjectDeltaUpdaterTest.java @@ -116,13 +116,13 @@ public void addLinkRef() throws Exception { ObjectDelta delta = ObjectDelta.createModificationReplaceProperty(UserType.class, oid, UserType.F_GIVEN_NAME, prismContext, new PolyString("asdf", "asdf")); - delta.addModificationAddProperty(new ItemPath(UserType.F_EXTENSION, - new QName("http://example.com/p", "weapon")), "glock"); - - delta.addModificationReplaceProperty(UserType.F_NAME, new PolyString("super name")); - - delta.addModificationReplaceProperty(UserType.F_GIVEN_NAME, new PolyString("one")); - delta.addModificationReplaceProperty(UserType.F_FAMILY_NAME, new PolyString("one")); +// delta.addModificationAddProperty(new ItemPath(UserType.F_EXTENSION, +// new QName("http://example.com/p", "weapon")), "glock"); +// +// delta.addModificationReplaceProperty(UserType.F_NAME, new PolyString("super name")); +// +// delta.addModificationReplaceProperty(UserType.F_GIVEN_NAME, new PolyString("one")); +// delta.addModificationReplaceProperty(UserType.F_FAMILY_NAME, new PolyString("one")); // delta.addModificationAddProperty(UserType.F_EMPLOYEE_TYPE, "one","two"); // delta.addModificationReplaceProperty(new ItemPath(UserType.F_METADATA, MetadataType.F_CREATE_CHANNEL), "asdf"); // delta.addModificationReplaceProperty( @@ -139,15 +139,15 @@ public void addLinkRef() throws Exception { // delta.addModificationDeleteContainer(UserType.F_ASSIGNMENT, ass); -// ObjectReferenceType parentOrgRef = new ObjectReferenceType(); + ObjectReferenceType parentOrgRef = new ObjectReferenceType(); // parentOrgRef.setType(OrgType.COMPLEX_TYPE); // parentOrgRef.setOid("123"); // delta.addModificationDeleteReference(UserType.F_PARENT_ORG_REF, parentOrgRef.asReferenceValue()); // -// parentOrgRef = new ObjectReferenceType(); -// parentOrgRef.setType(OrgType.COMPLEX_TYPE); -// parentOrgRef.setOid("789"); -// delta.addModificationAddReference(UserType.F_PARENT_ORG_REF, parentOrgRef.asReferenceValue()); + parentOrgRef = new ObjectReferenceType(); + parentOrgRef.setType(OrgType.COMPLEX_TYPE); + parentOrgRef.setOid("789"); + delta.addModificationAddReference(UserType.F_PARENT_ORG_REF, parentOrgRef.asReferenceValue()); // todo create modification for metadata/createApproverRef diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtBoolean.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtBoolean.java index c5fd2d8867c..9df313b5f4e 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtBoolean.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtBoolean.java @@ -37,6 +37,8 @@ indexes = {@Index(name = "iAExtensionBoolean", columnNames = {"extensionType", "eName", "booleanValue"})}) public class RAExtBoolean implements RAExtValue { + private Boolean trans; + //owner entity private RAssignmentExtension anyContainer; private String ownerOid; @@ -58,6 +60,17 @@ public RAExtBoolean(Boolean value) { this.value = value; } + @Transient + @Override + public Boolean isTransient() { + return trans; + } + + @Override + public void setTransient(Boolean trans) { + this.trans = trans; + } + @ForeignKey(name = "fk_assignment_ext_boolean") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtDate.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtDate.java index 1b7c7151d7f..050eb413014 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtDate.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtDate.java @@ -38,6 +38,8 @@ indexes = {@Index(name = "iAExtensionDate", columnNames = {"extensionType", "eName", "dateValue"})}) public class RAExtDate implements RAExtValue { + private Boolean trans; + //owner entity private RAssignmentExtension anyContainer; private String ownerOid; @@ -59,6 +61,17 @@ public RAExtDate(Timestamp value) { this.value = value; } + @Transient + @Override + public Boolean isTransient() { + return trans; + } + + @Override + public void setTransient(Boolean trans) { + this.trans = trans; + } + @ForeignKey(name = "fk_assignment_ext_date") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtLong.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtLong.java index a10ab7e2643..715ecad010d 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtLong.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtLong.java @@ -37,6 +37,8 @@ indexes = {@Index(name = "iAExtensionLong", columnNames = {"extensionType", "eName", "longValue"})}) public class RAExtLong implements RAExtValue { + private Boolean trans; + //owner entity private RAssignmentExtension anyContainer; private String ownerOid; @@ -58,6 +60,17 @@ public RAExtLong(Long value) { this.value = value; } + @Transient + @Override + public Boolean isTransient() { + return trans; + } + + @Override + public void setTransient(Boolean trans) { + this.trans = trans; + } + @ForeignKey(name = "fk_assignment_ext_long") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtPolyString.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtPolyString.java index 6ce439d4c5e..20f1b501bd2 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtPolyString.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtPolyString.java @@ -38,6 +38,8 @@ indexes = {@Index(name = "iAExtensionPolyString", columnNames = {"extensionType", "eName", "orig"})}) public class RAExtPolyString implements RAExtValue { + private Boolean trans; + //owner entity private RAssignmentExtension anyContainer; private String ownerOid; @@ -65,6 +67,17 @@ public RAExtPolyString(PolyString polyString) { } } + @Transient + @Override + public Boolean isTransient() { + return trans; + } + + @Override + public void setTransient(Boolean trans) { + this.trans = trans; + } + @ForeignKey(name = "fk_assignment_ext_poly") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtReference.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtReference.java index 3b504580202..170e6eb50e2 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtReference.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtReference.java @@ -40,6 +40,8 @@ indexes = {@Index(name = "iAExtensionReference", columnNames = {"extensionType", "eName", "targetoid"})}) public class RAExtReference implements RAExtValue { + private Boolean trans; + //owner entity private RAssignmentExtension anyContainer; private String ownerOid; @@ -61,6 +63,17 @@ public class RAExtReference implements RAExtValue { public RAExtReference() { } + @Transient + @Override + public Boolean isTransient() { + return trans; + } + + @Override + public void setTransient(Boolean trans) { + this.trans = trans; + } + @ForeignKey(name = "fk_assignment_ext_reference") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtString.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtString.java index 22d5d3cda28..026c4195dfe 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtString.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtString.java @@ -37,6 +37,8 @@ indexes = {@Index(name = "iAExtensionString", columnNames = {"extensionType", "eName", "stringValue"})}) public class RAExtString implements RAExtValue { + private Boolean trans; + //owner entity private RAssignmentExtension anyContainer; private String ownerOid; @@ -58,6 +60,17 @@ public RAExtString(String value) { this.value = value; } + @Transient + @Override + public Boolean isTransient() { + return trans; + } + + @Override + public void setTransient(Boolean trans) { + this.trans = trans; + } + @ForeignKey(name = "fk_assignment_ext_string") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyValue.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyValue.java index c3741e3dfd5..62665f5a838 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyValue.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyValue.java @@ -16,12 +16,14 @@ package com.evolveum.midpoint.repo.sql.data.common.any; +import com.evolveum.midpoint.repo.sql.util.EntityState; + import java.io.Serializable; /** * @author lazyman */ -public interface RAnyValue extends Serializable { +public interface RAnyValue extends Serializable, EntityState { String F_VALUE = "value"; diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtValue.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtValue.java index bf22baeae56..424263896a4 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtValue.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtValue.java @@ -2,12 +2,11 @@ import com.evolveum.midpoint.repo.sql.data.common.RObject; import com.evolveum.midpoint.repo.sql.data.common.type.RObjectExtensionType; -import com.evolveum.midpoint.repo.sql.util.EntityState; /** * @author lazyman */ -public interface ROExtValue extends RAnyValue, EntityState { +public interface ROExtValue extends RAnyValue { String OWNER = "owner"; diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectDeltaUpdater.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectDeltaUpdater.java index 5a4f1a4f231..09baa542851 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectDeltaUpdater.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectDeltaUpdater.java @@ -48,6 +48,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; import java.util.*; import java.util.function.BiConsumer; import java.util.function.BiFunction; @@ -81,7 +82,14 @@ public RObject update(Class type, String oid, Colle return merge(objectToMerge, session); } - // todo how to generate identifiers correctly now? to repo entities and to full xml + // todo how to generate identifiers correctly now? to repo entities and to full xml, ids in full XML are generated on different place than we later create new containers...how to match them + // todo mark newly added containers/references as transient + + // todo set proper owner/ownerOid for containers/references + + // todo implement transformation from prism to entity (PrismEntityMapper) + + // todo replace delta can mark entities as transient RObject object = session.byId(objectToMerge.getClass()).getReference(oid); object.setVersion(objectToMerge.getVersion()); @@ -453,7 +461,13 @@ private Class getRealOutputType(Attribute attribute) { Method method = (Method) attribute.getJavaMember(); ParameterizedType parametrized = (ParameterizedType) method.getGenericReturnType(); - return (Class) parametrized.getActualTypeArguments()[0]; + Type t = parametrized.getActualTypeArguments()[0]; + if (t instanceof Class) { + return (Class) t; + } + + parametrized = (ParameterizedType) t; + return (Class) parametrized.getRawType(); } private Object invoke(Object object, Method method) {