This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push: new 587d300474 Consolidating labels into SyncopeSchema to save some joins (#394) 587d300474 is described below commit 587d3004746f761c18616d3f01f71cdd3186ce23 Author: Francesco Chicchiriccò <ilgro...@users.noreply.github.com> AuthorDate: Wed Nov 23 11:49:38 2022 +0100 Consolidating labels into SyncopeSchema to save some joins (#394) --- .../syncope/common/lib/policy/AccessPolicyTO.java | 3 +- .../common/lib/policy/AttrReleasePolicyTO.java | 3 +- .../syncope/common/lib/policy/AuthPolicyTO.java | 3 +- .../syncope/common/lib/to/CASSPClientAppTO.java | 17 ++--- .../apache/syncope/common/lib/to/ClientAppTO.java | 2 +- .../syncope/common/lib/to/OIDCRPClientAppTO.java | 3 +- .../syncope/common/lib/to/SAML2SPClientAppTO.java | 3 +- .../common/lib/policy/PropagationPolicyTO.java | 3 +- .../common/lib/policy/ProvisioningPolicyTO.java | 3 +- .../syncope/common/lib/policy/PullPolicyTO.java | 3 +- .../syncope/common/lib/policy/PushPolicyTO.java | 3 +- .../syncope/common/lib/policy/AccountPolicyTO.java | 3 +- .../common/lib/policy/PasswordPolicyTO.java | 3 +- .../apache/syncope/common/lib/policy/PolicyTO.java | 2 +- .../apache/syncope/common/lib/request/AnyCR.java | 2 +- .../syncope/common/lib/request/AnyObjectCR.java | 3 +- .../syncope/common/lib/request/AnyObjectUR.java | 3 +- .../apache/syncope/common/lib/request/AnyUR.java | 2 +- .../apache/syncope/common/lib/request/GroupCR.java | 3 +- .../apache/syncope/common/lib/request/GroupUR.java | 3 +- .../apache/syncope/common/lib/request/UserCR.java | 3 +- .../apache/syncope/common/lib/request/UserUR.java | 3 +- .../apache/syncope/common/lib/to/AnyObjectTO.java | 3 +- .../org/apache/syncope/common/lib/to/AnyTO.java | 2 +- .../apache/syncope/common/lib/to/DerSchemaTO.java | 3 +- .../org/apache/syncope/common/lib/to/GroupTO.java | 3 +- .../apache/syncope/common/lib/to/MacroTaskTO.java | 3 +- .../syncope/common/lib/to/NotificationTaskTO.java | 3 +- .../syncope/common/lib/to/PlainSchemaTO.java | 3 +- .../syncope/common/lib/to/PropagationTaskTO.java | 3 +- .../apache/syncope/common/lib/to/PullTaskTO.java | 3 +- .../apache/syncope/common/lib/to/PushTaskTO.java | 3 +- .../apache/syncope/common/lib/to/SchedTaskTO.java | 3 +- .../org/apache/syncope/common/lib/to/SchemaTO.java | 2 +- .../org/apache/syncope/common/lib/to/TaskTO.java | 2 +- .../org/apache/syncope/common/lib/to/UserTO.java | 3 +- .../apache/syncope/common/lib/to/VirSchemaTO.java | 3 +- .../org/apache/syncope/core/logic/SchemaLogic.java | 51 ++++++-------- .../core/persistence/api/entity/Schema.java | 8 +-- .../core/persistence/api/entity/SchemaLabel.java | 36 ---------- .../src/test/resources/domains/MasterContent.xml | 9 +-- .../core/persistence/jpa/dao/JPADerSchemaDAO.java | 7 +- .../persistence/jpa/dao/JPAPlainSchemaDAO.java | 3 +- .../core/persistence/jpa/dao/JPAVirSchemaDAO.java | 7 +- .../persistence/jpa/entity/AbstractSchema.java | 66 +++++++++++++----- .../persistence/jpa/entity/JPAEntityFactory.java | 3 - .../persistence/jpa/entity/JPASchemaLabel.java | 78 ---------------------- .../persistence/jpa/outer/PlainSchemaTest.java | 9 --- .../src/test/resources/domains/MasterContent.xml | 9 +-- .../java/data/SchemaDataBinderImpl.java | 49 +++----------- pom.xml | 2 +- 51 files changed, 169 insertions(+), 286 deletions(-) diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AccessPolicyTO.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AccessPolicyTO.java index ed672a7137..b988657e71 100644 --- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AccessPolicyTO.java +++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AccessPolicyTO.java @@ -45,7 +45,8 @@ public class AccessPolicyTO extends PolicyTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.policy.AccessPolicyTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.policy.AccessPolicyTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AttrReleasePolicyTO.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AttrReleasePolicyTO.java index f684518bad..4d37215fde 100644 --- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AttrReleasePolicyTO.java +++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AttrReleasePolicyTO.java @@ -35,7 +35,8 @@ public class AttrReleasePolicyTO extends PolicyTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.policy.AttrReleasePolicyTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.policy.AttrReleasePolicyTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AuthPolicyTO.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AuthPolicyTO.java index 575b1263e6..1753816fac 100644 --- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AuthPolicyTO.java +++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/policy/AuthPolicyTO.java @@ -31,7 +31,8 @@ public class AuthPolicyTO extends PolicyTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.policy.AuthPolicyTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.policy.AuthPolicyTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/CASSPClientAppTO.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/CASSPClientAppTO.java index e8b648023d..60589f4e41 100644 --- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/CASSPClientAppTO.java +++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/CASSPClientAppTO.java @@ -24,7 +24,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; -@Schema(allOf = {ClientAppTO.class}) +@Schema(allOf = { ClientAppTO.class }) public class CASSPClientAppTO extends ClientAppTO { private static final long serialVersionUID = -5370888503924521351L; @@ -41,7 +41,8 @@ public class CASSPClientAppTO extends ClientAppTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.client.CASSPTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.client.CASSPTO") @Override public String getDiscriminator() { return getClass().getName(); @@ -60,16 +61,16 @@ public class CASSPClientAppTO extends ClientAppTO { } CASSPClientAppTO rhs = (CASSPClientAppTO) obj; return new EqualsBuilder() - .appendSuper(super.equals(obj)) - .append(this.serviceId, rhs.serviceId) - .isEquals(); + .appendSuper(super.equals(obj)) + .append(this.serviceId, rhs.serviceId) + .isEquals(); } @Override public int hashCode() { return new HashCodeBuilder() - .appendSuper(super.hashCode()) - .append(this.serviceId) - .toHashCode(); + .appendSuper(super.hashCode()) + .append(this.serviceId) + .toHashCode(); } } diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/ClientAppTO.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/ClientAppTO.java index 4b680cc62a..e1daf364a0 100644 --- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/ClientAppTO.java +++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/ClientAppTO.java @@ -63,7 +63,7 @@ public abstract class ClientAppTO implements NamedEntityTO { private final List<Attr> properties = new ArrayList<>(); - @Schema(name = "_class", required = true) + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED) public abstract String getDiscriminator(); public void setDiscriminator(final String discriminator) { diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/OIDCRPClientAppTO.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/OIDCRPClientAppTO.java index 80d35821f3..a40eae7aac 100644 --- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/OIDCRPClientAppTO.java +++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/OIDCRPClientAppTO.java @@ -57,7 +57,8 @@ public class OIDCRPClientAppTO extends ClientAppTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.client.OIDCRPTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.client.OIDCRPTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/SAML2SPClientAppTO.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/SAML2SPClientAppTO.java index 61a0f39680..7887bbcd21 100644 --- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/SAML2SPClientAppTO.java +++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/SAML2SPClientAppTO.java @@ -74,7 +74,8 @@ public class SAML2SPClientAppTO extends ClientAppTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.client.SAML2SPTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.client.SAML2SPTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PropagationPolicyTO.java b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PropagationPolicyTO.java index 19e27279ad..4a598c628b 100644 --- a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PropagationPolicyTO.java +++ b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PropagationPolicyTO.java @@ -40,7 +40,8 @@ public class PropagationPolicyTO extends PolicyTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.policy.PropagationPolicyTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.policy.PropagationPolicyTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/ProvisioningPolicyTO.java b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/ProvisioningPolicyTO.java index 5dd01226b2..daf2702656 100644 --- a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/ProvisioningPolicyTO.java +++ b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/ProvisioningPolicyTO.java @@ -39,7 +39,8 @@ public abstract class ProvisioningPolicyTO extends PolicyTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.policy.ProvisioningPolicyTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.policy.ProvisioningPolicyTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PullPolicyTO.java b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PullPolicyTO.java index 1cd2939870..6fec12716c 100644 --- a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PullPolicyTO.java +++ b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PullPolicyTO.java @@ -29,7 +29,8 @@ public class PullPolicyTO extends ProvisioningPolicyTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.policy.PullPolicyTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.policy.PullPolicyTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PushPolicyTO.java b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PushPolicyTO.java index 8b958d4c3e..fc52b71b0b 100644 --- a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PushPolicyTO.java +++ b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/policy/PushPolicyTO.java @@ -29,7 +29,8 @@ public class PushPolicyTO extends ProvisioningPolicyTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.policy.PushPolicyTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.policy.PushPolicyTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/AccountPolicyTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/AccountPolicyTO.java index fee5590e5c..e3c1b273d6 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/AccountPolicyTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/AccountPolicyTO.java @@ -40,7 +40,8 @@ public class AccountPolicyTO extends PolicyTO implements ComposablePolicy { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.policy.AccountPolicyTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.policy.AccountPolicyTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/PasswordPolicyTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/PasswordPolicyTO.java index a73fe92f94..2dd3a9b799 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/PasswordPolicyTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/PasswordPolicyTO.java @@ -40,7 +40,8 @@ public class PasswordPolicyTO extends PolicyTO implements ComposablePolicy { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.policy.PasswordPolicyTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.policy.PasswordPolicyTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/PolicyTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/PolicyTO.java index 4bd405a57b..738904cf86 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/PolicyTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/PolicyTO.java @@ -50,7 +50,7 @@ public abstract class PolicyTO implements NamedEntityTO { private final List<String> usedByRealms = new ArrayList<>(); - @Schema(name = "_class", required = true) + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED) public abstract String getDiscriminator(); public void setDiscriminator(final String discriminator) { diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java index 7b65838076..e577607e2e 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java @@ -151,7 +151,7 @@ public abstract class AnyCR implements BaseBean, RealmMember { private final Set<String> resources = new HashSet<>(); - @Schema(name = "_class", required = true) + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED) public abstract String getDiscriminator(); public void setDiscriminator(final String discriminator) { diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectCR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectCR.java index abc014ef82..701ed11b71 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectCR.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectCR.java @@ -94,7 +94,8 @@ public class AnyObjectCR extends AnyCR implements GroupableRelatableTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.request.AnyObjectCR") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.request.AnyObjectCR") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectUR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectUR.java index 893852eb4f..6064c85847 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectUR.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyObjectUR.java @@ -89,7 +89,8 @@ public class AnyObjectUR extends AnyUR { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.request.AnyObjectUR") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.request.AnyObjectUR") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java index cf92b34c34..1050b4314e 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java @@ -158,7 +158,7 @@ public abstract class AnyUR implements BaseBean { private final Set<StringPatchItem> resources = new HashSet<>(); - @Schema(name = "_class", required = true) + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED) public abstract String getDiscriminator(); public void setDiscriminator(final String discriminator) { diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupCR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupCR.java index c47edbb300..bcf529504d 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupCR.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupCR.java @@ -100,7 +100,8 @@ public class GroupCR extends AnyCR { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.request.GroupCR") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.request.GroupCR") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupUR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupUR.java index c6e9f253f9..147c3cb048 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupUR.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/GroupUR.java @@ -109,7 +109,8 @@ public class GroupUR extends AnyUR { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.request.GroupUR") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.request.GroupUR") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java index 666cf748ef..fb141c16c6 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java @@ -163,7 +163,8 @@ public class UserCR extends AnyCR implements GroupableRelatableTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.request.UserCR") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.request.UserCR") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java index dd57c97e22..6bda4c36a1 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java @@ -137,7 +137,8 @@ public class UserUR extends AnyUR { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.request.UserUR") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.request.UserUR") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java index affa16721b..4975086601 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java @@ -44,7 +44,8 @@ public class AnyObjectTO extends AnyTO implements GroupableRelatableTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.AnyObjectTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.AnyObjectTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java index 071256faa4..859766ecb3 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java @@ -92,7 +92,7 @@ public abstract class AnyTO implements EntityTO, RealmMember { private final Set<String> resources = new TreeSet<>(); - @Schema(name = "_class", required = true) + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED) public abstract String getDiscriminator(); public void setDiscriminator(final String discriminator) { diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/DerSchemaTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/DerSchemaTO.java index b467ce24bf..08eb254dc3 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/DerSchemaTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/DerSchemaTO.java @@ -33,7 +33,8 @@ public class DerSchemaTO extends SchemaTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.DerSchemaTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.DerSchemaTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java index c0a1005514..71c1106932 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java @@ -59,7 +59,8 @@ public class GroupTO extends AnyTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.GroupTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.GroupTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/MacroTaskTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/MacroTaskTO.java index 01bf44eb6f..8f9277851c 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/MacroTaskTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/MacroTaskTO.java @@ -43,7 +43,8 @@ public class MacroTaskTO extends SchedTaskTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.MacroTaskTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.MacroTaskTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTaskTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTaskTO.java index 1036ed565b..bcc36b4ab7 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTaskTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTaskTO.java @@ -56,7 +56,8 @@ public class NotificationTaskTO extends TaskTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.NotificationTaskTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.NotificationTaskTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PlainSchemaTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PlainSchemaTO.java index 5525b5b7c7..4b115ccc5b 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PlainSchemaTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PlainSchemaTO.java @@ -58,7 +58,8 @@ public class PlainSchemaTO extends SchemaTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.PlainSchemaTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.PlainSchemaTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PropagationTaskTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PropagationTaskTO.java index e831fdb8bc..e90bfc65e5 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PropagationTaskTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PropagationTaskTO.java @@ -53,7 +53,8 @@ public class PropagationTaskTO extends TaskTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.PropagationTaskTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.PropagationTaskTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PullTaskTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PullTaskTO.java index 425eb281b5..d393512e06 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PullTaskTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PullTaskTO.java @@ -44,7 +44,8 @@ public class PullTaskTO extends ProvisioningTaskTO implements TemplatableTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.PullTaskTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.PullTaskTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java index 6c41491d70..abf91f65fc 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java @@ -38,7 +38,8 @@ public class PushTaskTO extends ProvisioningTaskTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.PushTaskTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.PushTaskTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/SchedTaskTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/SchedTaskTO.java index 054d6531dd..cb3e47a658 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/SchedTaskTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/SchedTaskTO.java @@ -50,7 +50,8 @@ public class SchedTaskTO extends TaskTO implements NamedEntityTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.SchedTaskTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.SchedTaskTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/SchemaTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/SchemaTO.java index ed102c7a30..7d32b5d753 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/SchemaTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/SchemaTO.java @@ -48,7 +48,7 @@ public abstract class SchemaTO implements EntityTO { private final Map<Locale, String> labels = new HashMap<>(); - @Schema(name = "_class", required = true) + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED) public abstract String getDiscriminator(); public void setDiscriminator(final String discriminator) { diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/TaskTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/TaskTO.java index 0f55ada540..baf9b86f3e 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/TaskTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/TaskTO.java @@ -53,7 +53,7 @@ public abstract class TaskTO extends AbstractStartEndBean implements EntityTO { private final List<ExecTO> executions = new ArrayList<>(); - @Schema(name = "_class", required = true) + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED) public abstract String getDiscriminator(); public void setDiscriminator(final String discriminator) { diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java index 4c547d7440..776fd5e019 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java @@ -80,7 +80,8 @@ public class UserTO extends AnyTO implements GroupableRelatableTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.UserTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.UserTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java index 7150ff34b4..79723119b4 100644 --- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java +++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/VirSchemaTO.java @@ -39,7 +39,8 @@ public class VirSchemaTO extends SchemaTO { @JacksonXmlProperty(localName = "_class", isAttribute = true) @JsonProperty("_class") - @Schema(name = "_class", required = true, example = "org.apache.syncope.common.lib.to.VirSchemaTO") + @Schema(name = "_class", requiredMode = Schema.RequiredMode.REQUIRED, + example = "org.apache.syncope.common.lib.to.VirSchemaTO") @Override public String getDiscriminator() { return getClass().getName(); diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java index 0b03aced85..531b7e9ff4 100644 --- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java +++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java @@ -113,19 +113,16 @@ public class SchemaLogic extends AbstractTransactionalLogic<SchemaTO> { T created; switch (schemaType) { case VIRTUAL: - VirSchema virSchema = virSchemaDAO.save(binder.create((VirSchemaTO) schemaTO)); - created = (T) binder.getVirSchemaTO(virSchema.getKey()); + created = (T) binder.getVirSchemaTO(binder.create((VirSchemaTO) schemaTO).getKey()); break; case DERIVED: - DerSchema derSchema = derSchemaDAO.save(binder.create((DerSchemaTO) schemaTO)); - created = (T) binder.getDerSchemaTO(derSchema.getKey()); + created = (T) binder.getDerSchemaTO(binder.create((DerSchemaTO) schemaTO).getKey()); break; case PLAIN: default: - PlainSchema plainSchema = plainSchemaDAO.save(binder.create((PlainSchemaTO) schemaTO)); - created = (T) binder.getPlainSchemaTO(plainSchema.getKey()); + created = (T) binder.getPlainSchemaTO(binder.create((PlainSchemaTO) schemaTO).getKey()); } return created; } @@ -175,18 +172,18 @@ public class SchemaLogic extends AbstractTransactionalLogic<SchemaTO> { switch (schemaType) { case VIRTUAL: result = (classes.isEmpty() - ? keyword == null - ? virSchemaDAO.findAll() - : virSchemaDAO.findByKeyword(keyword) + ? Optional.ofNullable(keyword). + map(k -> virSchemaDAO.findByKeyword(k)). + orElseGet(() -> virSchemaDAO.findAll()) : virSchemaDAO.findByAnyTypeClasses(classes)).stream(). map(schema -> (T) binder.getVirSchemaTO(schema.getKey())).collect(Collectors.toList()); break; case DERIVED: result = (classes.isEmpty() - ? keyword == null - ? derSchemaDAO.findAll() - : derSchemaDAO.findByKeyword(keyword) + ? Optional.ofNullable(keyword). + map(k -> derSchemaDAO.findByKeyword(k)). + orElseGet(() -> derSchemaDAO.findAll()) : derSchemaDAO.findByAnyTypeClasses(classes)).stream(). map(schema -> (T) binder.getDerSchemaTO(schema.getKey())).collect(Collectors.toList()); break; @@ -194,9 +191,9 @@ public class SchemaLogic extends AbstractTransactionalLogic<SchemaTO> { case PLAIN: default: result = (classes.isEmpty() - ? keyword == null - ? plainSchemaDAO.findAll() - : plainSchemaDAO.findByKeyword(keyword) + ? Optional.ofNullable(keyword). + map(k -> plainSchemaDAO.findByKeyword(k)). + orElseGet(() -> plainSchemaDAO.findAll()) : plainSchemaDAO.findByAnyTypeClasses(classes)).stream(). map(schema -> (T) binder.getPlainSchemaTO(schema.getKey())).collect(Collectors.toList()); } @@ -233,31 +230,25 @@ public class SchemaLogic extends AbstractTransactionalLogic<SchemaTO> { switch (schemaType) { case VIRTUAL: - VirSchema virSchema = virSchemaDAO.find(schemaTO.getKey()); - if (virSchema == null) { - throw new NotFoundException("Virtual Schema '" + schemaTO.getKey() + '\''); - } + VirSchema virSchema = Optional.ofNullable(virSchemaDAO.find(schemaTO.getKey())). + orElseThrow(() -> new NotFoundException("Virtual Schema '" + schemaTO.getKey() + '\'')); - virSchemaDAO.save(binder.update((VirSchemaTO) schemaTO, virSchema)); + binder.update((VirSchemaTO) schemaTO, virSchema); break; case DERIVED: - DerSchema derSchema = derSchemaDAO.find(schemaTO.getKey()); - if (derSchema == null) { - throw new NotFoundException("Derived schema '" + schemaTO.getKey() + '\''); - } + DerSchema derSchema = Optional.ofNullable(derSchemaDAO.find(schemaTO.getKey())). + orElseThrow(() -> new NotFoundException("Derived Schema '" + schemaTO.getKey() + '\'')); - derSchemaDAO.save(binder.update((DerSchemaTO) schemaTO, derSchema)); + binder.update((DerSchemaTO) schemaTO, derSchema); break; case PLAIN: default: - PlainSchema plainSchema = plainSchemaDAO.find(schemaTO.getKey()); - if (plainSchema == null) { - throw new NotFoundException("Schema '" + schemaTO.getKey() + '\''); - } + PlainSchema plainSchema = Optional.ofNullable(plainSchemaDAO.find(schemaTO.getKey())). + orElseThrow(() -> new NotFoundException("Plain Schema '" + schemaTO.getKey() + '\'')); - plainSchemaDAO.save(binder.update((PlainSchemaTO) schemaTO, plainSchema)); + binder.update((PlainSchemaTO) schemaTO, plainSchema); } } diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Schema.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Schema.java index ec80bae1cf..bb271b1b4a 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Schema.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Schema.java @@ -18,8 +18,8 @@ */ package org.apache.syncope.core.persistence.api.entity; -import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Optional; import org.apache.syncope.common.lib.types.AttrSchemaType; @@ -39,9 +39,7 @@ public interface Schema extends ProvidedKeyEntity { boolean isUniqueConstraint(); - boolean add(SchemaLabel label); + Optional<String> getLabel(Locale locale); - Optional<? extends SchemaLabel> getLabel(Locale locale); - - List<? extends SchemaLabel> getLabels(); + Map<Locale, String> getLabels(); } diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/SchemaLabel.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/SchemaLabel.java deleted file mode 100644 index 1ba2f7c5f4..0000000000 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/SchemaLabel.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 org.apache.syncope.core.persistence.api.entity; - -import java.util.Locale; - -public interface SchemaLabel extends Entity { - - Schema getSchema(); - - void setSchema(Schema schema); - - Locale getLocale(); - - void setLocale(Locale locale); - - String getDisplay(); - - void setDisplay(String display); -} diff --git a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml index 942bf5e987..bd3532be8a 100644 --- a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml +++ b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml @@ -132,17 +132,12 @@ under the License. <PlainSchema id="loginDate" type="Date" anyTypeClass_id="other" mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0" conversionPattern="yyyy-MM-dd"/> - <SyncopeSchema id="firstname"/> + <SyncopeSchema id="firstname" labels='{"en":"Firstname","it":"Nome","pt_BR":"Nome"}'/> <PlainSchema id="firstname" type="String" anyTypeClass_id="minimal user" mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/> - <SchemaLabel id="d90f90d0-cf15-407e-bac7-d46a8eb57c05" schema_id="firstname" locale="en" display="Firstname"/> - <SchemaLabel id="a9465ef0-b8b4-4af4-840d-77031a6b54a0" schema_id="firstname" locale="it" display="Nome"/> - <SchemaLabel id="ac8b7383-62df-490d-9364-88dbd3d301aa" schema_id="firstname" locale="pt_BR" display="Nome"/> - <SyncopeSchema id="surname"/> + <SyncopeSchema id="surname" labels='{"en":"Surname","it":"Cognome"}'/> <PlainSchema id="surname" type="String" anyTypeClass_id="minimal user" mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> - <SchemaLabel id="69712058-162a-4e2a-b07e-c78d82dc286d" schema_id="surname" locale="en" display="Surname"/> - <SchemaLabel id="77e7bbbb-d30c-47e1-b6d2-e0a9e8c11fe2" schema_id="surname" locale="it" display="Cognome"/> <SyncopeSchema id="ctype"/> <PlainSchema id="ctype" type="String" anyTypeClass_id="other" mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/> diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java index 555f538b81..9bd1393e95 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java @@ -72,8 +72,9 @@ public class JPADerSchemaDAO extends AbstractDAO<DerSchema> implements DerSchema } @Override - public DerSchema save(final DerSchema derSchema) { - return entityManager().merge(derSchema); + public DerSchema save(final DerSchema schema) { + ((JPADerSchema) schema).map2json(); + return entityManager().merge(schema); } @Override @@ -83,8 +84,6 @@ public class JPADerSchemaDAO extends AbstractDAO<DerSchema> implements DerSchema return; } - schema.getLabels().forEach(label -> label.setSchema(null)); - resourceDAO.deleteMapping(key); if (schema.getAnyTypeClass() != null) { diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java index f84e82f928..6734b99105 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java @@ -126,6 +126,7 @@ public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema> implements Plain @Override public PlainSchema save(final PlainSchema schema) { + ((JPAPlainSchema) schema).map2json(); return entityManager().merge(schema); } @@ -143,8 +144,6 @@ public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema> implements Plain return; } - schema.getLabels().forEach(label -> label.setSchema(null)); - deleteAttrs(schema); resourceDAO.deleteMapping(key); diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java index 9452c685e5..8c7a124115 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java @@ -104,8 +104,9 @@ public class JPAVirSchemaDAO extends AbstractDAO<VirSchema> implements VirSchema } @Override - public VirSchema save(final VirSchema virSchema) { - return entityManager().merge(virSchema); + public VirSchema save(final VirSchema schema) { + ((JPAVirSchema) schema).map2json(); + return entityManager().merge(schema); } @Override @@ -115,8 +116,6 @@ public class JPAVirSchemaDAO extends AbstractDAO<VirSchema> implements VirSchema return; } - schema.getLabels().forEach(label -> label.setSchema(null)); - resourceDAO.deleteMapping(key); if (schema.getAnyTypeClass() != null) { diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractSchema.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractSchema.java index 6b66e51fbd..0e76189815 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractSchema.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractSchema.java @@ -18,21 +18,26 @@ */ package org.apache.syncope.core.persistence.jpa.entity; -import java.util.ArrayList; -import java.util.List; +import com.fasterxml.jackson.core.type.TypeReference; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; import java.util.Optional; import javax.persistence.Cacheable; -import javax.persistence.CascadeType; import javax.persistence.Entity; -import javax.persistence.FetchType; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; -import javax.persistence.OneToMany; +import javax.persistence.Lob; +import javax.persistence.PostLoad; +import javax.persistence.PostPersist; +import javax.persistence.PostUpdate; +import javax.persistence.PrePersist; +import javax.persistence.PreUpdate; import javax.persistence.Table; +import javax.persistence.Transient; import org.apache.syncope.core.persistence.api.entity.Schema; -import org.apache.syncope.core.persistence.api.entity.SchemaLabel; import org.apache.syncope.core.persistence.jpa.validation.entity.SchemaKeyCheck; +import org.apache.syncope.core.provisioning.api.serialization.POJOHelper; @Entity @Inheritance(strategy = InheritanceType.JOINED) @@ -41,26 +46,53 @@ import org.apache.syncope.core.persistence.jpa.validation.entity.SchemaKeyCheck; @SchemaKeyCheck public abstract class AbstractSchema extends AbstractProvidedKeyEntity implements Schema { + private static final long serialVersionUID = -9222344997225831269L; + public static final String TABLE = "SyncopeSchema"; - private static final long serialVersionUID = -9222344997225831269L; + protected static final TypeReference<HashMap<Locale, String>> LABEL_TYPEREF = + new TypeReference<HashMap<Locale, String>>() { + }; - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY, mappedBy = "schema") - private List<JPASchemaLabel> labels = new ArrayList<>(); + @Lob + private String labels; + + @Transient + private Map<Locale, String> labelMap = new HashMap<>(); @Override - public boolean add(final SchemaLabel label) { - checkType(label, JPASchemaLabel.class); - return this.labels.add((JPASchemaLabel) label); + public Optional<String> getLabel(final Locale locale) { + return Optional.ofNullable(labelMap.get(locale)); } @Override - public Optional<? extends SchemaLabel> getLabel(final Locale locale) { - return labels.stream().filter(label -> label.getLocale().equals(locale)).findFirst(); + public Map<Locale, String> getLabels() { + return labelMap; } - @Override - public List<? extends SchemaLabel> getLabels() { - return labels; + protected void json2map(final boolean clearFirst) { + if (clearFirst) { + getLabels().clear(); + } + if (labels != null) { + getLabels().putAll(POJOHelper.deserialize(labels, LABEL_TYPEREF)); + } + } + + @PostLoad + public void postLoad() { + json2map(false); + } + + @PostPersist + @PostUpdate + public void postSave() { + json2map(true); + } + + @PrePersist + @PreUpdate + public void map2json() { + labels = POJOHelper.serialize(getLabels()); } } diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java index 4798a2c919..0c35c840c7 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java @@ -51,7 +51,6 @@ import org.apache.syncope.core.persistence.api.entity.ReportExec; import org.apache.syncope.core.persistence.api.entity.ReportTemplate; import org.apache.syncope.core.persistence.api.entity.Role; import org.apache.syncope.core.persistence.api.entity.SRARoute; -import org.apache.syncope.core.persistence.api.entity.SchemaLabel; import org.apache.syncope.core.persistence.api.entity.VirSchema; import org.apache.syncope.core.persistence.api.entity.am.AttrRepo; import org.apache.syncope.core.persistence.api.entity.am.AuthModule; @@ -231,8 +230,6 @@ public class JPAEntityFactory implements EntityFactory { result = (E) new JPAConnInstance(); } else if (reference.equals(ExternalResource.class)) { result = (E) new JPAExternalResource(); - } else if (reference.equals(SchemaLabel.class)) { - result = (E) new JPASchemaLabel(); } else if (reference.equals(PlainSchema.class)) { result = (E) new JPAPlainSchema(); } else if (reference.equals(APlainAttr.class)) { diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPASchemaLabel.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPASchemaLabel.java deleted file mode 100644 index 53330b150b..0000000000 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPASchemaLabel.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 org.apache.syncope.core.persistence.jpa.entity; - -import java.util.Locale; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; -import org.apache.syncope.core.persistence.api.entity.Schema; -import org.apache.syncope.core.persistence.api.entity.SchemaLabel; - -@Entity -@Table(name = JPASchemaLabel.TABLE, uniqueConstraints = - @UniqueConstraint(columnNames = { "schema_id", "locale" })) -public class JPASchemaLabel extends AbstractGeneratedKeyEntity implements SchemaLabel { - - public static final String TABLE = "SchemaLabel"; - - private static final long serialVersionUID = -546019894866607764L; - - @ManyToOne - private AbstractSchema schema; - - @Column(nullable = false) - private Locale locale; - - @Column(nullable = false) - private String display; - - @Override - public AbstractSchema getSchema() { - return schema; - } - - @Override - public void setSchema(final Schema schema) { - checkType(schema, AbstractSchema.class); - this.schema = (AbstractSchema) schema; - } - - @Override - public Locale getLocale() { - return locale; - } - - @Override - public void setLocale(final Locale locale) { - this.locale = locale; - } - - @Override - public String getDisplay() { - return display; - } - - @Override - public void setDisplay(final String display) { - this.display = display; - } -} diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java index 388e4369cd..b993a85f61 100644 --- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java +++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/PlainSchemaTest.java @@ -41,10 +41,8 @@ import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO; import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO; import org.apache.syncope.core.persistence.api.dao.UserDAO; import org.apache.syncope.core.persistence.api.entity.PlainSchema; -import org.apache.syncope.core.persistence.api.entity.SchemaLabel; import org.apache.syncope.core.persistence.api.entity.user.UPlainAttr; import org.apache.syncope.core.persistence.jpa.AbstractTest; -import org.apache.syncope.core.persistence.jpa.entity.JPASchemaLabel; import org.apache.syncope.core.spring.security.SyncopeAuthenticationDetails; import org.apache.syncope.core.spring.security.SyncopeGrantedAuthority; import org.junit.jupiter.api.AfterAll; @@ -167,9 +165,6 @@ public class PlainSchemaTest extends AbstractTest { assertFalse(mapItems.isEmpty()); // check for labels - List<SchemaLabel> labels = entityManager().createQuery( - "SELECT e FROM " + JPASchemaLabel.class.getSimpleName() + " e", SchemaLabel.class).getResultList(); - assertEquals(5, labels.size()); assertEquals(2, schema.getLabels().size()); // delete user schema surname @@ -180,10 +175,6 @@ public class PlainSchemaTest extends AbstractTest { // check for schema deletion schema = plainSchemaDAO.find("surname"); assertNull(schema); - - labels = entityManager().createQuery( - "SELECT e FROM " + JPASchemaLabel.class.getSimpleName() + " e", SchemaLabel.class).getResultList(); - assertEquals(3, labels.size()); } @Test diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml index eede6391c0..2068736e3c 100644 --- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml +++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml @@ -307,17 +307,12 @@ under the License. <PlainSchema id="loginDate" type="Date" anyTypeClass_id="other" mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0" conversionPattern="yyyy-MM-dd"/> - <SyncopeSchema id="firstname"/> + <SyncopeSchema id="firstname" labels='{"en":"Firstname","it":"Nome","pt_BR":"Nome"}'/> <PlainSchema id="firstname" type="String" anyTypeClass_id="minimal user" mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/> - <SchemaLabel id="d90f90d0-cf15-407e-bac7-d46a8eb57c05" schema_id="firstname" locale="en" display="Firstname"/> - <SchemaLabel id="a9465ef0-b8b4-4af4-840d-77031a6b54a0" schema_id="firstname" locale="it" display="Nome"/> - <SchemaLabel id="ac8b7383-62df-490d-9364-88dbd3d301aa" schema_id="firstname" locale="pt_BR" display="Nome"/> - <SyncopeSchema id="surname"/> + <SyncopeSchema id="surname" labels='{"en":"Surname","it":"Cognome"}'/> <PlainSchema id="surname" type="String" anyTypeClass_id="minimal user" mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/> - <SchemaLabel id="69712058-162a-4e2a-b07e-c78d82dc286d" schema_id="surname" locale="en" display="Surname"/> - <SchemaLabel id="77e7bbbb-d30c-47e1-b6d2-e0a9e8c11fe2" schema_id="surname" locale="it" display="Cognome"/> <SyncopeSchema id="ctype"/> <PlainSchema id="ctype" type="String" anyTypeClass_id="other" mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/> diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java index 89ceae71cc..fc7bcd71db 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java @@ -18,14 +18,12 @@ */ package org.apache.syncope.core.provisioning.java.data; -import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.SyncopeClientCompositeException; import org.apache.syncope.common.lib.SyncopeClientException; import org.apache.syncope.common.lib.to.DerSchemaTO; import org.apache.syncope.common.lib.to.PlainSchemaTO; import org.apache.syncope.common.lib.to.Provision; -import org.apache.syncope.common.lib.to.SchemaTO; import org.apache.syncope.common.lib.to.VirSchemaTO; import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.ClientExceptionType; @@ -46,8 +44,6 @@ import org.apache.syncope.core.persistence.api.entity.EntityFactory; import org.apache.syncope.core.persistence.api.entity.ExternalResource; import org.apache.syncope.core.persistence.api.entity.Implementation; import org.apache.syncope.core.persistence.api.entity.PlainSchema; -import org.apache.syncope.core.persistence.api.entity.Schema; -import org.apache.syncope.core.persistence.api.entity.SchemaLabel; import org.apache.syncope.core.persistence.api.entity.VirSchema; import org.apache.syncope.core.provisioning.api.data.SchemaDataBinder; import org.apache.syncope.core.provisioning.api.jexl.JexlUtils; @@ -98,26 +94,6 @@ public class SchemaDataBinderImpl implements SchemaDataBinder { this.anyUtilsFactory = anyUtilsFactory; } - protected <S extends Schema, T extends SchemaTO> void labels(final T src, final S dst) { - src.getLabels().forEach((locale, display) -> { - SchemaLabel label = dst.getLabel(locale).orElse(null); - if (label == null) { - label = entityFactory.newEntity(SchemaLabel.class); - label.setLocale(locale); - label.setSchema(dst); - dst.add(label); - } - label.setDisplay(display); - }); - - dst.getLabels().removeIf(label -> !src.getLabels().containsKey(label.getLocale())); - } - - protected static <S extends Schema, T extends SchemaTO> void labels(final S src, final T dst) { - dst.getLabels().putAll(src.getLabels().stream(). - collect(Collectors.toMap(SchemaLabel::getLocale, SchemaLabel::getDisplay))); - } - // --------------- PLAIN ----------------- protected PlainSchema fill(final PlainSchema schema, final PlainSchemaTO schemaTO) { if (!JexlUtils.isExpressionValid(schemaTO.getMandatoryCondition())) { @@ -139,8 +115,9 @@ public class SchemaDataBinderImpl implements SchemaDataBinder { schema.setSecretKey(schemaTO.getSecretKey()); schema.setUniqueConstraint(schemaTO.isUniqueConstraint()); - labels(schemaTO, schema); - + schema.getLabels().clear(); + schema.getLabels().putAll(schemaTO.getLabels()); + if (schemaTO.getValidator() == null) { schema.setValidator(null); } else { @@ -232,9 +209,7 @@ public class SchemaDataBinderImpl implements SchemaDataBinder { schemaTO.setReadonly(schema.isReadonly()); schemaTO.setSecretKey(schema.getSecretKey()); schemaTO.setUniqueConstraint(schema.isUniqueConstraint()); - - labels(schema, schemaTO); - + schemaTO.getLabels().putAll(schema.getLabels()); schemaTO.setAnyTypeClass(schema.getAnyTypeClass() == null ? null : schema.getAnyTypeClass().getKey()); if (schema.getValidator() != null) { schemaTO.setValidator(schema.getValidator().getKey()); @@ -267,7 +242,8 @@ public class SchemaDataBinderImpl implements SchemaDataBinder { schema.setKey(schemaTO.getKey()); schema.setExpression(schemaTO.getExpression()); - labels(schemaTO, schema); + schema.getLabels().clear(); + schema.getLabels().putAll(schemaTO.getLabels()); DerSchema merged = derSchemaDAO.save(schema); @@ -311,11 +287,8 @@ public class SchemaDataBinderImpl implements SchemaDataBinder { DerSchemaTO schemaTO = new DerSchemaTO(); schemaTO.setKey(schema.getKey()); schemaTO.setExpression(schema.getExpression()); - - labels(schema, schemaTO); - + schemaTO.getLabels().putAll(schema.getLabels()); schemaTO.setAnyTypeClass(schema.getAnyTypeClass() == null ? null : schema.getAnyTypeClass().getKey()); - return schemaTO; } @@ -325,7 +298,8 @@ public class SchemaDataBinderImpl implements SchemaDataBinder { schema.setExtAttrName(schemaTO.getExtAttrName()); schema.setReadonly(schemaTO.isReadonly()); - labels(schemaTO, schema); + schema.getLabels().clear(); + schema.getLabels().putAll(schemaTO.getLabels()); if (schemaTO.getAnyTypeClass() != null && (schema.getAnyTypeClass() == null @@ -390,13 +364,10 @@ public class SchemaDataBinderImpl implements SchemaDataBinder { schemaTO.setKey(schema.getKey()); schemaTO.setExtAttrName(schema.getExtAttrName()); schemaTO.setReadonly(schema.isReadonly()); - - labels(schema, schemaTO); - + schemaTO.getLabels().putAll(schema.getLabels()); schemaTO.setAnyTypeClass(schema.getAnyTypeClass() == null ? null : schema.getAnyTypeClass().getKey()); schemaTO.setResource(schema.getResource().getKey()); schemaTO.setAnyType(schema.getAnyType().getKey()); - return schemaTO; } } diff --git a/pom.xml b/pom.xml index a9fc156de4..4387cec393 100644 --- a/pom.xml +++ b/pom.xml @@ -432,7 +432,7 @@ under the License. <slf4j.version>1.7.36</slf4j.version> - <elasticsearch.version>8.5.1</elasticsearch.version> + <elasticsearch.version>8.5.2</elasticsearch.version> <apacheds.version>2.0.0.AM26</apacheds.version> <apachedirapi.version>2.0.0</apachedirapi.version>