From 11c3628210b2dd7fb313281e41facedd9fdc043b Mon Sep 17 00:00:00 2001 From: Richard Richter Date: Mon, 8 Jun 2020 23:16:37 +0200 Subject: [PATCH] repo: entity classes using RContainerId use simplified id-based eq/hash equals/hashCode is based only on ID value and nothing else, passes tests --- .../container/RAccessCertificationCase.java | 65 +++++---- .../data/common/container/RAssignment.java | 129 +++++++++--------- .../common/container/ROperationExecution.java | 74 +++++----- .../sql/data/common/container/RTrigger.java | 47 +++---- .../repo/sql/data/common/id/RContainerId.java | 30 ++-- .../data/common/other/RLookupTableRow.java | 72 ++++------ 6 files changed, 196 insertions(+), 221 deletions(-) diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RAccessCertificationCase.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RAccessCertificationCase.java index 30f49b8b5a2..435b5c81636 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RAccessCertificationCase.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RAccessCertificationCase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2015 Evolveum and contributors + * Copyright (c) 2010-2020 Evolveum and contributors * * This work is dual-licensed under the Apache License 2.0 * and European Union Public License. See LICENSE file for details. @@ -7,6 +7,19 @@ package com.evolveum.midpoint.repo.sql.data.common.container; +import static com.evolveum.midpoint.schema.util.CertCampaignTypeUtil.norm; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; +import javax.persistence.*; +import javax.xml.datatype.XMLGregorianCalendar; + +import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Persister; +import org.jetbrains.annotations.NotNull; + import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.repo.sql.SqlRepositoryServiceImpl; @@ -29,24 +42,6 @@ import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCaseType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationWorkItemType; -import org.hibernate.annotations.Cascade; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Persister; -import org.jetbrains.annotations.NotNull; - -import javax.persistence.*; -import javax.xml.datatype.XMLGregorianCalendar; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -import static com.evolveum.midpoint.schema.util.CertCampaignTypeUtil.norm; - -/** - * @author lazyman - * @author mederly - */ @JaxbType(type = AccessCertificationCaseType.class) @Entity @@ -62,8 +57,6 @@ public class RAccessCertificationCase implements Container getWorkItems() { return workItems; } @@ -254,6 +247,7 @@ public void setFullObject(byte[] fullObject) { } // Notes to equals/hashCode: don't include trans nor owner + /* @Override public boolean equals(Object o) { if (this == o) @@ -285,6 +279,26 @@ public int hashCode() { reviewRequestedTimestamp, reviewDeadline, remediedTimestamp, currentStageOutcome, iteration, stageNumber, outcome); } + */ + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof RAccessCertificationCase)) { + return false; + } + + RAccessCertificationCase that = (RAccessCertificationCase) o; + return Objects.equals(ownerOid, that.ownerOid) + && Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hash(ownerOid, id); + } @Override public String toString() { @@ -322,9 +336,9 @@ public static RAccessCertificationCase toRepo(String ownerOid, AccessCertificati return rCase; } - private static RAccessCertificationCase toRepo(RAccessCertificationCase rCase, AccessCertificationCaseType case1, - RepositoryContext context) throws DtoTranslationException { - rCase.setTransient(null); // we don't try to advise hibernate - let it do its work, even if it would cost some SELECTs + private static RAccessCertificationCase toRepo(RAccessCertificationCase rCase, + AccessCertificationCaseType case1, RepositoryContext context) throws DtoTranslationException { + rCase.setTransient(null); // we don't try to advise hibernate - let it do its work, even if it would cost some SELECTs rCase.setId(RUtil.toInteger(case1.getId())); rCase.setObjectRef(RUtil.jaxbRefToEmbeddedRepoRef(case1.getObjectRef(), context.relationRegistry)); rCase.setTargetRef(RUtil.jaxbRefToEmbeddedRepoRef(case1.getTargetRef(), context.relationRegistry)); @@ -376,6 +390,5 @@ public static AccessCertificationCaseType createJaxb(byte[] fullObject, PrismCon LOGGER.debug("Couldn't parse certification case because of unexpected exception ({}):\nData: {}", e, xml); throw e; } - //aCase.asPrismContainerValue().removeReference(AccessCertificationCaseType.F_CAMPAIGN_REF); } } diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RAssignment.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RAssignment.java index e6bc9e64888..270de14a5ee 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RAssignment.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RAssignment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2019 Evolveum and contributors + * Copyright (c) 2010-2020 Evolveum and contributors * * This work is dual-licensed under the Apache License 2.0 * and European Union Public License. See LICENSE file for details. @@ -7,6 +7,18 @@ package com.evolveum.midpoint.repo.sql.data.common.container; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; +import javax.persistence.*; +import javax.xml.datatype.XMLGregorianCalendar; + +import org.apache.commons.lang.Validate; +import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Persister; +import org.hibernate.annotations.Where; + import com.evolveum.midpoint.repo.sql.data.RepositoryContext; import com.evolveum.midpoint.repo.sql.data.common.Metadata; import com.evolveum.midpoint.repo.sql.data.common.RObject; @@ -21,51 +33,17 @@ import com.evolveum.midpoint.repo.sql.query.definition.JaxbPath; import com.evolveum.midpoint.repo.sql.query.definition.JaxbType; import com.evolveum.midpoint.repo.sql.query.definition.OwnerIdGetter; -import com.evolveum.midpoint.repo.sql.query.definition.QueryEntity; import com.evolveum.midpoint.repo.sql.query2.definition.IdQueryProperty; import com.evolveum.midpoint.repo.sql.query2.definition.NotQueryable; import com.evolveum.midpoint.repo.sql.util.DtoTranslationException; import com.evolveum.midpoint.repo.sql.util.IdGeneratorResult; import com.evolveum.midpoint.repo.sql.util.MidPointSingleTablePersister; import com.evolveum.midpoint.repo.sql.util.RUtil; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; -import org.apache.commons.lang.Validate; -import org.hibernate.annotations.*; -import javax.persistence.*; -import javax.persistence.Entity; -import javax.persistence.ForeignKey; -import javax.persistence.Index; -import javax.persistence.Table; -import javax.xml.datatype.XMLGregorianCalendar; -import java.util.HashSet; -import java.util.Set; - -/** - * @author lazyman - */ @JaxbType(type = AssignmentType.class) @Entity -@QueryEntity( - entities = { -// @VirtualEntity( -// jaxbName = @JaxbName(localPart = "metadata"), -// jaxbType = MetadataType.class, -// jpaName = "", -// jpaType = Serializable.class // dummy value (ignored) -// ) -// , -// @VirtualEntity( -// jaxbName = @JaxbName(localPart = "construction"), -// jaxbType = ConstructionType.class, -// jpaName = "", -// jpaType = Serializable.class // dummy value (ignored) -// ) - } -) @IdClass(RContainerId.class) // TODO prefix last 4 index names with "iAssignment" (some day) @Table(name = "m_assignment", indexes = { @@ -76,18 +54,11 @@ @Index(name = "iTargetRefTargetOid", columnList = "targetRef_targetOid"), @Index(name = "iTenantRefTargetOid", columnList = "tenantRef_targetOid"), @Index(name = "iOrgRefTargetOid", columnList = "orgRef_targetOid"), - @Index(name = "iResourceRefTargetOid", columnList = "resourceRef_targetOid")}) + @Index(name = "iResourceRefTargetOid", columnList = "resourceRef_targetOid") }) @Persister(impl = MidPointSingleTablePersister.class) -public class RAssignment implements Container, Metadata { +public class RAssignment implements Container, Metadata { public static final String F_OWNER = "owner"; - /** - * enum identifier of object class which owns this assignment. It's used because we have to - * distinguish between assignments and inducements (all of them are the same kind) in {@link com.evolveum.midpoint.repo.sql.data.common.RAbstractRole}. - */ - public static final String F_ASSIGNMENT_OWNER = "assignmentOwner"; - - private static final Trace LOGGER = TraceManager.getTrace(RAssignment.class); private Boolean trans; @@ -180,8 +151,8 @@ public REmbeddedReference getResourceRef() { } @com.evolveum.midpoint.repo.sql.query.definition.Any(jaxbNameLocalPart = "extension") - @OneToOne(optional = true, orphanRemoval = true) - @Cascade({org.hibernate.annotations.CascadeType.ALL}) + @OneToOne(orphanRemoval = true) + @Cascade({ org.hibernate.annotations.CascadeType.ALL }) @JoinColumns(value = { @JoinColumn(name = "extOid", referencedColumnName = "owner_owner_oid"), @JoinColumn(name = "extId", referencedColumnName = "owner_id") @@ -202,7 +173,7 @@ public Integer getOrder() { @Where(clause = RAssignmentReference.REFERENCE_TYPE + "= 0") @OneToMany(fetch = FetchType.LAZY, mappedBy = RAssignmentReference.F_OWNER, orphanRemoval = true) - @Cascade({org.hibernate.annotations.CascadeType.ALL}) + @Cascade({ org.hibernate.annotations.CascadeType.ALL }) @JaxbPath(itemPath = { @JaxbName(localPart = "metadata"), @JaxbName(localPart = "createApproverRef") }) public Set getCreateApproverRef() { if (createApproverRef == null) { @@ -235,7 +206,7 @@ public REmbeddedReference getModifierRef() { @Where(clause = RAssignmentReference.REFERENCE_TYPE + "= 1") @OneToMany(fetch = FetchType.LAZY, mappedBy = RAssignmentReference.F_OWNER, orphanRemoval = true) - @Cascade({org.hibernate.annotations.CascadeType.ALL}) + @Cascade({ org.hibernate.annotations.CascadeType.ALL }) @JaxbPath(itemPath = { @JaxbName(localPart = "metadata"), @JaxbName(localPart = "modifyApproverRef") }) public Set getModifyApproverRef() { if (modifyApproverRef == null) { @@ -268,10 +239,10 @@ public String getLifecycleState() { @CollectionTable(name = "m_assignment_policy_situation", foreignKey = @ForeignKey(name = "fk_assignment_policy_situation"), joinColumns = { - @JoinColumn(name = "assignment_oid", referencedColumnName = "owner_oid"), - @JoinColumn(name = "assignment_id", referencedColumnName = "id") - }) - @Cascade({org.hibernate.annotations.CascadeType.ALL}) + @JoinColumn(name = "assignment_oid", referencedColumnName = "owner_oid"), + @JoinColumn(name = "assignment_id", referencedColumnName = "id") + }) + @Cascade({ org.hibernate.annotations.CascadeType.ALL }) public Set getPolicySituation() { return policySituation; } @@ -280,7 +251,6 @@ public void setPolicySituation(Set policySituation) { this.policySituation = policySituation; } - public void setLifecycleState(String lifecycleState) { this.lifecycleState = lifecycleState; } @@ -382,27 +352,30 @@ public void setResourceRef(REmbeddedReference resourceRef) { this.resourceRef = resourceRef; } + /* @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 == null || getClass() != o.getClass()) { return false; } RAssignment that = (RAssignment) o; - if (activation != null ? !activation.equals(that.activation) : that.activation != null) return false; - if (extension != null ? !extension.equals(that.extension) : that.extension != null) return false; - if (targetRef != null ? !targetRef.equals(that.targetRef) : that.targetRef != null) return false; - if (assignmentOwner != null ? !assignmentOwner.equals(that.assignmentOwner) : that.assignmentOwner != null) + if (activation != null ? !activation.equals(that.activation) : that.activation != null) { return false; } + if (extension != null ? !extension.equals(that.extension) : that.extension != null) { return false; } + if (targetRef != null ? !targetRef.equals(that.targetRef) : that.targetRef != null) { return false; } + if (assignmentOwner != null ? !assignmentOwner.equals(that.assignmentOwner) : that.assignmentOwner != null) { return false; - if (order != null ? !order.equals(that.order) : that.order != null) + } + if (order != null ? !order.equals(that.order) : that.order != null) { return false; } + if (tenantRef != null ? !tenantRef.equals(that.tenantRef) : that.tenantRef != null) { return false; } + if (orgRef != null ? !orgRef.equals(that.orgRef) : that.orgRef != null) { return false; } + if (resourceRef != null ? !resourceRef.equals(that.resourceRef) : that.resourceRef != null) { return false; } + if (lifecycleState != null ? !lifecycleState.equals(that.lifecycleState) : that.lifecycleState != null) { return false; } + if (policySituation != null ? !policySituation.equals(that.policySituation) : that.policySituation != null) { return false; - if (tenantRef != null ? !tenantRef.equals(that.tenantRef) : that.tenantRef != null) return false; - if (orgRef != null ? !orgRef.equals(that.orgRef) : that.orgRef != null) return false; - if (resourceRef != null ? !resourceRef.equals(that.resourceRef) : that.resourceRef != null) return false; - if (lifecycleState != null ? !lifecycleState.equals(that.lifecycleState) : that.lifecycleState != null) return false; - if (policySituation != null ? !policySituation.equals(that.policySituation) : that.policySituation != null) return false; + } - if (!MetadataFactory.equals(this, that)) return false; + if (!MetadataFactory.equals(this, that)) { return false; } return true; } @@ -423,9 +396,29 @@ public int hashCode() { return result; } + */ + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof RAssignment)) { + return false; + } + + RAssignment that = (RAssignment) o; + return Objects.equals(ownerOid, that.ownerOid) + && Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hash(ownerOid, id); + } public static void fromJaxb(AssignmentType jaxb, RAssignment repo, RObject parent, - RepositoryContext repositoryContext) throws DtoTranslationException{ + RepositoryContext repositoryContext) throws DtoTranslationException { fromJaxb(jaxb, repo, repositoryContext, null); repo.setOwner(parent); } @@ -437,7 +430,7 @@ public static void fromJaxb(AssignmentType jaxb, RAssignment repo, ObjectType pa } private static void fromJaxb(AssignmentType jaxb, RAssignment repo, RepositoryContext repositoryContext, - IdGeneratorResult generatorResult) throws DtoTranslationException { + IdGeneratorResult generatorResult) throws DtoTranslationException { Validate.notNull(repo, "Repo object must not be null."); Validate.notNull(jaxb, "JAXB object must not be null."); diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/ROperationExecution.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/ROperationExecution.java index 82ed27f932f..56aa274b702 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/ROperationExecution.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/ROperationExecution.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2017 Evolveum and contributors + * Copyright (c) 2010-2020 Evolveum and contributors * * This work is dual-licensed under the Apache License 2.0 * and European Union Public License. See LICENSE file for details. @@ -7,6 +7,14 @@ package com.evolveum.midpoint.repo.sql.data.common.container; +import java.util.Objects; +import javax.persistence.*; +import javax.xml.datatype.XMLGregorianCalendar; + +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Persister; +import org.jetbrains.annotations.NotNull; + import com.evolveum.midpoint.repo.sql.data.RepositoryContext; import com.evolveum.midpoint.repo.sql.data.common.RObject; import com.evolveum.midpoint.repo.sql.data.common.embedded.REmbeddedReference; @@ -21,21 +29,9 @@ import com.evolveum.midpoint.repo.sql.util.IdGeneratorResult; import com.evolveum.midpoint.repo.sql.util.MidPointSingleTablePersister; import com.evolveum.midpoint.repo.sql.util.RUtil; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationExecutionType; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Persister; -import org.jetbrains.annotations.NotNull; -import javax.persistence.*; -import javax.xml.datatype.XMLGregorianCalendar; -import java.util.Objects; - -/** - * @author mederly - */ @JaxbType(type = OperationExecutionType.class) @Entity @QueryEntity @@ -45,14 +41,10 @@ @Index(name = "iOpExecInitiatorOid", columnList = "initiatorRef_targetOid"), @Index(name = "iOpExecStatus", columnList = "status"), @Index(name = "iOpExecStatus", columnList = "status"), - @Index(name = "iOpExecOwnerOid", columnList = "owner_oid")}) + @Index(name = "iOpExecOwnerOid", columnList = "owner_oid") }) @Persister(impl = MidPointSingleTablePersister.class) public class ROperationExecution implements Container { - public static final String F_OWNER = "owner"; - - private static final Trace LOGGER = TraceManager.getTrace(ROperationExecution.class); - private Boolean trans; private RObject owner; @@ -160,42 +152,21 @@ public void setTransient(Boolean trans) { this.trans = trans; } - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (!(o instanceof ROperationExecution)) - return false; - ROperationExecution that = (ROperationExecution) o; - return Objects.equals(trans, that.trans) && - Objects.equals(getOwnerOid(), that.getOwnerOid()) && - Objects.equals(id, that.id) && - Objects.equals(initiatorRef, that.initiatorRef) && - Objects.equals(taskRef, that.taskRef) && - Objects.equals(timestamp, that.timestamp) && - status == that.status; - } - - @Override - public int hashCode() { - return Objects.hash(trans, getOwnerOid(), id, initiatorRef, taskRef, status); - } - public static void fromJaxb(@NotNull OperationExecutionType jaxb, @NotNull ROperationExecution repo, - RObject parent, RepositoryContext repositoryContext) throws DtoTranslationException { + RObject parent, RepositoryContext repositoryContext) throws DtoTranslationException { repo.setOwner(parent); fromJaxb(jaxb, repo, repositoryContext, null); } public static void fromJaxb(@NotNull OperationExecutionType jaxb, @NotNull ROperationExecution repo, ObjectType parent, RepositoryContext repositoryContext, - IdGeneratorResult generatorResult) throws DtoTranslationException { + IdGeneratorResult generatorResult) { repo.setOwnerOid(parent.getOid()); fromJaxb(jaxb, repo, repositoryContext, generatorResult); } private static void fromJaxb(@NotNull OperationExecutionType jaxb, @NotNull ROperationExecution repo, - RepositoryContext repositoryContext, IdGeneratorResult generatorResult) throws DtoTranslationException { + RepositoryContext repositoryContext, IdGeneratorResult generatorResult) { if (generatorResult != null) { repo.setTransient(generatorResult.isTransient(jaxb.asPrismContainerValue())); } @@ -206,6 +177,25 @@ private static void fromJaxb(@NotNull OperationExecutionType jaxb, @NotNull ROpe repo.setTimestamp(jaxb.getTimestamp()); } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof ROperationExecution)) { + return false; + } + + ROperationExecution that = (ROperationExecution) o; + return Objects.equals(ownerOid, that.ownerOid) + && Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hash(ownerOid, id); + } + @Override public String toString() { return "ROperationExecution{" + diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RTrigger.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RTrigger.java index 2592ce3a48d..65489903765 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RTrigger.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/container/RTrigger.java @@ -1,11 +1,18 @@ /* - * Copyright (c) 2010-2019 Evolveum and contributors + * Copyright (c) 2010-2020 Evolveum and contributors * * This work is dual-licensed under the Apache License 2.0 * and European Union Public License. See LICENSE file for details. */ package com.evolveum.midpoint.repo.sql.data.common.container; +import java.util.Objects; +import javax.persistence.*; +import javax.xml.datatype.XMLGregorianCalendar; + +import org.apache.commons.lang.Validate; +import org.hibernate.annotations.GenericGenerator; + import com.evolveum.midpoint.repo.sql.data.RepositoryContext; import com.evolveum.midpoint.repo.sql.data.common.RObject; import com.evolveum.midpoint.repo.sql.data.common.id.RContainerId; @@ -18,16 +25,11 @@ import com.evolveum.midpoint.repo.sql.util.RUtil; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.TriggerType; -import org.apache.commons.lang.Validate; -import org.hibernate.annotations.GenericGenerator; - -import javax.persistence.*; -import javax.xml.datatype.XMLGregorianCalendar; @JaxbType(type = TriggerType.class) @Entity @IdClass(RContainerId.class) -@Table(indexes = {@Index(name = "iTriggerTimestamp", columnList = RTrigger.C_TIMESTAMP)}) +@Table(indexes = { @Index(name = "iTriggerTimestamp", columnList = RTrigger.C_TIMESTAMP) }) public class RTrigger implements Container { public static final String F_OWNER = "owner"; @@ -120,28 +122,24 @@ public void setHandlerUri(String handlerUri) { @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 RTrigger)) { + return false; + } RTrigger that = (RTrigger) o; - - if (handlerUri != null ? !handlerUri.equals(that.handlerUri) : - that.handlerUri != null) return false; - if (timestamp != null ? !timestamp.equals(that.timestamp) : - that.timestamp != null) return false; - - return true; + return Objects.equals(ownerOid, that.ownerOid) + && Objects.equals(id, that.id); } @Override public int hashCode() { - int result = handlerUri != null ? handlerUri.hashCode() : 0; - result = 31 * result + (timestamp != null ? timestamp.hashCode() : 0); - return result; + return Objects.hash(ownerOid, id); } - public static void copyToJAXB(RTrigger repo, TriggerType jaxb) throws - DtoTranslationException { + public static void copyToJAXB(RTrigger repo, TriggerType jaxb) { Validate.notNull(repo, "Repo object must not be null."); Validate.notNull(jaxb, "JAXB object must not be null."); @@ -158,14 +156,13 @@ public static void fromJaxb(TriggerType jaxb, RTrigger repo, RObject parent, } public static void fromJaxb(TriggerType jaxb, RTrigger repo, ObjectType parent, - RepositoryContext repositoryContext, IdGeneratorResult generatorResult) - throws DtoTranslationException { + RepositoryContext repositoryContext, IdGeneratorResult generatorResult) { repo.setOwnerOid(parent.getOid()); fromJaxb(jaxb, repo, repositoryContext, generatorResult); } private static void fromJaxb(TriggerType jaxb, RTrigger repo, RepositoryContext repositoryContext, - IdGeneratorResult generatorResult) throws DtoTranslationException { + IdGeneratorResult generatorResult) { Validate.notNull(repo, "Repo object must not be null."); Validate.notNull(jaxb, "JAXB object must not be null."); @@ -179,7 +176,7 @@ private static void fromJaxb(TriggerType jaxb, RTrigger repo, RepositoryContext repo.setTimestamp(jaxb.getTimestamp()); } - public TriggerType toJAXB() throws DtoTranslationException { + public TriggerType toJAXB() { TriggerType object = new TriggerType(); RTrigger.copyToJAXB(this, object); return object; diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RContainerId.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RContainerId.java index 00e2531f6a4..04c5bc2c49c 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RContainerId.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/id/RContainerId.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2013 Evolveum and contributors + * Copyright (c) 2010-2020 Evolveum and contributors * * This work is dual-licensed under the Apache License 2.0 * and European Union Public License. See LICENSE file for details. @@ -8,22 +8,17 @@ package com.evolveum.midpoint.repo.sql.data.common.id; import java.io.Serializable; +import java.util.Objects; -/** - * @author lazyman - */ public class RContainerId implements Serializable { private String ownerOid; private Integer id; + @SuppressWarnings("unused") public RContainerId() { } - public RContainerId(String oid) { - this(0, oid); - } - public RContainerId(Integer id, String oid) { this.id = id; this.ownerOid = oid; @@ -47,22 +42,21 @@ public void setOwnerOid(String oid) { @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 RContainerId)) { + return false; + } RContainerId that = (RContainerId) o; - - if (id != null ? !id.equals(that.id) : that.id != null) return false; - if (ownerOid != null ? !ownerOid.equals(that.ownerOid) : that.ownerOid != null) return false; - - return true; + return Objects.equals(ownerOid, that.ownerOid) + && Objects.equals(id, that.id); } @Override public int hashCode() { - int result = ownerOid != null ? ownerOid.hashCode() : 0; - result = 31 * result + (id != null ? id.hashCode() : 0); - return result; + return Objects.hash(ownerOid, id); } @Override diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/other/RLookupTableRow.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/other/RLookupTableRow.java index 7c2ad24236e..6ac32806b43 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/other/RLookupTableRow.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/data/common/other/RLookupTableRow.java @@ -1,11 +1,18 @@ /* - * Copyright (c) 2010-2019 Evolveum and contributors + * Copyright (c) 2010-2020 Evolveum and contributors * * This work is dual-licensed under the Apache License 2.0 * and European Union Public License. See LICENSE file for details. */ package com.evolveum.midpoint.repo.sql.data.common.other; +import java.util.Date; +import java.util.Objects; +import javax.persistence.*; +import javax.xml.datatype.XMLGregorianCalendar; + +import org.hibernate.annotations.GenericGenerator; + import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.repo.sql.data.common.RLookupTable; import com.evolveum.midpoint.repo.sql.data.common.container.Container; @@ -19,25 +26,11 @@ import com.evolveum.midpoint.repo.sql.util.RUtil; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableRowType; -import org.hibernate.annotations.GenericGenerator; - -import javax.persistence.*; -import javax.xml.datatype.XMLGregorianCalendar; -import java.util.Date; -/** - * @author Viliam Repan (lazyman) - */ @Ignore @Entity -@Table(indexes = { -//todo create indexes after lookup api is created (when we know how we will search through lookup table [lazyman] -// @Index(name = "iRowKey", columnList = "key"), -// @Index(name = "iRowLabelOrig", columnList = "label.orig"), -// @Index(name = "iRowLabelNorm", columnList = "label.norm") -}, -uniqueConstraints = { - @UniqueConstraint(name = "uc_row_key", columnNames = {"owner_oid", "row_key"}) +@Table(uniqueConstraints = { + @UniqueConstraint(name = "uc_row_key", columnNames = { "owner_oid", "row_key" }) }) @IdClass(RContainerId.class) public class RLookupTableRow implements Container { @@ -75,6 +68,7 @@ public String getOwnerOid() { } public static final String ID_COLUMN_NAME = "id"; + @Id @GeneratedValue(generator = "ContainerIdGenerator") @GenericGenerator(name = "ContainerIdGenerator", strategy = "com.evolveum.midpoint.repo.sql.util.ContainerIdGenerator") @@ -145,31 +139,6 @@ public void setTransient(Boolean trans) { this.trans = trans; } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - RLookupTableRow that = (RLookupTableRow) o; - - if (key != null ? !key.equals(that.key) : that.key != null) return false; - if (label != null ? !label.equals(that.label) : that.label != null) return false; - if (lastChangeTimestamp != null ? !lastChangeTimestamp.equals(that.lastChangeTimestamp) : that.lastChangeTimestamp != null) - return false; - if (value != null ? !value.equals(that.value) : that.value != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = key != null ? key.hashCode() : 0; - result = 31 * result + (value != null ? value.hashCode() : 0); - result = 31 * result + (label != null ? label.hashCode() : 0); - result = 31 * result + (lastChangeTimestamp != null ? lastChangeTimestamp.hashCode() : 0); - return result; - } - public LookupTableRowType toJAXB(PrismContext prismContext) { LookupTableRowType row = new LookupTableRowType(); row.setId(Long.valueOf(id)); @@ -212,6 +181,25 @@ private static RLookupTableRow toRepo(LookupTableRowType row) throws SchemaExcep return rRow; } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof RLookupTableRow)) { + return false; + } + + RLookupTableRow that = (RLookupTableRow) o; + return Objects.equals(ownerOid, that.ownerOid) + && Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hash(ownerOid, id); + } + @Override public String toString() { return "RLookupTableRow{" +