From 974f3f55abdd1d69b26bcfc201f020269bf38a15 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Fri, 9 Feb 2018 16:20:47 +0100 Subject: [PATCH] Normalize definitions in extension tables Here we remove redundant item definition data (name, type, etc) from m_object_ext_XXX and m_assignment_ext_XXX tables. Currently repo tests pass, but provisioning ones do not. Also, there are some unfinished/temporary parts, like storing session into threadlocal variable; we also need to decide whether to implement equals/hashcode for ROExt* and RAExt* classes, etc. --- .../midpoint/repo/sql/DeleteTestSimple.java | 67 +++++++ .../midpoint/repo/sql/ModifyTest.java | 82 ++++++++- .../repo/sql/QueryInterpreter2Test.java | 51 ++++-- .../repo/sql/RAnyConverterStaticTest.java | 2 +- .../midpoint/repo/sql/SchemaTest.java | 1 + .../src/test/resources/basic/user0.xml | 25 +++ .../resources/modify/account-attribute.xml | 33 ++++ .../modify/user-with-assignment-extension.xml | 26 +++ .../src/test/resources/schema/extension.xsd | 68 +++++++ .../repo-sql-impl-test/testng-integration.xml | 1 + .../repo/sql/SqlRepositoryFactory.java | 3 + .../repo/sql/SqlRepositoryServiceImpl.java | 4 + .../repo/sql/data/common/RObject.java | 36 ++-- .../repo/sql/data/common/any/RAExtBase.java | 168 ++++++++++++++++++ .../sql/data/common/any/RAExtBoolean.java | 141 ++------------- .../repo/sql/data/common/any/RAExtDate.java | 139 ++------------- .../repo/sql/data/common/any/RAExtLong.java | 138 ++------------ .../sql/data/common/any/RAExtPolyString.java | 138 ++------------ .../sql/data/common/any/RAExtReference.java | 145 ++------------- .../repo/sql/data/common/any/RAExtString.java | 139 ++------------- .../repo/sql/data/common/any/RAExtValue.java | 2 +- .../repo/sql/data/common/any/RAnyBase.java | 53 ++++++ .../sql/data/common/any/RAnyConverter.java | 48 ++--- .../repo/sql/data/common/any/RAnyValue.java | 12 +- .../data/common/any/RAssignmentExtension.java | 21 ++- .../repo/sql/data/common/any/RExtItem.java | 164 +++++++++++++++++ .../any/{RValueType.java => RItemKind.java} | 43 +++-- .../repo/sql/data/common/any/ROExtBase.java | 88 +++++++++ .../sql/data/common/any/ROExtBoolean.java | 126 ++----------- .../repo/sql/data/common/any/ROExtDate.java | 124 ++----------- .../repo/sql/data/common/any/ROExtLong.java | 122 ++----------- .../sql/data/common/any/ROExtPolyString.java | 125 ++----------- .../sql/data/common/any/ROExtReference.java | 129 ++------------ .../repo/sql/data/common/any/ROExtString.java | 123 +++---------- .../repo/sql/data/common/any/ROExtValue.java | 2 +- .../common/dictionary/ExtItemDictionary.java | 117 ++++++++++++ .../repo/sql/data/common/id/RAExtBaseId.java | 71 ++++++++ .../sql/data/common/id/RAExtBooleanId.java | 56 ++---- .../repo/sql/data/common/id/RAExtDateId.java | 55 ++---- .../repo/sql/data/common/id/RAExtLongId.java | 54 ++---- .../sql/data/common/id/RAExtPolyStringId.java | 51 ++---- .../sql/data/common/id/RAExtReferenceId.java | 51 ++---- .../sql/data/common/id/RAExtStringId.java | 51 ++---- .../repo/sql/data/common/id/ROExtBaseId.java | 73 ++++++++ .../sql/data/common/id/ROExtBooleanId.java | 52 ++---- .../repo/sql/data/common/id/ROExtDateId.java | 51 ++---- .../repo/sql/data/common/id/ROExtLongId.java | 51 ++---- .../sql/data/common/id/ROExtPolyStringId.java | 52 ++---- .../sql/data/common/id/ROExtReferenceId.java | 52 ++---- .../sql/data/common/id/ROExtStringId.java | 52 ++---- .../midpoint/repo/sql/helpers/BaseHelper.java | 3 + .../repo/sql/helpers/ObjectDeltaUpdater.java | 2 +- .../repo/sql/helpers/ObjectRetriever.java | 8 +- .../repo/sql/helpers/ObjectUpdater.java | 6 +- .../query2/resolution/ItemPathResolver.java | 2 +- 55 files changed, 1598 insertions(+), 1901 deletions(-) create mode 100644 repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/DeleteTestSimple.java create mode 100644 repo/repo-sql-impl-test/src/test/resources/basic/user0.xml create mode 100644 repo/repo-sql-impl-test/src/test/resources/modify/account-attribute.xml create mode 100644 repo/repo-sql-impl-test/src/test/resources/modify/user-with-assignment-extension.xml create mode 100644 repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtBase.java create mode 100644 repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyBase.java create mode 100644 repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RExtItem.java rename repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/{RValueType.java => RItemKind.java} (61%) create mode 100644 repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtBase.java create mode 100644 repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/dictionary/ExtItemDictionary.java create mode 100644 repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtBaseId.java create mode 100644 repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtBaseId.java diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/DeleteTestSimple.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/DeleteTestSimple.java new file mode 100644 index 00000000000..846ae7676e7 --- /dev/null +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/DeleteTestSimple.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2010-2018 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.repo.sql; + +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.testng.annotations.Test; + +import java.io.File; + +/** + * @author mederly + */ +@ContextConfiguration(locations = {"../../../../../ctx-test.xml"}) +@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) +public class DeleteTestSimple extends BaseSQLRepoTest { + + private static final Trace LOGGER = TraceManager.getTrace(DeleteTestSimple.class); + + @Test + public void delete001() throws Exception { + PrismObject user = prismContext.parseObject(new File(FOLDER_BASIC, "user0.xml")); + + OperationResult result = new OperationResult("Delete Test"); + String oid = repositoryService.addObject(user, null, result); + LOGGER.info("*** deleteObject ***"); + + // Session session = open(); + // CriteriaQuery aQ = session.getCriteriaBuilder().createQuery(RAssignment.class); + // aQ.select(aQ.from(RAssignment.class)); + // List aList = session.createQuery(aQ).getResultList(); + // System.out.println("RAssignment: " + aList); + // + // CriteriaQuery aeQ = session.getCriteriaBuilder().createQuery(RAssignmentExtension.class); + // aeQ.select(aeQ.from(RAssignmentExtension.class)); + // List aeList = session.createQuery(aeQ).getResultList(); + // System.out.println("RAssignmentExtension: " + aeList); + // + // CriteriaQuery aebQ = session.getCriteriaBuilder().createQuery(RAExtBoolean.class); + // aebQ.select(aebQ.from(RAExtBoolean.class)); + // List aebList = session.createQuery(aebQ).getResultList(); + // System.out.println("RAExtBoolean: " + aebList); + // + // session.getTransaction().commit(); + + repositoryService.deleteObject(UserType.class, oid, result); + } +} diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyTest.java index caf4935502f..0d6b882f2fc 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/ModifyTest.java @@ -83,6 +83,9 @@ public class ModifyTest extends BaseSQLRepoTest { private static final Trace LOGGER = TraceManager.getTrace(ModifyTest.class); + private static final QName QNAME_LOOT = new QName("http://example.com/p", "loot"); + private static final QName QNAME_WEAPON = new QName("http://example.com/p", "weapon"); + @BeforeSuite public void setup() throws SchemaException, SAXException, IOException { PrettyPrinter.setDefaultNamespacePrefix(MidPointConstants.NS_MIDPOINT_PUBLIC_PREFIX); @@ -497,8 +500,6 @@ public void test130ExtensionModify() throws Exception { final String TEST_NAME = "test130ExtensionModify"; TestUtil.displayTestTitle(TEST_NAME); - final QName QNAME_LOOT = new QName("http://example.com/p", "loot"); - File userFile = new File(TEST_DIR, "user-with-extension.xml"); //add first user PrismObject user = prismContext.parseObject(userFile); @@ -593,6 +594,83 @@ public void test140ModifyAccountSynchronizationSituation() throws Exception { System.out.println("shadow: " + shadows.get(0).debugDump()); } + private String accountOid; + + @Test + public void test142ModifyAccountAttributeSameValue() throws Exception { + final String TEST_NAME = "test142ModifyAccountAttributeSameValue"; + TestUtil.displayTestTitle(TEST_NAME); + + OperationResult result = new OperationResult(TEST_NAME); + + PrismObject account = prismContext.parseObject(new File(TEST_DIR, "account-attribute.xml")); + repositoryService.addObject(account, null, result); + accountOid = account.getOid(); + + PrismPropertyDefinition definition = new PrismPropertyDefinitionImpl<>(SchemaConstants.ICFS_NAME, DOMUtil.XSD_STRING, prismContext); + + List> itemDeltas = DeltaBuilder.deltaFor(ShadowType.class, prismContext) + .item(new ItemPath(ShadowType.F_ATTRIBUTES, SchemaConstants.ICFS_NAME), definition) + .replace("account123") + .asItemDeltas(); + + repositoryService.modifyObject(ShadowType.class, accountOid, itemDeltas, getModifyOptions(), result); + + PrismObject afterModify = repositoryService.getObject(ShadowType.class, accountOid, null, result); + AssertJUnit.assertNotNull(afterModify); + ShadowType afterFirstModifyType = afterModify.asObjectable(); + System.out.println("shadow: " + afterModify.debugDump()); + } + + @Test + public void test144ModifyAccountAttributeDifferent() throws Exception { + final String TEST_NAME = "test144ModifyAccountAttributeDifferent"; + TestUtil.displayTestTitle(TEST_NAME); + + OperationResult result = new OperationResult(TEST_NAME); + + assertNotNull("account-attribute was not imported in previous tests", accountOid); + + PrismPropertyDefinition definition = new PrismPropertyDefinitionImpl<>(SchemaConstants.ICFS_NAME, DOMUtil.XSD_STRING, prismContext); + + List> itemDeltas = DeltaBuilder.deltaFor(ShadowType.class, prismContext) + .item(new ItemPath(ShadowType.F_ATTRIBUTES, SchemaConstants.ICFS_NAME), definition) + .replace("account-new") + .asItemDeltas(); + + repositoryService.modifyObject(ShadowType.class, accountOid, itemDeltas, getModifyOptions(), result); + + PrismObject afterModify = repositoryService.getObject(ShadowType.class, accountOid, null, result); + AssertJUnit.assertNotNull(afterModify); + ShadowType afterFirstModifyType = afterModify.asObjectable(); + System.out.println("shadow: " + afterModify.debugDump()); + } + + @Test + public void test148ModifyAssignmentExtension() throws Exception { + final String TEST_NAME = "test148ModifyAssignmentExtension"; + TestUtil.displayTestTitle(TEST_NAME); + + OperationResult result = new OperationResult(TEST_NAME); + + PrismObject user = prismContext.parseObject(new File(TEST_DIR, "user-with-assignment-extension.xml")); + repositoryService.addObject(user, null, result); + + PrismPropertyDefinition definition = new PrismPropertyDefinitionImpl<>(QNAME_WEAPON, DOMUtil.XSD_STRING, prismContext); + + List> itemDeltas = DeltaBuilder.deltaFor(UserType.class, prismContext) + .item(new ItemPath(UserType.F_ASSIGNMENT, 1, AssignmentType.F_EXTENSION, QNAME_WEAPON), definition) + .replace("knife") + .asItemDeltas(); + + repositoryService.modifyObject(UserType.class, user.getOid(), itemDeltas, getModifyOptions(), result); + + PrismObject afterModify = repositoryService.getObject(UserType.class, user.getOid(), null, result); + AssertJUnit.assertNotNull(afterModify); + UserType afterFirstModifyType = afterModify.asObjectable(); + System.out.println("user: " + afterModify.debugDump()); + } + private String roleOid; @Test diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/QueryInterpreter2Test.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/QueryInterpreter2Test.java index d6dee4e87ec..f1a3955af4e 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/QueryInterpreter2Test.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/QueryInterpreter2Test.java @@ -23,6 +23,10 @@ import com.evolveum.midpoint.prism.schema.SchemaRegistry; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; +import com.evolveum.midpoint.repo.sql.data.common.any.RAExtBoolean; +import com.evolveum.midpoint.repo.sql.data.common.any.RAssignmentExtension; +import com.evolveum.midpoint.repo.sql.data.common.any.RExtItem; +import com.evolveum.midpoint.repo.sql.data.common.container.RAssignment; import com.evolveum.midpoint.repo.sql.query.QueryException; import com.evolveum.midpoint.repo.sql.query.RQuery; import com.evolveum.midpoint.repo.sql.query2.QueryEngine2; @@ -59,6 +63,7 @@ import org.testng.annotations.Test; import org.xml.sax.SAXException; +import javax.persistence.criteria.CriteriaQuery; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; import java.io.File; @@ -497,7 +502,7 @@ public void test070QueryGenericLong() throws Exception { " g.oid, g.fullObject, g.stringsCount, g.longsCount, g.datesCount, g.referencesCount, g.polysCount, g.booleansCount\n" + "from\n" + " RGenericObject g\n" + - " left join g.longs l with ( l.ownerType = :ownerType and l.name = :name )\n" + + " left join g.longs l with ( l.ownerType = :ownerType and l.item.name = :name )\n" + "where\n" + " ( g.name.norm = :norm and l.value = :value )\n"; @@ -528,8 +533,8 @@ public void test071QueryGenericLongTwice() throws Exception { " g.oid, g.fullObject, g.stringsCount, g.longsCount, g.datesCount, g.referencesCount, g.polysCount, g.booleansCount\n" + "from\n" + " RGenericObject g\n" + - " left join g.longs l with ( l.ownerType = :ownerType and l.name = :name )\n" + - " left join g.longs l2 with ( l2.ownerType = :ownerType2 and l2.name = :name2 )\n" + + " left join g.longs l with ( l.ownerType = :ownerType and l.item.name = :name )\n" + + " left join g.longs l2 with ( l2.ownerType = :ownerType2 and l2.item.name = :name2 )\n" + "where\n" + " (\n" + " g.name.norm = :norm and\n" + @@ -558,7 +563,7 @@ public void test072QueryAccountByAttribute() throws Exception { " s.oid, s.fullObject, s.stringsCount, s.longsCount, s.datesCount, s.referencesCount, s.polysCount, s.booleansCount\n" + "from\n" + " RShadow s\n" + - " left join s.strings s2 with ( s2.ownerType = :ownerType and s2.name = :name )\n" + + " left join s.strings s2 with ( s2.ownerType = :ownerType and s2.item.name = :name )\n" + "where\n" + " s2.value = :value\n"; assertEqualsIgnoreWhitespace(expected, real); @@ -578,8 +583,8 @@ public void test074QueryAccountByAttributeAndExtensionValue() throws Exception { " s.oid, s.fullObject, s.stringsCount, s.longsCount, s.datesCount, s.referencesCount, s.polysCount, s.booleansCount\n" + "from\n" + " RShadow s\n" + - " left join s.strings s2 with ( s2.ownerType = :ownerType and s2.name = :name )\n" + - " left join s.longs l with ( l.ownerType = :ownerType2 and l.name = :name2 )\n" + + " left join s.strings s2 with ( s2.ownerType = :ownerType and s2.item.name = :name )\n" + + " left join s.longs l with ( l.ownerType = :ownerType2 and l.item.name = :name2 )\n" + "where\n" + " (\n" + " s2.value = :value and\n" + @@ -621,8 +626,8 @@ public void test076QueryOrComposite() throws Exception { " s.oid, s.fullObject, s.stringsCount, s.longsCount, s.datesCount, s.referencesCount, s.polysCount, s.booleansCount\n" + "from\n" + " RShadow s\n" + - " left join s.strings s2 with ( s2.ownerType = :ownerType and s2.name = :name )\n" + - " left join s.strings s3 with ( s3.ownerType = :ownerType2 and s3.name = :name2 )\n" + + " left join s.strings s2 with ( s2.ownerType = :ownerType and s2.item.name = :name )\n" + + " left join s.strings s3 with ( s3.ownerType = :ownerType2 and s3.item.name = :name2 )\n" + "where\n" + " (\n" + " s.intent = :intent or\n" + @@ -1098,7 +1103,7 @@ public void test130QueryAccountByAttributesAndResourceRef() throws Exception { " s.booleansCount\n" + "from\n" + " RShadow s\n" + - " left join s.strings s2 with ( s2.ownerType = :ownerType and s2.name = :name )\n" + + " left join s.strings s2 with ( s2.ownerType = :ownerType and s2.item.name = :name )\n" + "where\n" + " (\n" + " (\n" + @@ -2690,7 +2695,7 @@ public void test580QueryObjectypeByTypeAndExtensionAttribute() throws Exception " o.booleansCount\n" + "from\n" + " RObject o\n" + - " left join o.strings s with ( s.ownerType = :ownerType and s.name = :name )\n" + + " left join o.strings s with ( s.ownerType = :ownerType and s.item.name = :name )\n" + "where\n" + " (\n" + " o.objectTypeClass = :objectTypeClass and\n" + @@ -2961,7 +2966,7 @@ public void test620QueryGenericString() throws Exception { " g.booleansCount\n" + "from\n" + " RGenericObject g\n" + - " left join g.strings s with ( s.ownerType = :ownerType and s.name = :name )\n" + + " left join g.strings s with ( s.ownerType = :ownerType and s.item.name = :name )\n" + "where\n" + " s.value = :value\n"; assertEqualsIgnoreWhitespace(expected, real); @@ -3034,7 +3039,7 @@ public void test630QueryGenericBoolean() throws Exception { " g.booleansCount\n" + "from\n" + " RGenericObject g\n" + - " left join g.booleans b with ( b.ownerType = :ownerType and b.name = :name )\n" + + " left join g.booleans b with ( b.ownerType = :ownerType and b.item.name = :name )\n" + "where\n" + " b.value = :value\n"; @@ -3090,11 +3095,27 @@ public void test640queryAssignmentExtensionBoolean() throws Exception { " RUser u\n" + " left join u.assignments a with a.assignmentOwner = :assignmentOwner\n" + " left join a.extension e\n" + - " left join e.booleans b with b.name = :name\n" + + " left join e.booleans b with b.item.name = :name\n" + "where\n" + " b.value = :value"; assertEqualsIgnoreWhitespace(expected, real); + // include dependency on for this code org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile +// CriteriaQuery aQ = session.getCriteriaBuilder().createQuery(RAssignment.class); +// aQ.select(aQ.from(RAssignment.class)); +// List aList = session.createQuery(aQ).getResultList(); +// System.out.println("RAssignment: " + aList); +// +// CriteriaQuery aeQ = session.getCriteriaBuilder().createQuery(RAssignmentExtension.class); +// aeQ.select(aeQ.from(RAssignmentExtension.class)); +// List aeList = session.createQuery(aeQ).getResultList(); +// System.out.println("RAssignmentExtension: " + aeList); +// +// CriteriaQuery aebQ = session.getCriteriaBuilder().createQuery(RAExtBoolean.class); +// aebQ.select(aebQ.from(RAExtBoolean.class)); +// List aebList = session.createQuery(aebQ).getResultList(); +// System.out.println("RAExtBoolean: " + aebList); +// OperationResult result = new OperationResult("search"); List> objects = repositoryService.searchObjects(UserType.class, objectQuery, null, result); @@ -3137,7 +3158,7 @@ public void test650QueryExtensionEnum() throws Exception { + " RUser u\n" + " left join u.strings s with (\n" + " s.ownerType = :ownerType and\n" - + " s.name = :name\n" + + " s.item.name = :name\n" + ")\n" + "where\n" + " s.value = :value\n"; @@ -3168,7 +3189,7 @@ public void test660QueryExtensionRef() throws Exception { + " RGenericObject g\n" + " left join g.references r with (\n" + " r.ownerType = :ownerType and\n" - + " r.name = :name\n" + + " r.item.name = :name\n" + " )\n" + "where\n" + " (\n" diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/RAnyConverterStaticTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/RAnyConverterStaticTest.java index a26c310efcb..09233ecb398 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/RAnyConverterStaticTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/RAnyConverterStaticTest.java @@ -196,7 +196,7 @@ public void testExtensionEnum() throws Exception { RAnyConverter converter = new RAnyConverter(prismContext); - Set values = converter.convertToRValue(item, false); + Set> values = converter.convertToRValue(item, false, session); AssertJUnit.assertEquals("Expected only one enum value, but was " + values.size(), 1, values.size()); diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SchemaTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SchemaTest.java index 925b3b4969e..457b9c6b972 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SchemaTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/SchemaTest.java @@ -71,6 +71,7 @@ private void createSQLSchema(String fileName, String dialect) { SchemaExport export = new SchemaExport(); export.setOutputFile(fileName); export.setDelimiter(";"); + export.setFormat(true); export.execute(EnumSet.of(TargetType.SCRIPT), SchemaExport.Action.CREATE, metadata.buildMetadata()); } diff --git a/repo/repo-sql-impl-test/src/test/resources/basic/user0.xml b/repo/repo-sql-impl-test/src/test/resources/basic/user0.xml new file mode 100644 index 00000000000..22648a93def --- /dev/null +++ b/repo/repo-sql-impl-test/src/test/resources/basic/user0.xml @@ -0,0 +1,25 @@ + + + + + user0 + + + true + + + \ No newline at end of file diff --git a/repo/repo-sql-impl-test/src/test/resources/modify/account-attribute.xml b/repo/repo-sql-impl-test/src/test/resources/modify/account-attribute.xml new file mode 100644 index 00000000000..07fe13eee87 --- /dev/null +++ b/repo/repo-sql-impl-test/src/test/resources/modify/account-attribute.xml @@ -0,0 +1,33 @@ + + + + + account-attribute + + ri:AccountObjectClass + account + + account123 + + + enabled + + diff --git a/repo/repo-sql-impl-test/src/test/resources/modify/user-with-assignment-extension.xml b/repo/repo-sql-impl-test/src/test/resources/modify/user-with-assignment-extension.xml new file mode 100644 index 00000000000..f5e53cd6a69 --- /dev/null +++ b/repo/repo-sql-impl-test/src/test/resources/modify/user-with-assignment-extension.xml @@ -0,0 +1,26 @@ + + + + + user-with-assignment-extension + + + gun + + + + diff --git a/repo/repo-sql-impl-test/src/test/resources/schema/extension.xsd b/repo/repo-sql-impl-test/src/test/resources/schema/extension.xsd index 08088290ca2..7a948f45004 100644 --- a/repo/repo-sql-impl-test/src/test/resources/schema/extension.xsd +++ b/repo/repo-sql-impl-test/src/test/resources/schema/extension.xsd @@ -189,4 +189,72 @@ + + + + + + + + + + + true + Weapon + 120 + The tool of mass slaughter + + + + + + + true + Ship Name + 100 + Name of yar scurvy vessel + + + + + + + false + Loot + 150 + KEY_LOOT + + + + + + + Funeral + 160 + Dead men tell no tales + + + + + + + true + + + + + + + true + Ssh Public Key + 119 + + + + + + + + + diff --git a/repo/repo-sql-impl-test/testng-integration.xml b/repo/repo-sql-impl-test/testng-integration.xml index 5725ed818ac..00e9123556d 100644 --- a/repo/repo-sql-impl-test/testng-integration.xml +++ b/repo/repo-sql-impl-test/testng-integration.xml @@ -29,6 +29,7 @@ + diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryFactory.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryFactory.java index ff3e19c40a7..c5a56b5ce96 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryFactory.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryFactory.java @@ -19,6 +19,7 @@ import com.evolveum.midpoint.repo.api.RepositoryService; import com.evolveum.midpoint.repo.api.RepositoryServiceFactory; import com.evolveum.midpoint.repo.api.RepositoryServiceFactoryException; +import com.evolveum.midpoint.repo.sql.data.common.dictionary.ExtItemDictionary; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import org.apache.commons.configuration.Configuration; @@ -138,6 +139,8 @@ public synchronized void init(Configuration configuration) throws RepositoryServ performanceMonitor = new SqlPerformanceMonitor(); performanceMonitor.initialize(this); + ExtItemDictionary.getInstance().initialize(); + LOGGER.info("Repository initialization finished."); initialized = true; diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryServiceImpl.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryServiceImpl.java index cfb8bda8e7a..e35ddbfe43d 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryServiceImpl.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/SqlRepositoryServiceImpl.java @@ -52,6 +52,7 @@ import com.evolveum.midpoint.schema.util.ObjectQueryUtil; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.schema.util.SystemConfigurationTypeUtil; +import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.PrettyPrinter; import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.util.exception.CommunicationException; @@ -557,6 +558,9 @@ public void modifyObject(Class type, String oid, Colle pm.registerOperationNewAttempt(opHandle, attempt); } } + } catch (Throwable t) { + LOGGER.debug("Got exception while processing modifications on {}:{}:\n{}", type.getSimpleName(), oid, DebugUtil.debugDump(modifications), t); + throw t; } finally { pm.registerOperationFinish(opHandle, attempt); } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/RObject.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/RObject.java index 29555a874f8..eda649e6ab0 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/RObject.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/RObject.java @@ -94,12 +94,12 @@ @NamedQuery(name = "existOrgClosure", query = "select count(*) from ROrgClosure as o where o.ancestorOid = :ancestorOid and o.descendantOid = :descendantOid"), @NamedQuery(name = "sqlDeleteOrgClosure", query = "delete from ROrgClosure as o where o.descendantOid = :oid or o.ancestorOid = :oid"), @NamedQuery(name = "listResourceObjectShadows", query = "select s.oid, s.fullObject, s.stringsCount, s.longsCount, s.datesCount, s.referencesCount, s.polysCount, s.booleansCount from RShadow as s left join s.resourceRef as ref where ref.targetOid = :oid"), - @NamedQuery(name = "getDefinition.ROExtDate", query = "select c.name, c.type, c.valueType from ROExtDate as c where c.ownerOid = :oid and c.ownerType = :ownerType"), - @NamedQuery(name = "getDefinition.ROExtString", query = "select c.name, c.type, c.valueType from ROExtString as c where c.ownerOid = :oid and c.ownerType = :ownerType"), - @NamedQuery(name = "getDefinition.ROExtPolyString", query = "select c.name, c.type, c.valueType from ROExtPolyString as c where c.ownerOid = :oid and c.ownerType = :ownerType"), - @NamedQuery(name = "getDefinition.ROExtLong", query = "select c.name, c.type, c.valueType from ROExtLong as c where c.ownerOid = :oid and c.ownerType = :ownerType"), - @NamedQuery(name = "getDefinition.ROExtReference", query = "select c.name, c.type, c.valueType from ROExtReference as c where c.ownerOid = :oid and c.ownerType = :ownerType"), - @NamedQuery(name = "getDefinition.ROExtBoolean", query = "select c.name, c.type, c.valueType from ROExtBoolean as c where c.ownerOid = :oid and c.ownerType = :ownerType"), + @NamedQuery(name = "getDefinition.ROExtDate", query = "select c.item.name, c.item.type, c.item.kind from ROExtDate as c where c.owner.oid = :oid and c.ownerType = :ownerType"), + @NamedQuery(name = "getDefinition.ROExtString", query = "select c.item.name, c.item.type, c.item.kind from ROExtString as c where c.owner.oid = :oid and c.ownerType = :ownerType"), + @NamedQuery(name = "getDefinition.ROExtPolyString", query = "select c.item.name, c.item.type, c.item.kind from ROExtPolyString as c where c.owner.oid = :oid and c.ownerType = :ownerType"), + @NamedQuery(name = "getDefinition.ROExtLong", query = "select c.item.name, c.item.type, c.item.kind from ROExtLong as c where c.owner.oid = :oid and c.ownerType = :ownerType"), + @NamedQuery(name = "getDefinition.ROExtReference", query = "select c.item.name, c.item.type, c.item.kind from ROExtReference as c where c.owner.oid = :oid and c.ownerType = :ownerType"), + @NamedQuery(name = "getDefinition.ROExtBoolean", query = "select c.item.name, c.item.type, c.item.kind from ROExtBoolean as c where c.owner.oid = :oid and c.ownerType = :ownerType"), @NamedQuery(name = "isAnySubordinateAttempt.oneLowerOid", query = "select count(*) from ROrgClosure o where o.ancestorOid=:aOid and o.descendantOid=:dOid"), @NamedQuery(name = "isAnySubordinateAttempt.moreLowerOids", query = "select count(*) from ROrgClosure o where o.ancestorOid=:aOid and o.descendantOid in (:dOids)"), @NamedQuery(name = "get.lookupTableLastId", query = "select max(r.id) from RLookupTableRow r where r.ownerOid = :oid"), @@ -729,40 +729,40 @@ public String toString() { return RUtil.getDebugString(this); } - public static void copyFromJAXB(PrismContainerValue containerValue, RObject repo, RepositoryContext repositoryContext, + public static void copyFromJAXB(PrismContainerValue containerValue, RObject repo, RepositoryContext repositoryContext, RObjectExtensionType ownerType) throws DtoTranslationException { RAnyConverter converter = new RAnyConverter(repositoryContext.prismContext); - Set values = new HashSet(); + Set> values = new HashSet<>(); try { List> items = containerValue.getItems(); //TODO: is this enough? should we try items without definitions? if (items != null) { - for (Item item : items) { - values.addAll(converter.convertToRValue(item, false)); + for (Item item : items) { + values.addAll(converter.convertToRValue(item, false, null)); } } } catch (Exception ex) { throw new DtoTranslationException(ex.getMessage(), ex); } - for (RAnyValue value : values) { - ROExtValue ex = (ROExtValue) value; + for (RAnyValue value : values) { + ROExtValue ex = (ROExtValue) value; ex.setOwner(repo); ex.setOwnerType(ownerType); if (value instanceof ROExtDate) { - repo.getDates().add(value); + repo.getDates().add((ROExtDate) value); } else if (value instanceof ROExtLong) { - repo.getLongs().add(value); + repo.getLongs().add((ROExtLong) value); } else if (value instanceof ROExtReference) { - repo.getReferences().add(value); + repo.getReferences().add((ROExtReference) value); } else if (value instanceof ROExtString) { - repo.getStrings().add(value); + repo.getStrings().add((ROExtString) value); } else if (value instanceof ROExtPolyString) { - repo.getPolys().add(value); + repo.getPolys().add((ROExtPolyString) value); } else if (value instanceof ROExtBoolean) { - repo.getBooleans().add(value); + repo.getBooleans().add((ROExtBoolean) value); } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtBase.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtBase.java new file mode 100644 index 00000000000..8199adf61b5 --- /dev/null +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtBase.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2010-2018 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.repo.sql.data.common.any; + +import com.evolveum.midpoint.repo.sql.data.common.type.RAssignmentExtensionType; + +import java.util.Objects; + +abstract public class RAExtBase extends RAnyBase implements RAExtValue { + + private Boolean trans; + + //owner entity + private RAssignmentExtension anyContainer; + private String ownerOid; + private Integer ownerId; + + private RAssignmentExtensionType extensionType; + + public String getOwnerOid() { + if (ownerOid == null && anyContainer != null) { + ownerOid = anyContainer.getOwnerOid(); + } + return ownerOid; + } + + public void setOwnerOid(String ownerOid) { + this.ownerOid = ownerOid; + } + + public Integer getOwnerId() { + if (ownerId == null && anyContainer != null) { + ownerId = anyContainer.getOwnerId(); + } + return ownerId; + } + + public void setOwnerId(Integer ownerId) { + this.ownerId = ownerId; + } + + @Override + public Boolean isTransient() { + return trans; + } + + @Override + public void setTransient(Boolean trans) { + this.trans = trans; + } + + @Override + public RAssignmentExtension getAnyContainer() { + return anyContainer; + } + +// @Transient +// public String getAssignmentOwnerOid() { +// return anyContainer != null ? anyContainer.getAssignmentOwnerOid() : null; +// } + +// @Transient +// public Integer getAssignmentId() { +// return anyContainer != null ? anyContainer.getAssignmentId() : null; +// } + + @Override + public void setAnyContainer(RAssignmentExtension anyContainer) { + this.anyContainer = anyContainer; + } + + @Override + public RAssignmentExtensionType getExtensionType() { + return extensionType; + } + + @Override + public void setExtensionType(RAssignmentExtensionType extensionType) { + this.extensionType = extensionType; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof RAExtBase)) + return false; + if (!super.equals(o)) + return false; + RAExtBase raExtBase = (RAExtBase) o; + return /*Objects.equals(getAssignmentOwnerOid(), raExtBase.getAssignmentOwnerOid()) && + Objects.equals(getAssignmentId(), raExtBase.getAssignmentId()) && */ + getExtensionType() == raExtBase.getExtensionType(); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), /*getAssignmentOwnerOid(), getAssignmentId(), */ getExtensionType()); + } + + @Override + public String toString() { + return getClass().getSimpleName() + "{" + + "item=" + getItem() + + ", value=" + getValue() + + '}'; + } + + // public RObject getOwner() { + // return owner; + // } + // + // public String getOwnerOid() { + // if (ownerOid == null && owner != null) { + // ownerOid = owner.getOid(); + // } + // return ownerOid; + // } + // + // public RObjectExtensionType getOwnerType() { + // return ownerType; + // } + // + // public void setOwner(RObject owner) { + // this.owner = owner; + // } + // + // public void setOwnerOid(String ownerOid) { + // this.ownerOid = ownerOid; + // } + // + // public void setOwnerType(RObjectExtensionType ownerType) { + // this.ownerType = ownerType; + // } + // + // @Override + // public boolean equals(Object o) { + // if (this == o) + // return true; + // if (!(o instanceof RAExtBase)) + // return false; + // if (!super.equals(o)) + // return false; + // RAExtBase roExtBase = (RAExtBase) o; + // return Objects.equals(getOwnerOid(), roExtBase.getOwnerOid()) && + // getOwnerType() == roExtBase.getOwnerType() && + // Objects.equals(getItem(), roExtBase.getItem()); + // } + // + // @Override + // public int hashCode() { + // return Objects.hash(super.hashCode(), getOwnerOid(), getOwnerType(), getItem()); + // } +} 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 9df313b5f4e..55c3d76eb86 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 @@ -33,23 +33,9 @@ @Entity @IdClass(RAExtBooleanId.class) @Table(name = "m_assignment_ext_boolean") -@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_boolean", - indexes = {@Index(name = "iAExtensionBoolean", columnNames = {"extensionType", "eName", "booleanValue"})}) -public class RAExtBoolean implements RAExtValue { - - private Boolean trans; - - //owner entity - private RAssignmentExtension anyContainer; - private String ownerOid; - private Integer ownerId; - - private RAssignmentExtensionType extensionType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; +@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_boolean" + /*, indexes = {@Index(name = "iAExtensionBoolean", columnNames = {"extensionType", "eName", "booleanValue"})} */) +public class RAExtBoolean extends RAExtBase implements RAExtValue { private Boolean value; @@ -60,18 +46,7 @@ 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") + @ForeignKey(name = "fk_a_ext_boolean_owner") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @PrimaryKeyJoinColumns({ @@ -80,59 +55,37 @@ public void setTransient(Boolean trans) { }) @NotQueryable public RAssignmentExtension getAnyContainer() { - return anyContainer; + return super.getAnyContainer(); } @Id - @Column(name = "anyContainer_owner_owner_oid", length = RUtil.COLUMN_LENGTH_OID) + @Column(name = "anyContainer_owner_owner_oid", length = RUtil.COLUMN_LENGTH_OID, insertable = false, updatable = false) @NotQueryable public String getOwnerOid() { - if (ownerOid == null && anyContainer != null) { - ownerOid = anyContainer.getOwnerOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id - @Column(name = "anyContainer_owner_id") + @Column(name = "anyContainer_owner_id", insertable = false, updatable = false) @NotQueryable public Integer getOwnerId() { - if (ownerId == null && anyContainer != null) { - ownerId = anyContainer.getOwnerId(); - } - return ownerId; - } - - @Id - @Enumerated(EnumType.ORDINAL) - public RAssignmentExtensionType getExtensionType() { - return extensionType; + return super.getOwnerId(); } @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; - } - - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; + @Column(name = "item_id", updatable = false, insertable = false) + public Integer getItemId() { + return super.getItemId(); } - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_a_ext_boolean_item")) + public RExtItem getItem() { + return super.getItem(); } + @Id @Column(name = "booleanValue") public Boolean getValue() { return value; @@ -141,62 +94,4 @@ public Boolean getValue() { public void setValue(Boolean value) { this.value = value; } - - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setAnyContainer(RAssignmentExtension anyContainer) { - this.anyContainer = anyContainer; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; - } - - public void setExtensionType(RAssignmentExtensionType extensionType) { - this.extensionType = extensionType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - RAExtBoolean that = (RAExtBoolean) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (valueType != that.valueType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - return result; - } } 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 050eb413014..68951f07bc5 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 @@ -17,12 +17,10 @@ package com.evolveum.midpoint.repo.sql.data.common.any; import com.evolveum.midpoint.repo.sql.data.common.id.RAExtDateId; -import com.evolveum.midpoint.repo.sql.data.common.type.RAssignmentExtensionType; import com.evolveum.midpoint.repo.sql.helpers.modify.Ignore; import com.evolveum.midpoint.repo.sql.query2.definition.NotQueryable; import com.evolveum.midpoint.repo.sql.util.RUtil; import org.hibernate.annotations.ForeignKey; -import org.hibernate.annotations.Index; import javax.persistence.*; import java.sql.Timestamp; @@ -34,23 +32,10 @@ @Entity @IdClass(RAExtDateId.class) @Table(name = "m_assignment_ext_date") -@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_date", - indexes = {@Index(name = "iAExtensionDate", columnNames = {"extensionType", "eName", "dateValue"})}) -public class RAExtDate implements RAExtValue { - - private Boolean trans; - - //owner entity - private RAssignmentExtension anyContainer; - private String ownerOid; - private Integer ownerId; - - private RAssignmentExtensionType extensionType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; +@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_date" + /*, + indexes = {@Index(name = "iAExtensionDate", columnNames = {"extensionType", "eName", "dateValue"})} */) +public class RAExtDate extends RAExtBase implements RAExtValue { private Timestamp value; @@ -61,18 +46,7 @@ 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") + @ForeignKey(name = "fk_a_ext_date_owner") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @PrimaryKeyJoinColumns({ @@ -81,57 +55,34 @@ public void setTransient(Boolean trans) { }) @NotQueryable public RAssignmentExtension getAnyContainer() { - return anyContainer; + return super.getAnyContainer(); } @Id @Column(name = "anyContainer_owner_owner_oid", length = RUtil.COLUMN_LENGTH_OID) @NotQueryable public String getOwnerOid() { - if (ownerOid == null && anyContainer != null) { - ownerOid = anyContainer.getOwnerOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "anyContainer_owner_id") @NotQueryable public Integer getOwnerId() { - if (ownerId == null && anyContainer != null) { - ownerId = anyContainer.getOwnerId(); - } - return ownerId; + return super.getOwnerId(); } @Id - @Enumerated(EnumType.ORDINAL) - public RAssignmentExtensionType getExtensionType() { - return extensionType; + @Column(name = "item_id", updatable = false, insertable = false) + public Integer getItemId() { + return super.getItemId(); } - @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; - } - - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; - } - - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_a_ext_date_item")) + public RExtItem getItem() { + return super.getItem(); } @Column(name = "dateValue") @@ -142,62 +93,4 @@ public Timestamp getValue() { public void setValue(Timestamp value) { this.value = value; } - - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setAnyContainer(RAssignmentExtension anyContainer) { - this.anyContainer = anyContainer; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; - } - - public void setExtensionType(RAssignmentExtensionType extensionType) { - this.extensionType = extensionType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - RAExtDate that = (RAExtDate) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (valueType != that.valueType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - return result; - } } 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 715ecad010d..126d37fe9e6 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 @@ -33,23 +33,10 @@ @Entity @IdClass(RAExtLongId.class) @Table(name = "m_assignment_ext_long") -@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_long", - indexes = {@Index(name = "iAExtensionLong", columnNames = {"extensionType", "eName", "longValue"})}) -public class RAExtLong implements RAExtValue { - - private Boolean trans; - - //owner entity - private RAssignmentExtension anyContainer; - private String ownerOid; - private Integer ownerId; - - private RAssignmentExtensionType extensionType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; +@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_long" + /*, + indexes = {@Index(name = "iAExtensionLong", columnNames = {"extensionType", "eName", "longValue"})} */) +public class RAExtLong extends RAExtBase implements RAExtValue { private Long value; @@ -60,18 +47,7 @@ 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") + @ForeignKey(name = "fk_a_ext_long_owner") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @PrimaryKeyJoinColumns({ @@ -80,59 +56,37 @@ public void setTransient(Boolean trans) { }) @NotQueryable public RAssignmentExtension getAnyContainer() { - return anyContainer; + return super.getAnyContainer(); } @Id @Column(name = "anyContainer_owner_owner_oid", length = RUtil.COLUMN_LENGTH_OID) @NotQueryable public String getOwnerOid() { - if (ownerOid == null && anyContainer != null) { - ownerOid = anyContainer.getOwnerOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "anyContainer_owner_id") @NotQueryable public Integer getOwnerId() { - if (ownerId == null && anyContainer != null) { - ownerId = anyContainer.getOwnerId(); - } - return ownerId; - } - - @Id - @Enumerated(EnumType.ORDINAL) - public RAssignmentExtensionType getExtensionType() { - return extensionType; + return super.getOwnerId(); } @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; - } - - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; + @Column(name = "item_id", updatable = false, insertable = false) + public Integer getItemId() { + return super.getItemId(); } - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_a_ext_long_item")) + public RExtItem getItem() { + return super.getItem(); } + @Id @Column(name = "longValue") public Long getValue() { return value; @@ -141,62 +95,4 @@ public Long getValue() { public void setValue(Long value) { this.value = value; } - - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setAnyContainer(RAssignmentExtension anyContainer) { - this.anyContainer = anyContainer; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; - } - - public void setExtensionType(RAssignmentExtensionType extensionType) { - this.extensionType = extensionType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - RAExtLong that = (RAExtLong) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (valueType != that.valueType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - return result; - } } 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 20f1b501bd2..75ffdf08e7b 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 @@ -34,23 +34,10 @@ @Entity @IdClass(RAExtPolyStringId.class) @Table(name = "m_assignment_ext_poly") -@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_poly", - indexes = {@Index(name = "iAExtensionPolyString", columnNames = {"extensionType", "eName", "orig"})}) -public class RAExtPolyString implements RAExtValue { - - private Boolean trans; - - //owner entity - private RAssignmentExtension anyContainer; - private String ownerOid; - private Integer ownerId; - - private RAssignmentExtensionType extensionType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; +@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_poly" + /*, + indexes = {@Index(name = "iAExtensionPolyString", columnNames = {"extensionType", "eName", "orig"})} */) +public class RAExtPolyString extends RAExtBase implements RAExtValue { //orig value private String value; @@ -67,18 +54,7 @@ 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") + @ForeignKey(name = "fk_a_ext_poly_owner") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @PrimaryKeyJoinColumns({ @@ -87,57 +63,34 @@ public void setTransient(Boolean trans) { }) @NotQueryable public RAssignmentExtension getAnyContainer() { - return anyContainer; + return super.getAnyContainer(); } @Id @Column(name = "anyContainer_owner_owner_oid", length = RUtil.COLUMN_LENGTH_OID) @NotQueryable public String getOwnerOid() { - if (ownerOid == null && anyContainer != null) { - ownerOid = anyContainer.getOwnerOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "anyContainer_owner_id") @NotQueryable public Integer getOwnerId() { - if (ownerId == null && anyContainer != null) { - ownerId = anyContainer.getOwnerId(); - } - return ownerId; + return super.getOwnerId(); } @Id - @Enumerated(EnumType.ORDINAL) - public RAssignmentExtensionType getExtensionType() { - return extensionType; + @Column(name = "item_id", updatable = false, insertable = false) + public Integer getItemId() { + return super.getItemId(); } - @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; - } - - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; - } - - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_a_ext_poly_item")) + public RExtItem getItem() { + return super.getItem(); } @Column(name = "orig") @@ -156,63 +109,4 @@ public void setNorm(String norm) { public void setValue(String value) { this.value = value; } - - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setAnyContainer(RAssignmentExtension anyContainer) { - this.anyContainer = anyContainer; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; - } - - public void setExtensionType(RAssignmentExtensionType extensionType) { - this.extensionType = extensionType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - RAExtPolyString that = (RAExtPolyString) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (valueType != that.valueType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - if (norm != null ? !norm.equals(that.norm) : that.norm != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - return result; - } } 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 170e6eb50e2..ed326884750 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 @@ -19,13 +19,11 @@ import com.evolveum.midpoint.prism.PrismReferenceValue; import com.evolveum.midpoint.repo.sql.data.common.id.RAExtReferenceId; import com.evolveum.midpoint.repo.sql.data.common.other.RObjectType; -import com.evolveum.midpoint.repo.sql.data.common.type.RAssignmentExtensionType; import com.evolveum.midpoint.repo.sql.helpers.modify.Ignore; import com.evolveum.midpoint.repo.sql.query2.definition.NotQueryable; import com.evolveum.midpoint.repo.sql.util.ClassMapper; import com.evolveum.midpoint.repo.sql.util.RUtil; import org.hibernate.annotations.ForeignKey; -import org.hibernate.annotations.Index; import javax.persistence.*; @@ -36,23 +34,10 @@ @Entity @IdClass(RAExtReferenceId.class) @Table(name = "m_assignment_ext_reference") -@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_reference", - indexes = {@Index(name = "iAExtensionReference", columnNames = {"extensionType", "eName", "targetoid"})}) -public class RAExtReference implements RAExtValue { - - private Boolean trans; - - //owner entity - private RAssignmentExtension anyContainer; - private String ownerOid; - private Integer ownerId; - - private RAssignmentExtensionType extensionType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; +@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_reference" + /*, + indexes = {@Index(name = "iAExtensionReference", columnNames = {"extensionType", "eName", "targetoid"})} */) +public class RAExtReference extends RAExtBase implements RAExtValue { //this is target oid private String value; @@ -63,18 +48,7 @@ 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") + @ForeignKey(name = "fk_a_ext_reference_owner") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @PrimaryKeyJoinColumns({ @@ -83,58 +57,34 @@ public void setTransient(Boolean trans) { }) @NotQueryable public RAssignmentExtension getAnyContainer() { - return anyContainer; + return super.getAnyContainer(); } @Id @Column(name = "anyContainer_owner_owner_oid", length = RUtil.COLUMN_LENGTH_OID) @NotQueryable public String getOwnerOid() { - if (ownerOid == null && anyContainer != null) { - ownerOid = anyContainer.getOwnerOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "anyContainer_owner_id") @NotQueryable public Integer getOwnerId() { - if (ownerId == null && anyContainer != null) { - ownerId = anyContainer.getOwnerId(); - } - return ownerId; - } - - @Id - @Enumerated(EnumType.ORDINAL) - public RAssignmentExtensionType getExtensionType() { -// return extensionType; - return RAssignmentExtensionType.EXTENSION; + return super.getOwnerId(); } @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; - } - - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; + @Column(name = "item_id", updatable = false, insertable = false) + public Integer getItemId() { + return super.getItemId(); } - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_a_ext_boolean_reference")) + public RExtItem getItem() { + return super.getItem(); } @Column(name = "targetoid", length = RUtil.COLUMN_LENGTH_OID) @@ -156,30 +106,6 @@ public void setValue(String value) { this.value = value; } - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setAnyContainer(RAssignmentExtension anyContainer) { - this.anyContainer = anyContainer; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - public void setTargetType(RObjectType targetType) { this.targetType = targetType; } @@ -188,45 +114,6 @@ public void setRelation(String relation) { this.relation = relation; } - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; - } - - public void setExtensionType(RAssignmentExtensionType extensionType) { - this.extensionType = extensionType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - RAExtReference that = (RAExtReference) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (relation != null ? !relation.equals(that.relation) : that.relation != null) return false; - if (targetType != that.targetType) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - if (valueType != that.valueType) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (targetType != null ? targetType.hashCode() : 0); - result = 31 * result + (relation != null ? relation.hashCode() : 0); - - return result; - } - public static PrismReferenceValue createReference(RAExtReference repo) { PrismReferenceValue value = new PrismReferenceValue(); value.setOid(repo.getValue()); 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 026c4195dfe..d9635e8e773 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 @@ -17,12 +17,10 @@ package com.evolveum.midpoint.repo.sql.data.common.any; import com.evolveum.midpoint.repo.sql.data.common.id.RAExtStringId; -import com.evolveum.midpoint.repo.sql.data.common.type.RAssignmentExtensionType; import com.evolveum.midpoint.repo.sql.helpers.modify.Ignore; import com.evolveum.midpoint.repo.sql.query2.definition.NotQueryable; import com.evolveum.midpoint.repo.sql.util.RUtil; import org.hibernate.annotations.ForeignKey; -import org.hibernate.annotations.Index; import javax.persistence.*; @@ -33,23 +31,10 @@ @Entity @IdClass(RAExtStringId.class) @Table(name = "m_assignment_ext_string") -@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_string", - indexes = {@Index(name = "iAExtensionString", columnNames = {"extensionType", "eName", "stringValue"})}) -public class RAExtString implements RAExtValue { - - private Boolean trans; - - //owner entity - private RAssignmentExtension anyContainer; - private String ownerOid; - private Integer ownerId; - - private RAssignmentExtensionType extensionType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; +@org.hibernate.annotations.Table(appliesTo = "m_assignment_ext_string" + /*, + indexes = {@Index(name = "iAExtensionString", columnNames = {"extensionType", "eName", "stringValue"})} */) +public class RAExtString extends RAExtBase implements RAExtValue { private String value; @@ -60,18 +45,7 @@ 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") + @ForeignKey(name = "fk_a_ext_string_owner") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @PrimaryKeyJoinColumns({ @@ -80,57 +54,34 @@ public void setTransient(Boolean trans) { }) @NotQueryable public RAssignmentExtension getAnyContainer() { - return anyContainer; + return super.getAnyContainer(); } @Id @Column(name = "anyContainer_owner_owner_oid", length = RUtil.COLUMN_LENGTH_OID) @NotQueryable public String getOwnerOid() { - if (ownerOid == null && anyContainer != null) { - ownerOid = anyContainer.getOwnerOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "anyContainer_owner_id") @NotQueryable public Integer getOwnerId() { - if (ownerId == null && anyContainer != null) { - ownerId = anyContainer.getOwnerId(); - } - return ownerId; + return super.getOwnerId(); } @Id - @Enumerated(EnumType.ORDINAL) - public RAssignmentExtensionType getExtensionType() { - return extensionType; + @Column(name = "item_id", updatable = false, insertable = false) + public Integer getItemId() { + return super.getItemId(); } - @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; - } - - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; - } - - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_a_ext_string_item")) + public RExtItem getItem() { + return super.getItem(); } @Column(name = "stringValue") @@ -141,62 +92,4 @@ public String getValue() { public void setValue(String value) { this.value = value; } - - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setAnyContainer(RAssignmentExtension anyContainer) { - this.anyContainer = anyContainer; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; - } - - public void setExtensionType(RAssignmentExtensionType extensionType) { - this.extensionType = extensionType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - RAExtString that = (RAExtString) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (valueType != that.valueType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - return result; - } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtValue.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtValue.java index 58d0326b6b3..e2b251c9637 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtValue.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAExtValue.java @@ -5,7 +5,7 @@ /** * @author lazyman */ -public interface RAExtValue extends RAnyValue { +public interface RAExtValue extends RAnyValue { String ANY_CONTAINER = "anyContainer"; diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyBase.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyBase.java new file mode 100644 index 00000000000..a4b1a549fb1 --- /dev/null +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyBase.java @@ -0,0 +1,53 @@ +package com.evolveum.midpoint.repo.sql.data.common.any; + +import java.util.Objects; + +public abstract class RAnyBase implements RAnyValue { + + private RExtItem item; + private Integer itemId; + + @Override + public String getName() { + return item.getName(); + } + + @Override + public String getType() { + return item.getType(); + } + + public RExtItem getItem() { + return item; + } + + public Integer getItemId() { + if (itemId == null && item != null) { + itemId = item.getId(); + } + return itemId; + } + + public void setItemId(Integer itemId) { + this.itemId = itemId; + } + + public void setItem(RExtItem item) { + this.item = item; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof RAnyBase)) + return false; + RAnyBase rAnyBase = (RAnyBase) o; + return Objects.equals(getItemId(), rAnyBase.getItemId()); + } + + @Override + public int hashCode() { + return Objects.hash(getItemId()); + } +} diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyConverter.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyConverter.java index 479748757f1..e489bed0b2e 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyConverter.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAnyConverter.java @@ -17,14 +17,13 @@ package com.evolveum.midpoint.repo.sql.data.common.any; import com.evolveum.midpoint.prism.*; -import com.evolveum.midpoint.prism.delta.ItemDelta; import com.evolveum.midpoint.prism.marshaller.PrismBeanInspector; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; +import com.evolveum.midpoint.repo.sql.data.common.dictionary.ExtItemDictionary; import com.evolveum.midpoint.repo.sql.query.QueryException; import com.evolveum.midpoint.repo.sql.type.XMLGregorianCalendarType; import com.evolveum.midpoint.repo.sql.util.DtoTranslationException; -import com.evolveum.midpoint.repo.sql.util.RUtil; import com.evolveum.midpoint.util.DOMUtil; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SystemException; @@ -33,6 +32,9 @@ import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; import com.evolveum.prism.xml.ns._public.types_3.RawType; import org.apache.commons.lang.Validate; +import org.hibernate.Session; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.w3c.dom.Element; import javax.xml.datatype.XMLGregorianCalendar; @@ -49,6 +51,9 @@ */ public class RAnyConverter { + // temporary + public static final ThreadLocal sessionThreadLocal = new ThreadLocal<>(); + private enum ValueType { BOOLEAN(Boolean.class, ROExtBoolean.class, RAExtBoolean.class), @@ -127,9 +132,13 @@ private RAnyValue extractAndCreateValue(ItemDefinition def, PrismPropertyValue p return assignment ? type.createNewAExtValue(extractedValue) : type.createNewOExtValue(extractedValue); } - public RAnyValue convertToRValue(PrismValue value, boolean assignment) throws SchemaException { + public RAnyValue convertToRValue(PrismValue value, boolean assignment, @Nullable Session session) throws SchemaException { RAnyValue rValue; + if (session == null) { + session = sessionThreadLocal.get(); + } + ItemDefinition definition = value.getParent().getDefinition(); if (!isIndexed(definition, prismContext)) { @@ -148,28 +157,23 @@ public RAnyValue convertToRValue(PrismValue value, boolean assignment) throws Sc PrismReferenceValue referenceValue = (PrismReferenceValue) value; rValue = ROExtReference.createReference(referenceValue); } - } else if (value == null) { - return null; // shouldn't occur anyway } else { // shouldn't get here because if isIndexed test above throw new AssertionError("Wrong value type: " + value); } - rValue.setName(RUtil.qnameToString(definition.getName())); - rValue.setType(RUtil.qnameToString(definition.getTypeName())); - rValue.setValueType(getValueType(value.getParent())); - rValue.setDynamic(definition.isDynamic()); + rValue.setItem(ExtItemDictionary.getInstance().findItemByDefinition(definition, session)); return rValue; } //todo assignment parameter really messed up this method, proper interfaces must be introduced later [lazyman] - public Set convertToRValue(Item item, boolean assignment) throws SchemaException, DtoTranslationException { + public Set> convertToRValue(Item item, boolean assignment, @Nullable Session session) throws SchemaException, DtoTranslationException { Validate.notNull(item, "Object for converting must not be null."); Validate.notNull(item.getDefinition(), "Item '" + item.getElementName() + "' without definition can't be saved."); ItemDefinition definition = item.getDefinition(); - Set rValues = new HashSet<>(); + Set> rValues = new HashSet<>(); if (!isIndexed(definition, prismContext)) { return rValues; } @@ -182,7 +186,7 @@ public Set convertToRValue(Item item, boolean assignment) throws Sche RAnyValue rValue; List values = item.getValues(); for (PrismValue value : values) { - rValue = convertToRValue(value, assignment); + rValue = convertToRValue(value, assignment, session); rValues.add(rValue); } } catch (Exception ex) { @@ -253,15 +257,16 @@ private static boolean isIndexedByDefault(ItemDefinition definition, PrismContex } } - private RValueType getValueType(Itemable itemable) { - Validate.notNull(itemable, "Value parent must not be null."); - if (itemable instanceof Item) { - return RValueType.getTypeFromItemClass(((Item) itemable).getClass()); - } - - return RValueType.getTypeFromDeltaClass(((ItemDelta) itemable).getClass()); - } +// private RItemKind getItemKind(Itemable itemable) { +// Validate.notNull(itemable, "Value parent must not be null."); +// if (itemable instanceof Item) { +// return RItemKind.getTypeFromItemClass(((Item) itemable).getClass()); +// } +// +// return RItemKind.getTypeFromDeltaClass(((ItemDelta) itemable).getClass()); +// } + @NotNull private T extractValue(PrismPropertyValue value, Class returnType) throws SchemaException { ItemDefinition definition = value.getParent().getDefinition(); //todo raw types @@ -271,7 +276,7 @@ private T extractValue(PrismPropertyValue value, Class returnType) throws object = getRealRepoValue(definition, (Element) object); } else if (object instanceof RawType) { RawType raw = (RawType) object; - object = raw.getParsedRealValue(returnType); + object = raw.getParsedRealValue(returnType); // todo this can return null! } else { object = getAggregatedRepoObject(object); } @@ -337,6 +342,7 @@ public static String getAnySetType(ItemDefinition definition, PrismContext prism * @param value * @return */ + @NotNull public static Object getRealRepoValue(ItemDefinition definition, Element value) throws SchemaException { ValueType willBeSaveAs = definition == null ? null : getValueType(definition.getTypeName()); QName typeName = definition == null ? DOMUtil.resolveXsiType(value) : definition.getTypeName(); 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 62665f5a838..7c7bfe08836 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 @@ -35,17 +35,9 @@ public interface RAnyValue extends Serializable, EntityState { String getType(); - RValueType getValueType(); - - boolean isDynamic(); - T getValue(); - void setName(String name); - - void setType(String type); - - void setValueType(RValueType valueType); + RExtItem getItem(); - void setDynamic(boolean dynamic); + void setItem(RExtItem item); } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAssignmentExtension.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAssignmentExtension.java index 98b0320840b..1c5868d2291 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAssignmentExtension.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RAssignmentExtension.java @@ -297,7 +297,7 @@ private static void copyFromJAXB(PrismContainerValue containerValue, RAssignment try { List> items = containerValue.getItems(); for (Item item : items) { - values.addAll(converter.convertToRValue(item, true)); + values.addAll(converter.convertToRValue(item, true, null)); } } catch (Exception ex) { throw new DtoTranslationException(ex.getMessage(), ex); @@ -329,4 +329,23 @@ private static void copyFromJAXB(PrismContainerValue containerValue, RAssignment repo.setLongsCount((short) repo.getLongs().size()); repo.setBooleansCount((short) repo.getBooleans().size()); } + + @Override + public String toString() { + return "RAssignmentExtension{" + +// "owner=" + (owner != null ? owner.getOwner() + ":" + owner.getId() : "null" ) + +// ", strings=" + strings + +// ", longs=" + longs + +// ", dates=" + dates + +// ", references=" + references + +// ", polys=" + polys + +// ", booleans=" + booleans + + "strings#=" + stringsCount + + ", longs#=" + longsCount + + ", dates#=" + datesCount + + ", references#=" + referencesCount + + ", polys#=" + polysCount + + ", booleans#=" + booleansCount + + '}'; + } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RExtItem.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RExtItem.java new file mode 100644 index 00000000000..487cbaef52a --- /dev/null +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RExtItem.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2010-2018 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.repo.sql.data.common.any; + +import com.evolveum.midpoint.prism.ItemDefinition; +import com.evolveum.midpoint.repo.sql.helpers.modify.Ignore; +import com.evolveum.midpoint.repo.sql.util.RUtil; + +import javax.persistence.*; +import java.util.Objects; + +/** + * @author mederly + */ +@Ignore +@Entity +//@IdClass(ROExtStringId.class) +@Table(name = "m_ext_item") +public class RExtItem { + + private Integer id; + // private boolean dynamic; + private String name; + private String type; + private RItemKind kind; + + public Key toKey() { + return new Key(name, type, kind); + } + + public static class Key { + public final String name; + public final String type; + public final RItemKind kind; + + public Key(String name, String type, RItemKind kind) { + this.name = name; + this.type = type; + this.kind = kind; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof Key)) + return false; + Key key = (Key) o; + return Objects.equals(name, key.name) && + Objects.equals(type, key.type) && + kind == key.kind; + } + + @Override + public int hashCode() { + return Objects.hash(name, type, kind); + } + + @Override + public String toString() { + return "Key{" + + "name='" + name + '\'' + + ", type='" + type + '\'' + + ", kind=" + kind + + '}'; + } + } + + // required by hibernate + @SuppressWarnings("unused") + public RExtItem() { + } + + private RExtItem(Key key) { + this.name = key.name; + this.type = key.type; + this.kind = key.kind; + } + + @Id + @GeneratedValue(strategy = GenerationType.SEQUENCE) + @Column(name = "id") + public Integer getId() { + return id; + } + + @Column(name = "itemName", length = RUtil.COLUMN_LENGTH_QNAME) + public String getName() { + return name; + } + + @Column(name = "itemType", length = RUtil.COLUMN_LENGTH_QNAME) // to avoid collisions with reserved words + public String getType() { + return type; + } + + @Enumerated(EnumType.ORDINAL) + public RItemKind getKind() { + return kind; + } + + // /** + // * @return true if this property has dynamic definition + // */ + // @Column(name = "dynamicDef") + // public boolean isDynamic() { + // return dynamic; + // } + + public void setId(int id) { + this.id = id; + } + + public void setKind(RItemKind kind) { + this.kind = kind; + } + + public void setName(String name) { + this.name = name; + } + + public void setType(String type) { + this.type = type; + } + + public static RExtItem.Key createKeyFromDefinition(ItemDefinition definition) { + String name = RUtil.qnameToString(definition.getName()); + String type = RUtil.qnameToString(definition.getTypeName()); + RItemKind kind = RItemKind.getTypeFromItemDefinitionClass(definition.getClass()); + return new Key(name, type, kind); + } + + public static RExtItem createFromDefinition(ItemDefinition definition) { + return new RExtItem(createKeyFromDefinition(definition)); + } + + @Override + public String toString() { + return "RExtItem{" + + "id=" + id + + ", name='" + name + '\'' + + ", type='" + type + '\'' + + ", kind=" + kind + + '}'; + } + + // public void setDynamic(boolean dynamic) { + // this.dynamic = dynamic; + // } +} diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RValueType.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RItemKind.java similarity index 61% rename from repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RValueType.java rename to repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RItemKind.java index 0d9e02171f5..ac588dee13d 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RValueType.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/RItemKind.java @@ -19,27 +19,29 @@ import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.delta.*; import org.apache.commons.lang.Validate; +import org.jetbrains.annotations.NotNull; /** * @author lazyman */ -public enum RValueType { +public enum RItemKind { - PROPERTY(PrismProperty.class, PrismPropertyValue.class, PropertyDelta.class), - CONTAINER(PrismContainer.class, PrismContainerValue.class, ContainerDelta.class), - OBJECT(PrismObject.class, PrismContainerValue.class, null), - REFERENCE(PrismReference.class, PrismReferenceValue.class, ReferenceDelta.class); + PROPERTY(PrismProperty.class, PrismPropertyValue.class, PropertyDelta.class, PrismPropertyDefinition.class), + CONTAINER(PrismContainer.class, PrismContainerValue.class, ContainerDelta.class, PrismContainerDefinition.class), + OBJECT(PrismObject.class, PrismContainerValue.class, null, PrismObjectDefinition.class), + REFERENCE(PrismReference.class, PrismReferenceValue.class, ReferenceDelta.class, PrismReferenceDefinition.class); private Class itemClass; private Class valueClass; private Class deltaClass; + private Class definitionClass; - RValueType(Class itemClass, - Class valueClass, - Class deltaClass) { + RItemKind(Class itemClass, Class valueClass, Class deltaClass, + Class definitionClass) { this.itemClass = itemClass; this.valueClass = valueClass; this.deltaClass = deltaClass; + this.definitionClass = definitionClass; } public Class getValueClass() { @@ -54,9 +56,13 @@ public Class getDeltaClass() { return deltaClass; } - public static RValueType getTypeFromItemClass(Class clazz) { + public Class getDefinitionClass() { + return definitionClass; + } + + public static RItemKind getTypeFromItemClass(Class clazz) { Validate.notNull(clazz, "Class must not be null."); - for (RValueType value : RValueType.values()) { + for (RItemKind value : RItemKind.values()) { if (value.getItemClass().isAssignableFrom(clazz)) { return value; } @@ -65,9 +71,18 @@ public static RValueType getTypeFromItemClass(Class clazz) { throw new IllegalArgumentException("Unknown enum value type for '" + clazz.getName() + "'."); } - public static RValueType getTypeFromValueClass(Class clazz) { + public static RItemKind getTypeFromItemDefinitionClass(@NotNull Class clazz) { + for (RItemKind value : RItemKind.values()) { + if (value.getDefinitionClass().isAssignableFrom(clazz)) { + return value; + } + } + throw new IllegalArgumentException("Unknown enum value for definition class '" + clazz.getName() + "'."); + } + + public static RItemKind getTypeFromValueClass(Class clazz) { Validate.notNull(clazz, "Class must not be null."); - for (RValueType value : RValueType.values()) { + for (RItemKind value : RItemKind.values()) { if (value.getValueClass().isAssignableFrom(clazz)) { return value; } @@ -76,9 +91,9 @@ public static RValueType getTypeFromValueClass(Class clazz throw new IllegalArgumentException("Unknown enum value type for '" + clazz.getName() + "'."); } - public static RValueType getTypeFromDeltaClass(Class clazz) { + public static RItemKind getTypeFromDeltaClass(Class clazz) { Validate.notNull(clazz, "Class must not be null."); - for (RValueType value : RValueType.values()) { + for (RItemKind value : RItemKind.values()) { if (value.getDeltaClass() != null && value.getDeltaClass().isAssignableFrom(clazz)) { return value; } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtBase.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtBase.java new file mode 100644 index 00000000000..e0b67174604 --- /dev/null +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtBase.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2010-2018 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.repo.sql.data.common.any; + +import com.evolveum.midpoint.repo.sql.data.common.RObject; +import com.evolveum.midpoint.repo.sql.data.common.type.RObjectExtensionType; + +import java.util.Objects; + +abstract public class ROExtBase extends RAnyBase implements ROExtValue { + + private Boolean trans; + + //owner entity + private RObject owner; + private String ownerOid; + private RObjectExtensionType ownerType; + + public RObject getOwner() { + return owner; + } + + public String getOwnerOid() { + if (ownerOid == null && owner != null) { + ownerOid = owner.getOid(); + } + return ownerOid; + } + + public RObjectExtensionType getOwnerType() { + return ownerType; + } + + public void setOwner(RObject owner) { + this.owner = owner; + } + + public void setOwnerOid(String ownerOid) { + this.ownerOid = ownerOid; + } + + public void setOwnerType(RObjectExtensionType ownerType) { + this.ownerType = ownerType; + } + + @Override + public Boolean isTransient() { + return trans; + } + + @Override + public void setTransient(Boolean trans) { + this.trans = trans; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof ROExtBase)) + return false; + if (!super.equals(o)) + return false; + ROExtBase roExtBase = (ROExtBase) o; + return Objects.equals(getOwnerOid(), roExtBase.getOwnerOid()) && + getOwnerType() == roExtBase.getOwnerType() && + Objects.equals(getItem(), roExtBase.getItem()); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), getOwnerOid(), getOwnerType(), getItem()); + } +} diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtBoolean.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtBoolean.java index 46060cb65c7..f6bb1648600 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtBoolean.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtBoolean.java @@ -23,7 +23,6 @@ import com.evolveum.midpoint.repo.sql.query2.definition.NotQueryable; import com.evolveum.midpoint.repo.sql.util.RUtil; import org.hibernate.annotations.ForeignKey; -import org.hibernate.annotations.Index; import javax.persistence.*; @@ -34,22 +33,11 @@ @Entity @IdClass(ROExtBooleanId.class) @Table(name = "m_object_ext_boolean") -@org.hibernate.annotations.Table(appliesTo = "m_object_ext_boolean", +@org.hibernate.annotations.Table(appliesTo = "m_object_ext_boolean" + /*, indexes = {@Index(name = "iExtensionBoolean", columnNames = {"ownerType", "eName", "booleanValue"}), - @Index(name = "iExtensionBooleanDef", columnNames = {"owner_oid", "ownerType"})}) -public class ROExtBoolean implements ROExtValue { - - private Boolean trans; - - //owner entity - private RObject owner; - private String ownerOid; - private RObjectExtensionType ownerType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; + @Index(name = "iExtensionBooleanDef", columnNames = {"owner_oid", "ownerType"})} */) +public class ROExtBoolean extends ROExtBase { private Boolean value; @@ -60,66 +48,42 @@ public ROExtBoolean(Boolean value) { this.value = value; } - @Transient - @Override - public Boolean isTransient() { - return trans; - } - - @Override - public void setTransient(Boolean trans) { - this.trans = trans; - } - @Id - @ForeignKey(name = "fk_object_ext_boolean") + @ForeignKey(name = "fk_o_ext_boolean_owner") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @NotQueryable public RObject getOwner() { - return owner; + return super.getOwner(); } @Id @Column(name = "owner_oid", length = RUtil.COLUMN_LENGTH_OID) public String getOwnerOid() { - if (ownerOid == null && owner != null) { - ownerOid = owner.getOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "ownerType") @Enumerated(EnumType.ORDINAL) public RObjectExtensionType getOwnerType() { - return ownerType; - } - - @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; + return super.getOwnerType(); } - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; - } - - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_o_ext_boolean_item")) + public RExtItem getItem() { + return super.getItem(); } - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @Id + @Column(name = "item_id", insertable = false, updatable = false) + public Integer getItemId() { + return super.getItemId(); } + @Id @Column(name = "booleanValue") public Boolean getValue() { return value; @@ -128,58 +92,4 @@ public Boolean getValue() { public void setValue(Boolean value) { this.value = value; } - - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setOwner(RObject owner) { - this.owner = owner; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - ROExtBoolean that = (ROExtBoolean) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (valueType != that.valueType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - return result; - } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtDate.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtDate.java index 0e969ea1365..f0fd8972ca1 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtDate.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtDate.java @@ -35,22 +35,11 @@ @Entity @IdClass(ROExtDateId.class) @Table(name = "m_object_ext_date") -@org.hibernate.annotations.Table(appliesTo = "m_object_ext_date", +@org.hibernate.annotations.Table(appliesTo = "m_object_ext_date" + /*, indexes = {@Index(name = "iExtensionDate", columnNames = {"ownerType", "eName", "dateValue"}), - @Index(name = "iExtensionDateDef", columnNames = {"owner_oid", "ownerType"})}) -public class ROExtDate implements ROExtValue { - - private Boolean trans; - - //owner entity - private RObject owner; - private String ownerOid; - private RObjectExtensionType ownerType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; + @Index(name = "iExtensionDateDef", columnNames = {"owner_oid", "ownerType"})} */) +public class ROExtDate extends ROExtBase { private Timestamp value; @@ -61,64 +50,39 @@ public ROExtDate(Timestamp value) { this.value = value; } - @Transient - @Override - public Boolean isTransient() { - return trans; - } - - @Override - public void setTransient(Boolean trans) { - this.trans = trans; - } - @Id - @ForeignKey(name = "fk_object_ext_date") + @ForeignKey(name = "fk_o_ext_date_owner") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @NotQueryable public RObject getOwner() { - return owner; + return super.getOwner(); } @Id @Column(name = "owner_oid", length = RUtil.COLUMN_LENGTH_OID) public String getOwnerOid() { - if (ownerOid == null && owner != null) { - ownerOid = owner.getOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "ownerType") @Enumerated(EnumType.ORDINAL) public RObjectExtensionType getOwnerType() { - return ownerType; - } - - @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; + return super.getOwnerType(); } - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_o_ext_date_item")) + public RExtItem getItem() { + return super.getItem(); } - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @Id + @Column(name = "item_id", insertable = false, updatable = false) + public Integer getItemId() { + return super.getItemId(); } @Column(name = "dateValue") @@ -129,58 +93,4 @@ public Timestamp getValue() { public void setValue(Timestamp value) { this.value = value; } - - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setOwner(RObject owner) { - this.owner = owner; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - ROExtDate that = (ROExtDate) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (valueType != that.valueType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - return result; - } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtLong.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtLong.java index 57935845fba..e3d22df76c7 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtLong.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtLong.java @@ -34,22 +34,11 @@ @Entity @IdClass(ROExtLongId.class) @Table(name = "m_object_ext_long") -@org.hibernate.annotations.Table(appliesTo = "m_object_ext_long", +@org.hibernate.annotations.Table(appliesTo = "m_object_ext_long" + /*, indexes = {@Index(name = "iExtensionLong", columnNames = {"ownerType", "eName", "longValue"}), - @Index(name = "iExtensionLongDef", columnNames = {"owner_oid", "ownerType"})}) -public class ROExtLong implements ROExtValue { - - private Boolean trans; - - //owner entity - private RObject owner; - private String ownerOid; - private RObjectExtensionType ownerType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; + @Index(name = "iExtensionLongDef", columnNames = {"owner_oid", "ownerType"})} */) +public class ROExtLong extends ROExtBase { private Long value; @@ -60,64 +49,39 @@ public ROExtLong(Long value) { this.value = value; } - @Transient - @Override - public Boolean isTransient() { - return trans; - } - - @Override - public void setTransient(Boolean trans) { - this.trans = trans; - } - @Id @ForeignKey(name = "fk_object_ext_long") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @NotQueryable public RObject getOwner() { - return owner; + return super.getOwner(); } @Id @Column(name = "owner_oid", length = RUtil.COLUMN_LENGTH_OID) public String getOwnerOid() { - if (ownerOid == null && owner != null) { - ownerOid = owner.getOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "ownerType") @Enumerated(EnumType.ORDINAL) public RObjectExtensionType getOwnerType() { - return ownerType; - } - - @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; + return super.getOwnerType(); } - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_o_ext_long_item")) + public RExtItem getItem() { + return super.getItem(); } - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @Id + @Column(name = "item_id", insertable = false, updatable = false) + public Integer getItemId() { + return super.getItemId(); } @Column(name = "longValue") @@ -128,58 +92,4 @@ public Long getValue() { public void setValue(Long value) { this.value = value; } - - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setOwner(RObject owner) { - this.owner = owner; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - ROExtLong that = (ROExtLong) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (valueType != that.valueType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - return result; - } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtPolyString.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtPolyString.java index a2c3abc06e0..314bbf7a8fe 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtPolyString.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtPolyString.java @@ -35,22 +35,11 @@ @Entity @IdClass(ROExtPolyStringId.class) @Table(name = "m_object_ext_poly") -@org.hibernate.annotations.Table(appliesTo = "m_object_ext_poly", +@org.hibernate.annotations.Table(appliesTo = "m_object_ext_poly" + /*, indexes = {@Index(name = "iExtensionPolyString", columnNames = {"ownerType", "eName", "orig"}), - @Index(name = "iExtensionPolyStringDef", columnNames = {"owner_oid", "ownerType"})}) -public class ROExtPolyString implements ROExtValue { - - private Boolean trans; - - //owner entity - private RObject owner; - private String ownerOid; - private RObjectExtensionType ownerType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; + @Index(name = "iExtensionPolyStringDef", columnNames = {"owner_oid", "ownerType"})} */) +public class ROExtPolyString extends ROExtBase { //orig value private String value; @@ -67,64 +56,39 @@ public ROExtPolyString(PolyString polyString) { } } - @Transient - @Override - public Boolean isTransient() { - return trans; - } - - @Override - public void setTransient(Boolean trans) { - this.trans = trans; - } - @Id - @ForeignKey(name = "fk_object_ext_poly") + @ForeignKey(name = "fk_o_ext_poly_owner") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @NotQueryable public RObject getOwner() { - return owner; + return super.getOwner(); } @Id @Column(name = "owner_oid", length = RUtil.COLUMN_LENGTH_OID) public String getOwnerOid() { - if (ownerOid == null && owner != null) { - ownerOid = owner.getOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "ownerType") @Enumerated(EnumType.ORDINAL) public RObjectExtensionType getOwnerType() { - return ownerType; + return super.getOwnerType(); } - @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; - } - - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_o_ext_poly_item")) + public RExtItem getItem() { + return super.getItem(); } - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @Id + @Column(name = "item_id", insertable = false, updatable = false) + public Integer getItemId() { + return super.getItemId(); } @Column(name = "orig") @@ -143,59 +107,4 @@ public void setNorm(String norm) { public void setValue(String value) { this.value = value; } - - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setOwner(RObject owner) { - this.owner = owner; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - ROExtPolyString that = (ROExtPolyString) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (valueType != that.valueType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - if (norm != null ? !norm.equals(that.norm) : that.norm != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - return result; - } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtReference.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtReference.java index a931b273293..a4532b19a99 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtReference.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtReference.java @@ -37,27 +37,16 @@ @Entity @IdClass(ROExtReferenceId.class) @Table(name = "m_object_ext_reference") -@org.hibernate.annotations.Table(appliesTo = "m_object_ext_reference", +@org.hibernate.annotations.Table(appliesTo = "m_object_ext_reference" + /*, indexes = {@Index(name = "iExtensionReference", columnNames = {"ownerType", "eName", "targetoid"}), - @Index(name = "iExtensionReferenceDef", columnNames = {"owner_oid", "ownerType"})}) -public class ROExtReference implements ROExtValue { + @Index(name = "iExtensionReferenceDef", columnNames = {"owner_oid", "ownerType"})} */) +public class ROExtReference extends ROExtBase { public static final String F_TARGET_OID = "value"; public static final String F_RELATION = "relation"; public static final String F_TARGET_TYPE = "targetType"; - private Boolean trans; - - //owner entity - private RObject owner; - private String ownerOid; - private RObjectExtensionType ownerType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; - //this is target oid private String value; //this is type attribute @@ -67,64 +56,39 @@ public class ROExtReference implements ROExtValue { public ROExtReference() { } - @Transient - @Override - public Boolean isTransient() { - return trans; - } - - @Override - public void setTransient(Boolean trans) { - this.trans = trans; - } - @Id - @ForeignKey(name = "fk_object_ext_reference") + @ForeignKey(name = "fk_o_ext_reference_owner") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @NotQueryable public RObject getOwner() { - return owner; + return super.getOwner(); } @Id @Column(name = "owner_oid", length = RUtil.COLUMN_LENGTH_OID) public String getOwnerOid() { - if (ownerOid == null && owner != null) { - ownerOid = owner.getOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "ownerType") @Enumerated(EnumType.ORDINAL) public RObjectExtensionType getOwnerType() { - return ownerType; - } - - @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; + return super.getOwnerType(); } - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_o_ext_reference_item")) + public RExtItem getItem() { + return super.getItem(); } - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @Id + @Column(name = "item_id", insertable = false, updatable = false) + public Integer getItemId() { + return super.getItemId(); } @Column(name = "targetoid", length = RUtil.COLUMN_LENGTH_OID) @@ -146,34 +110,6 @@ public void setValue(String value) { this.value = value; } - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setOwner(RObject owner) { - this.owner = owner; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; - } - public void setTargetType(RObjectType targetType) { this.targetType = targetType; } @@ -182,37 +118,6 @@ public void setRelation(String relation) { this.relation = relation; } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - ROExtReference that = (ROExtReference) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (relation != null ? !relation.equals(that.relation) : that.relation != null) return false; - if (targetType != that.targetType) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - if (valueType != that.valueType) return false; - - return true; - } - - @Override - public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (targetType != null ? targetType.hashCode() : 0); - result = 31 * result + (relation != null ? relation.hashCode() : 0); - - return result; - } - public static PrismReferenceValue createReference(ROExtReference repo) { PrismReferenceValue value = new PrismReferenceValue(); value.setOid(repo.getValue()); diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtString.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtString.java index 0181e8369da..c0e4a0d9b5a 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtString.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/any/ROExtString.java @@ -26,6 +26,7 @@ import org.hibernate.annotations.Index; import javax.persistence.*; +import java.util.Objects; /** * @author lazyman @@ -34,22 +35,11 @@ @Entity @IdClass(ROExtStringId.class) @Table(name = "m_object_ext_string") -@org.hibernate.annotations.Table(appliesTo = "m_object_ext_string", +@org.hibernate.annotations.Table(appliesTo = "m_object_ext_string" + /*, indexes = {@Index(name = "iExtensionString", columnNames = {"ownerType", "eName", "stringValue"}), - @Index(name = "iExtensionStringDef", columnNames = {"owner_oid", "ownerType"})}) -public class ROExtString implements ROExtValue { - - private Boolean trans; - - //owner entity - private RObject owner; - private String ownerOid; - private RObjectExtensionType ownerType; - - private boolean dynamic; - private String name; - private String type; - private RValueType valueType; + @Index(name = "iExtensionStringDef", columnNames = {"owner_oid", "ownerType"})} */) +public class ROExtString extends ROExtBase { private String value; @@ -60,64 +50,39 @@ public ROExtString(String value) { this.value = value; } - @Transient - @Override - public Boolean isTransient() { - return trans; - } - - @Override - public void setTransient(Boolean trans) { - this.trans = trans; - } - @Id @ForeignKey(name = "fk_object_ext_string") @MapsId("owner") @ManyToOne(fetch = FetchType.LAZY) @NotQueryable public RObject getOwner() { - return owner; + return super.getOwner(); } @Id @Column(name = "owner_oid", length = RUtil.COLUMN_LENGTH_OID) public String getOwnerOid() { - if (ownerOid == null && owner != null) { - ownerOid = owner.getOid(); - } - return ownerOid; + return super.getOwnerOid(); } @Id @Column(name = "ownerType") @Enumerated(EnumType.ORDINAL) public RObjectExtensionType getOwnerType() { - return ownerType; + return super.getOwnerType(); } - @Id - @Column(name = "eName", length = RUtil.COLUMN_LENGTH_QNAME) - public String getName() { - return name; - } - - @Column(name = "eType", length = RUtil.COLUMN_LENGTH_QNAME) - public String getType() { - return type; - } - - @Enumerated(EnumType.ORDINAL) - public RValueType getValueType() { - return valueType; + @MapsId("item") + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(foreignKey = @javax.persistence.ForeignKey(name = "fk_o_ext_string_item")) + public RExtItem getItem() { + return super.getItem(); } - /** - * @return true if this property has dynamic definition - */ - @Column(name = "dynamicDef") - public boolean isDynamic() { - return dynamic; + @Id + @Column(name = "item_id", insertable = false, updatable = false) + public Integer getItemId() { + return super.getItemId(); } @Column(name = "stringValue") @@ -129,57 +94,21 @@ public void setValue(String value) { this.value = value; } - public void setValueType(RValueType valueType) { - this.valueType = valueType; - } - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setDynamic(boolean dynamic) { - this.dynamic = dynamic; - } - - public void setOwner(RObject owner) { - this.owner = owner; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; - } - - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; - } - @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (this == o) + return true; + if (!(o instanceof ROExtString)) + return false; + if (!super.equals(o)) + return false; ROExtString that = (ROExtString) o; - - if (dynamic != that.dynamic) return false; - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (type != null ? !type.equals(that.type) : that.type != null) return false; - if (valueType != that.valueType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = (dynamic ? 1 : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (valueType != null ? valueType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - return result; + + return Objects.hash(super.hashCode(), 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 424263896a4..b158ebbf6af 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 @@ -6,7 +6,7 @@ /** * @author lazyman */ -public interface ROExtValue extends RAnyValue { +public interface ROExtValue extends RAnyValue { String OWNER = "owner"; diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/dictionary/ExtItemDictionary.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/dictionary/ExtItemDictionary.java new file mode 100644 index 00000000000..15f18d6950f --- /dev/null +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/dictionary/ExtItemDictionary.java @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2010-2018 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.repo.sql.data.common.dictionary; + +import com.evolveum.midpoint.prism.ItemDefinition; +import com.evolveum.midpoint.repo.sql.data.common.any.RExtItem; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import org.hibernate.Session; +import org.jetbrains.annotations.NotNull; + +import javax.persistence.criteria.CriteriaQuery; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * TODO clean this up! + * + * @author mederly + */ +public class ExtItemDictionary { + + private static final Trace LOGGER = TraceManager.getTrace(ExtItemDictionary.class); + + private static final ExtItemDictionary INSTANCE = new ExtItemDictionary(); + + private ExtItemDictionary() { + } + + public static ExtItemDictionary getInstance() { + return INSTANCE; + } + + private Map itemsById; + private Map itemsByKey; + + // public Map getItemsById(Session session) { + // if (itemsById == null) { + // fetchItems(session); + // } + // return itemsById; + // } + // + // public Map getItemsByName(Session session) { + // if (itemsByName == null) { + // fetchItems(session); + // } + // return itemsByName; + // } + + private boolean fetchItemsIfNeeded(@NotNull Session session) { + if (itemsByKey != null) { + return false; + } else { + fetchItems(session); + return true; + } + } + + private void fetchItems(@NotNull Session session) { + CriteriaQuery query = session.getCriteriaBuilder().createQuery(RExtItem.class); + query.select(query.from(RExtItem.class)); + List items = session.createQuery(query).getResultList(); + LOGGER.debug("Fetched {} item definitions", items.size()); + System.out.println("*** Fetched " + items.size() + " item definitions:\n" + items); + + itemsById = new HashMap<>(items.size()); + itemsByKey = new HashMap<>(items.size()); + for (RExtItem item : items) { + itemsById.put(item.getId(), item); + itemsByKey.put(item.toKey(), item); + } + } + + // public RExtItem findItemById(long id) { + // return getItemsById().get(id); + // } + + @NotNull + public synchronized RExtItem findItemByDefinition(@NotNull ItemDefinition definition, @NotNull Session session) { + boolean fetchedNow = fetchItemsIfNeeded(session); + RExtItem.Key key = RExtItem.createKeyFromDefinition(definition); + RExtItem item = itemsByKey.get(key); + if (item == null && !fetchedNow) { + LOGGER.debug("Ext item for " + key + " not found, fetching all items."); + fetchItems(session); + item = itemsByKey.get(key); + } + if (item == null) { + LOGGER.debug("Ext item for " + key + " not found even in current items; creating it."); + item = RExtItem.createFromDefinition(definition); + session.persist(item); + System.out.println("Persisted item definition: " + item); + } + return item; + } + + public synchronized void initialize() { + itemsByKey = null; + itemsById = null; + } +} diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtBaseId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtBaseId.java new file mode 100644 index 00000000000..9c814f6dfd4 --- /dev/null +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtBaseId.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2010-2018 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.repo.sql.data.common.id; + +import java.io.Serializable; +import java.util.Objects; + +/** + * @author mederly + */ +public class RAExtBaseId implements Serializable { + + protected String ownerOid; + protected Integer ownerId; + protected Integer itemId; + + public String getOwnerOid() { + return ownerOid; + } + + public void setOwnerOid(String ownerOid) { + this.ownerOid = ownerOid; + } + + public Integer getOwnerId() { + return ownerId; + } + + public void setOwnerId(Integer ownerId) { + this.ownerId = ownerId; + } + + public Integer getItemId() { + return itemId; + } + + public void setItemId(Integer itemId) { + this.itemId = itemId; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof RAExtBaseId)) + return false; + RAExtBaseId that = (RAExtBaseId) o; + return Objects.equals(itemId, that.itemId) && + Objects.equals(ownerOid, that.ownerOid) && + Objects.equals(ownerId, that.ownerId); + } + + @Override + public int hashCode() { + return Objects.hash(ownerOid, ownerId, itemId); + } +} diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtBooleanId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtBooleanId.java index 8379c81af2a..93443d29d20 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtBooleanId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtBooleanId.java @@ -16,32 +16,28 @@ package com.evolveum.midpoint.repo.sql.data.common.id; -import java.io.Serializable; +import java.util.Objects; /** * @author lazyman */ -public class RAExtBooleanId implements Serializable { +public class RAExtBooleanId extends RAExtBaseId { - private String ownerOid; - private Integer ownerId; private Boolean value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public Integer getOwnerId() { - return ownerId; + return super.getOwnerId(); } - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; + @Override + public Integer getItemId() { + return super.getItemId(); } public Boolean getValue() { @@ -52,36 +48,21 @@ public void setValue(Boolean value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - RAExtBooleanId raLongId = (RAExtBooleanId) o; - - if (name != null ? !name.equals(raLongId.name) : raLongId.name != null) return false; - if (ownerId != null ? !ownerId.equals(raLongId.ownerId) : raLongId.ownerId != null) return false; - if (ownerOid != null ? !ownerOid.equals(raLongId.ownerOid) : raLongId.ownerOid != null) return false; - if (value != null ? !value.equals(raLongId.value) : raLongId.value != null) return false; - - return true; + if (this == o) + return true; + if (!(o instanceof RAExtBooleanId)) + return false; + if (!super.equals(o)) + return false; + RAExtBooleanId that = (RAExtBooleanId) o; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerId != null ? ownerId.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override @@ -89,6 +70,7 @@ public String toString() { return "RABooleanId{" + "ownerOid='" + ownerOid + '\'' + ", ownerId=" + ownerId + + ", itemId=" + itemId + ", value=" + value + '}'; } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtDateId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtDateId.java index 089dd217119..69260ba8f3f 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtDateId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtDateId.java @@ -16,33 +16,29 @@ package com.evolveum.midpoint.repo.sql.data.common.id; -import java.io.Serializable; import java.sql.Timestamp; +import java.util.Objects; /** * @author lazyman */ -public class RAExtDateId implements Serializable { +public class RAExtDateId extends RAExtBaseId { - private String ownerOid; - private Integer ownerId; private Timestamp value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public Integer getOwnerId() { - return ownerId; + return super.getOwnerId(); } - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; + @Override + public Integer getItemId() { + return super.getItemId(); } public Timestamp getValue() { @@ -53,36 +49,21 @@ public void setValue(Timestamp value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - RAExtDateId raDateId = (RAExtDateId) o; - - if (name != null ? !name.equals(raDateId.name) : raDateId.name != null) return false; - if (ownerId != null ? !ownerId.equals(raDateId.ownerId) : raDateId.ownerId != null) return false; - if (ownerOid != null ? !ownerOid.equals(raDateId.ownerOid) : raDateId.ownerOid != null) return false; - if (value != null ? !value.equals(raDateId.value) : raDateId.value != null) return false; - + if (this == o) return true; + if (!(o instanceof RAExtDateId)) + return false; + if (!super.equals(o)) + return false; + RAExtDateId that = (RAExtDateId) o; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerId != null ? ownerId.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override @@ -90,8 +71,8 @@ public String toString() { return "RADateId{" + "ownerOid='" + ownerOid + '\'' + ", ownerId=" + ownerId + + ", itemId=" + itemId + ", value=" + value + - ", name='" + name + '\'' + '}'; } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtLongId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtLongId.java index 8416eb0f898..3cbb4504f97 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtLongId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtLongId.java @@ -16,32 +16,28 @@ package com.evolveum.midpoint.repo.sql.data.common.id; -import java.io.Serializable; +import java.util.Objects; /** * @author lazyman */ -public class RAExtLongId implements Serializable { +public class RAExtLongId extends RAExtBaseId { - private String ownerOid; - private Integer ownerId; private Long value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public Integer getOwnerId() { - return ownerId; + return super.getOwnerId(); } - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; + @Override + public Integer getItemId() { + return super.getItemId(); } public Long getValue() { @@ -52,36 +48,21 @@ public void setValue(Long value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - RAExtLongId raLongId = (RAExtLongId) o; - - if (name != null ? !name.equals(raLongId.name) : raLongId.name != null) return false; - if (ownerId != null ? !ownerId.equals(raLongId.ownerId) : raLongId.ownerId != null) return false; - if (ownerOid != null ? !ownerOid.equals(raLongId.ownerOid) : raLongId.ownerOid != null) return false; - if (value != null ? !value.equals(raLongId.value) : raLongId.value != null) return false; - + if (this == o) return true; + if (!(o instanceof RAExtLongId)) + return false; + if (!super.equals(o)) + return false; + RAExtLongId that = (RAExtLongId) o; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerId != null ? ownerId.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override @@ -89,6 +70,7 @@ public String toString() { return "RALongId{" + "ownerOid='" + ownerOid + '\'' + ", ownerId=" + ownerId + + ", itemId=" + itemId + ", value=" + value + '}'; } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtPolyStringId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtPolyStringId.java index a94e9aea2a2..7492ceb8751 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtPolyStringId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtPolyStringId.java @@ -16,32 +16,28 @@ package com.evolveum.midpoint.repo.sql.data.common.id; -import java.io.Serializable; +import java.util.Objects; /** * @author lazyman */ -public class RAExtPolyStringId implements Serializable { +public class RAExtPolyStringId extends RAExtBaseId { - private String ownerOid; - private Integer ownerId; private String value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public Integer getOwnerId() { - return ownerId; + return super.getOwnerId(); } - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; + @Override + public Integer getItemId() { + return super.getItemId(); } public String getValue() { @@ -52,36 +48,20 @@ public void setValue(String value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof RAExtPolyStringId)) + return false; + if (!super.equals(o)) + return false; RAExtPolyStringId that = (RAExtPolyStringId) o; - - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (ownerId != null ? !ownerId.equals(that.ownerId) : that.ownerId != null) return false; - if (ownerOid != null ? !ownerOid.equals(that.ownerOid) : that.ownerOid != null) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerId != null ? ownerId.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override @@ -89,6 +69,7 @@ public String toString() { return "RAPolyStringId{" + "ownerOid='" + ownerOid + '\'' + ", ownerId=" + ownerId + + ", itemId=" + itemId + ", value='" + value + '\'' + '}'; } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtReferenceId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtReferenceId.java index 253643b3967..c576cb9c48d 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtReferenceId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtReferenceId.java @@ -16,32 +16,28 @@ package com.evolveum.midpoint.repo.sql.data.common.id; -import java.io.Serializable; +import java.util.Objects; /** * @author lazyman */ -public class RAExtReferenceId implements Serializable { +public class RAExtReferenceId extends RAExtBaseId { - private String ownerOid; - private Integer ownerId; private String value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public Integer getOwnerId() { - return ownerId; + return super.getOwnerId(); } - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; + @Override + public Integer getItemId() { + return super.getItemId(); } public String getValue() { @@ -52,36 +48,20 @@ public void setValue(String value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof RAExtReferenceId)) + return false; + if (!super.equals(o)) + return false; RAExtReferenceId that = (RAExtReferenceId) o; - - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (ownerId != null ? !ownerId.equals(that.ownerId) : that.ownerId != null) return false; - if (ownerOid != null ? !ownerOid.equals(that.ownerOid) : that.ownerOid != null) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerId != null ? ownerId.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override @@ -89,6 +69,7 @@ public String toString() { return "RAReferenceId{" + "ownerOid='" + ownerOid + '\'' + ", ownerId=" + ownerId + + ", itemId=" + itemId + ", value='" + value + '\'' + '}'; } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtStringId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtStringId.java index 04dbe3e8295..6471e3b1eb6 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtStringId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RAExtStringId.java @@ -16,32 +16,28 @@ package com.evolveum.midpoint.repo.sql.data.common.id; -import java.io.Serializable; +import java.util.Objects; /** * @author lazyman */ -public class RAExtStringId implements Serializable { +public class RAExtStringId extends RAExtBaseId { - private String ownerOid; - private Integer ownerId; private String value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public Integer getOwnerId() { - return ownerId; + return super.getOwnerId(); } - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; + @Override + public Integer getItemId() { + return super.getItemId(); } public String getValue() { @@ -52,36 +48,20 @@ public void setValue(String value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof RAExtStringId)) + return false; + if (!super.equals(o)) + return false; RAExtStringId that = (RAExtStringId) o; - - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (ownerId != null ? !ownerId.equals(that.ownerId) : that.ownerId != null) return false; - if (ownerOid != null ? !ownerOid.equals(that.ownerOid) : that.ownerOid != null) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerId != null ? ownerId.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override @@ -89,6 +69,7 @@ public String toString() { return "RAStringId{" + "ownerOid='" + ownerOid + '\'' + ", ownerId=" + ownerId + + ", itemId=" + itemId + ", value='" + value + '\'' + '}'; } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtBaseId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtBaseId.java new file mode 100644 index 00000000000..38ed6942c88 --- /dev/null +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtBaseId.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2010-2018 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.repo.sql.data.common.id; + +import com.evolveum.midpoint.repo.sql.data.common.type.RObjectExtensionType; + +import java.io.Serializable; +import java.util.Objects; + +/** + * @author mederly + */ +public class ROExtBaseId implements Serializable { + + protected String ownerOid; + protected RObjectExtensionType ownerType; + protected Integer itemId; + + public String getOwnerOid() { + return ownerOid; + } + + public void setOwnerOid(String ownerOid) { + this.ownerOid = ownerOid; + } + + public RObjectExtensionType getOwnerType() { + return ownerType; + } + + public void setOwnerType(RObjectExtensionType ownerType) { + this.ownerType = ownerType; + } + + public Integer getItemId() { + return itemId; + } + + public void setItemId(Integer itemId) { + this.itemId = itemId; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (!(o instanceof ROExtBaseId)) + return false; + ROExtBaseId that = (ROExtBaseId) o; + return itemId.equals(that.itemId) && + Objects.equals(ownerOid, that.ownerOid) && + ownerType == that.ownerType; + } + + @Override + public int hashCode() { + return Objects.hash(ownerOid, ownerType, itemId); + } +} diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtBooleanId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtBooleanId.java index e5c61f1ec81..741c98ebde7 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtBooleanId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtBooleanId.java @@ -18,32 +18,28 @@ import com.evolveum.midpoint.repo.sql.data.common.type.RObjectExtensionType; -import java.io.Serializable; +import java.util.Objects; /** * @author lazyman */ -public class ROExtBooleanId implements Serializable { +public class ROExtBooleanId extends ROExtBaseId { - private String ownerOid; - private RObjectExtensionType ownerType; private Boolean value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public RObjectExtensionType getOwnerType() { - return ownerType; + return super.getOwnerType(); } - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; + @Override + public Integer getItemId() { + return super.getItemId(); } public Boolean getValue() { @@ -54,40 +50,24 @@ public void setValue(Boolean value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof ROExtBooleanId)) + return false; + if (!super.equals(o)) + return false; ROExtBooleanId that = (ROExtBooleanId) o; - - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (ownerOid != null ? !ownerOid.equals(that.ownerOid) : that.ownerOid != null) return false; - if (ownerType != that.ownerType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerType != null ? ownerType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override public String toString() { - return "ROExtBooleanId[" + ownerOid + "," + ownerType + "," + value + "]"; + return "ROExtBooleanId[" + ownerOid + "," + ownerType + "," + itemId + "," + value + "]"; } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtDateId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtDateId.java index 4676adb5c1a..4eda806d58e 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtDateId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtDateId.java @@ -20,31 +20,28 @@ import java.io.Serializable; import java.sql.Timestamp; +import java.util.Objects; /** * @author lazyman */ -public class ROExtDateId implements Serializable { +public class ROExtDateId extends ROExtBaseId { - private String ownerOid; - private RObjectExtensionType ownerType; private Timestamp value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public RObjectExtensionType getOwnerType() { - return ownerType; + return super.getOwnerType(); } - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; + @Override + public Integer getItemId() { + return super.getItemId(); } public Timestamp getValue() { @@ -55,40 +52,24 @@ public void setValue(Timestamp value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof ROExtDateId)) + return false; + if (!super.equals(o)) + return false; ROExtDateId that = (ROExtDateId) o; - - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (ownerOid != null ? !ownerOid.equals(that.ownerOid) : that.ownerOid != null) return false; - if (ownerType != that.ownerType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerType != null ? ownerType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override public String toString() { - return "RAnyDateId[" + ownerOid + "," + ownerType + "," + value + "]"; + return "ROExtDateId[" + ownerOid + "," + ownerType + "," + itemId + "," + value + "]"; } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtLongId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtLongId.java index fa6ed5dfca4..08068cc50b2 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtLongId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtLongId.java @@ -19,31 +19,28 @@ import com.evolveum.midpoint.repo.sql.data.common.type.RObjectExtensionType; import java.io.Serializable; +import java.util.Objects; /** * @author lazyman */ -public class ROExtLongId implements Serializable { +public class ROExtLongId extends ROExtBaseId { - private String ownerOid; - private RObjectExtensionType ownerType; private Long value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public RObjectExtensionType getOwnerType() { - return ownerType; + return super.getOwnerType(); } - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; + @Override + public Integer getItemId() { + return super.getItemId(); } public Long getValue() { @@ -54,40 +51,24 @@ public void setValue(Long value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof ROExtLongId)) + return false; + if (!super.equals(o)) + return false; ROExtLongId that = (ROExtLongId) o; - - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (ownerOid != null ? !ownerOid.equals(that.ownerOid) : that.ownerOid != null) return false; - if (ownerType != that.ownerType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerType != null ? ownerType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override public String toString() { - return "RAnyLongId[" + ownerOid + "," + ownerType + "," + value + "]"; + return "ROExtLongId[" + ownerOid + "," + ownerType + "," + itemId + "," + value + "]"; } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtPolyStringId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtPolyStringId.java index 709ed7c8f54..c2b0a56648a 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtPolyStringId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtPolyStringId.java @@ -18,32 +18,28 @@ import com.evolveum.midpoint.repo.sql.data.common.type.RObjectExtensionType; -import java.io.Serializable; +import java.util.Objects; /** * @author lazyman */ -public class ROExtPolyStringId implements Serializable { +public class ROExtPolyStringId extends ROExtBaseId { - private String ownerOid; - private RObjectExtensionType ownerType; private String value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public RObjectExtensionType getOwnerType() { - return ownerType; + return super.getOwnerType(); } - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; + @Override + public Integer getItemId() { + return super.getItemId(); } public String getValue() { @@ -54,40 +50,24 @@ public void setValue(String value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof ROExtPolyStringId)) + return false; + if (!super.equals(o)) + return false; ROExtPolyStringId that = (ROExtPolyStringId) o; - - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (ownerOid != null ? !ownerOid.equals(that.ownerOid) : that.ownerOid != null) return false; - if (ownerType != that.ownerType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerType != null ? ownerType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override public String toString() { - return "RAnyPolyStringId[" + ownerOid + "," + ownerType + "," + value + "]"; + return "ROExtPolyStringId[" + ownerOid + "," + ownerType + "," + itemId + "," + value + "]"; } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtReferenceId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtReferenceId.java index 4e93c6c8fb0..9466b746d09 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtReferenceId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtReferenceId.java @@ -18,32 +18,28 @@ import com.evolveum.midpoint.repo.sql.data.common.type.RObjectExtensionType; -import java.io.Serializable; +import java.util.Objects; /** * @author lazyman */ -public class ROExtReferenceId implements Serializable { +public class ROExtReferenceId extends ROExtBaseId { - private String ownerOid; - private RObjectExtensionType ownerType; private String value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public RObjectExtensionType getOwnerType() { - return ownerType; + return super.getOwnerType(); } - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; + @Override + public Integer getItemId() { + return super.getItemId(); } public String getValue() { @@ -54,40 +50,24 @@ public void setValue(String value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof ROExtReferenceId)) + return false; + if (!super.equals(o)) + return false; ROExtReferenceId that = (ROExtReferenceId) o; - - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (ownerOid != null ? !ownerOid.equals(that.ownerOid) : that.ownerOid != null) return false; - if (ownerType != that.ownerType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerType != null ? ownerType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override public String toString() { - return "RAnyReferenceId[" + ownerOid + "," + ownerType + "," + value + "]"; + return "RAnyReferenceId[" + ownerOid + "," + ownerType + "," + itemId + "," + value + "]"; } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtStringId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtStringId.java index 0ba14529ba2..02bc7e5bfd9 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtStringId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/ROExtStringId.java @@ -18,32 +18,28 @@ import com.evolveum.midpoint.repo.sql.data.common.type.RObjectExtensionType; -import java.io.Serializable; +import java.util.Objects; /** * @author lazyman */ -public class ROExtStringId implements Serializable { +public class ROExtStringId extends ROExtBaseId { - private String ownerOid; - private RObjectExtensionType ownerType; private String value; - private String name; + @Override public String getOwnerOid() { - return ownerOid; - } - - public void setOwnerOid(String ownerOid) { - this.ownerOid = ownerOid; + return super.getOwnerOid(); } + @Override public RObjectExtensionType getOwnerType() { - return ownerType; + return super.getOwnerType(); } - public void setOwnerType(RObjectExtensionType ownerType) { - this.ownerType = ownerType; + @Override + public Integer getItemId() { + return super.getItemId(); } public String getValue() { @@ -54,40 +50,24 @@ public void setValue(String value) { this.value = value; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - + if (!(o instanceof ROExtStringId)) + return false; + if (!super.equals(o)) + return false; ROExtStringId that = (ROExtStringId) o; - - if (name != null ? !name.equals(that.name) : that.name != null) return false; - if (ownerOid != null ? !ownerOid.equals(that.ownerOid) : that.ownerOid != null) return false; - if (ownerType != that.ownerType) return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; + return Objects.equals(value, that.value); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (ownerType != null ? ownerType.hashCode() : 0); - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(super.hashCode(), value); } @Override public String toString() { - return "RAnyStringId[" + ownerOid + "," + ownerType + "," + value + "]"; + return "ROExtStringId[" + ownerOid + "," + ownerType + "," + itemId + "," + value + "]"; } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/BaseHelper.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/BaseHelper.java index 5ed6794ccb0..8d28b3f33a4 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/BaseHelper.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/BaseHelper.java @@ -17,6 +17,7 @@ package com.evolveum.midpoint.repo.sql.helpers; import com.evolveum.midpoint.repo.sql.*; +import com.evolveum.midpoint.repo.sql.data.common.any.RAnyConverter; import com.evolveum.midpoint.repo.sql.util.RUtil; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.util.exception.SystemException; @@ -109,6 +110,7 @@ public void execute(Connection connection) throws SQLException { } }); } + RAnyConverter.sessionThreadLocal.set(session); // TODO fix this hack return session; } @@ -151,6 +153,7 @@ public void cleanupSessionAndResult(Session session, OperationResult result) { if (result != null && result.isUnknown()) { result.computeStatus(); } + RAnyConverter.sessionThreadLocal.set(null); // TODO fix this hack } public void handleGeneralException(Exception ex, Session session, OperationResult result) { 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 032dca4b4e0..11d183dc92d 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 @@ -361,7 +361,7 @@ private void processAnyExtensionDeltaValues(Collection values, try { Collection> extValues = new ArrayList<>(); for (PrismValue value : values) { - RAnyValue extValue = converter.convertToRValue(value, object == null); + RAnyValue extValue = converter.convertToRValue(value, object == null, null); if (extValue == null) { continue; } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectRetriever.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectRetriever.java index d87f9162f98..7108279822d 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectRetriever.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectRetriever.java @@ -28,7 +28,7 @@ import com.evolveum.midpoint.repo.sql.SqlRepositoryServiceImpl; import com.evolveum.midpoint.repo.sql.data.common.RObject; import com.evolveum.midpoint.repo.sql.data.common.any.RAnyValue; -import com.evolveum.midpoint.repo.sql.data.common.any.RValueType; +import com.evolveum.midpoint.repo.sql.data.common.any.RItemKind; import com.evolveum.midpoint.repo.sql.data.common.type.RObjectExtensionType; import com.evolveum.midpoint.repo.sql.query.QueryException; import com.evolveum.midpoint.repo.sql.query.RQuery; @@ -574,13 +574,13 @@ private void applyShadowAttributeDefinitions(Class anyValue // A switch statement used to be here // but that caused strange trouble with OpenJDK. This if-then-else works. if (item.getDefinition() == null) { - RValueType rValType = (RValueType) value[2]; - if (rValType == RValueType.PROPERTY) { + RItemKind rValType = (RItemKind) value[2]; + if (rValType == RItemKind.PROPERTY) { PrismPropertyDefinitionImpl def = new PrismPropertyDefinitionImpl<>(name, type, object.getPrismContext()); def.setMinOccurs(0); def.setMaxOccurs(-1); item.applyDefinition(def, true); - } else if (rValType == RValueType.REFERENCE) { + } else if (rValType == RItemKind.REFERENCE) { PrismReferenceDefinitionImpl def = new PrismReferenceDefinitionImpl(name, type, object.getPrismContext()); def.setMinOccurs(0); def.setMaxOccurs(-1); diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectUpdater.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectUpdater.java index c9e6184a1f5..b8a05a11423 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectUpdater.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/helpers/ObjectUpdater.java @@ -128,10 +128,10 @@ public String addObjectAttempt(PrismObject object, Rep PrismIdentifierGenerator.Operation.ADD_WITH_OVERWRITE : PrismIdentifierGenerator.Operation.ADD; - RObject rObject = createDataObjectFromJAXB(object, operation); - session = baseHelper.beginTransaction(); + RObject rObject = createDataObjectFromJAXB(object, operation); + closureContext = closureManager.onBeginTransactionAdd(session, object, options.isOverwrite()); if (options.isOverwrite()) { @@ -255,7 +255,7 @@ private List createAddParentRefDelta(Pris } public void updateFullObject(RObject object, PrismObject savedObject) - throws SchemaException { + throws DtoTranslationException, SchemaException { LOGGER.debug("Updating full object xml column start."); savedObject.setVersion(Integer.toString(object.getVersion())); diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/query2/resolution/ItemPathResolver.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/query2/resolution/ItemPathResolver.java index 7dd88ecc0e2..2f5f01a7da4 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/query2/resolution/ItemPathResolver.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/query2/resolution/ItemPathResolver.java @@ -147,7 +147,7 @@ private Condition createJoinCondition(String joinedItemAlias, JpaLinkDefinition if (anyLinkDef.getOwnerType() != null) { // null for assignment extensions conjunction.add(hibernateQuery.createEq(joinedItemAlias + ".ownerType", anyLinkDef.getOwnerType())); } - conjunction.add(hibernateQuery.createEq(joinedItemAlias + "." + RAnyValue.F_NAME, + conjunction.add(hibernateQuery.createEq(joinedItemAlias + ".item." + RAnyValue.F_NAME, RUtil.qnameToString(anyLinkDef.getItemName()))); condition = conjunction; }