You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/01/15 16:19:26 UTC
[isis] branch master updated: ISIS-2480: SecMan/JPA: convert
trivial named queries
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new d42d83d ISIS-2480: SecMan/JPA: convert trivial named queries
d42d83d is described below
commit d42d83d54a852d8d7910bd6e17d40039ca85793e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jan 15 17:19:10 2021 +0100
ISIS-2480: SecMan/JPA: convert trivial named queries
---
.../secman/jpa/dom/constants/NamedQueryNames.java | 41 +++++++++
.../jpa/dom/permission/ApplicationPermission.java | 100 +++++++++++----------
.../ApplicationPermissionRepository.java | 11 +--
.../secman/jpa/dom/role/ApplicationRole.java | 53 ++++++-----
.../jpa/dom/role/ApplicationRoleRepository.java | 5 +-
.../secman/jpa/dom/tenancy/ApplicationTenancy.java | 62 ++++++-------
.../dom/tenancy/ApplicationTenancyRepository.java | 7 +-
.../secman/jpa/dom/user/ApplicationUser.java | 100 +++++++++++----------
.../jpa/dom/user/ApplicationUserRepository.java | 9 +-
9 files changed, 221 insertions(+), 167 deletions(-)
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/constants/NamedQueryNames.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/constants/NamedQueryNames.java
new file mode 100644
index 0000000..d8a35a1
--- /dev/null
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/constants/NamedQueryNames.java
@@ -0,0 +1,41 @@
+/*
+ * 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.isis.extensions.secman.jpa.dom.constants;
+
+public final class NamedQueryNames {
+
+ public static final String PERMISSION_BY_FEATURE = "ApplicationPermission.findByFeature";
+ public static final String PERMISSION_BY_ROLE = "ApplicationPermission.findByRole";
+ public static final String PERMISSION_BY_ROLE_RULE_FEATURE = "ApplicationPermission.findByRoleAndRuleAndFeature";
+ public static final String PERMISSION_BY_ROLE_RULE_FEATURE_FQN = "ApplicationPermission.findByRoleAndRuleAndFeatureAndFqn";
+ public static final String PERMISSION_BY_USER = "ApplicationPermission.findByUser";
+
+ public static final String ROLE_BY_NAME = "ApplicationRole.findByName";
+ public static final String ROLE_BY_NAME_CONTAINING = "ApplicationRole.findByNameContaining";
+
+ public static final String TENANCY_BY_NAME = "ApplicationTenancy.findByName";
+ public static final String TENANCY_BY_PATH = "ApplicationTenancy.findByPath";
+ public static final String TENANCY_BY_NAME_OR_PATH_MATCHING = "ApplicationTenancy.findByNameOrPathMatching";
+
+ public static final String USER_BY_USERNAME = "ApplicationUser.findByUsername";
+ public static final String USER_BY_EMAIL = "ApplicationUser.findByEmailAddress";
+ public static final String USER_FIND = "ApplicationUser.find";
+ public static final String USER_BY_ATPATH = "ApplicationUser.findByAtPath";
+
+}
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java
index fd409c7..16c1ae2 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermission.java
@@ -26,9 +26,14 @@ import java.util.function.Function;
import javax.inject.Inject;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
import org.apache.isis.applib.annotation.BookmarkPolicy;
import org.apache.isis.applib.annotation.DomainObject;
@@ -51,62 +56,59 @@ import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureType;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionValue;
+import org.apache.isis.extensions.secman.jpa.dom.constants.NamedQueryNames;
import org.apache.isis.extensions.secman.jpa.dom.role.ApplicationRole;
+import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPointResolver;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.UtilityClass;
-//@javax.jdo.annotations.PersistenceCapable(
-// identityType = IdentityType.DATASTORE,
-// schema = "isisExtensionsSecman",
-// table = "ApplicationPermission")
-//@javax.jdo.annotations.Inheritance(
-// strategy = InheritanceStrategy.NEW_TABLE)
-//@javax.jdo.annotations.DatastoreIdentity(
-// strategy = IdGeneratorStrategy.NATIVE, column = "id")
-//@javax.jdo.annotations.Version(
-// strategy = VersionStrategy.VERSION_NUMBER,
-// column = "version")
-//@javax.jdo.annotations.Queries( {
-// @javax.jdo.annotations.Query(
-// name = "findByRole", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.permission.ApplicationPermission "
-// + "WHERE role == :role"),
-// @javax.jdo.annotations.Query(
-// name = "findByUser", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.permission.ApplicationPermission "
-// + "WHERE (u.roles.contains(role) && u.username == :username) "
-// + "VARIABLES org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser u"),
-// @javax.jdo.annotations.Query(
-// name = "findByFeature", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.permission.ApplicationPermission "
-// + "WHERE featureType == :featureType "
-// + " && featureFqn == :featureFqn"),
-// @javax.jdo.annotations.Query(
-// name = "findByRoleAndRuleAndFeature", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.permission.ApplicationPermission "
-// + "WHERE role == :role "
-// + " && rule == :rule "
-// + " && featureType == :featureType "
-// + " && featureFqn == :featureFqn "),
-// @javax.jdo.annotations.Query(
-// name = "findByRoleAndRuleAndFeatureType", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.permission.ApplicationPermission "
-// + "WHERE role == :role "
-// + " && rule == :rule "
-// + " && featureType == :featureType "),
-//})
-//@javax.jdo.annotations.Uniques({
-// @javax.jdo.annotations.Unique(
-// name = "ApplicationPermission_role_feature_rule_UNQ", members = { "role", "featureType", "featureFqn", "rule" })
-//})
@Entity
+@Table(
+ schema = "isisExtensionsSecman",
+ name = "ApplicationPermission",
+ uniqueConstraints=
+ @UniqueConstraint(
+ name = "ApplicationPermission_role_feature_rule_UNQ",
+ columnNames={"role", "featureType", "featureFqn", "rule"})
+)
+@NamedQueries({
+ @NamedQuery(
+ name = NamedQueryNames.PERMISSION_BY_ROLE,
+ query = "SELECT x "
+ + "FROM org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermission x "
+ + "WHERE x.role = :role"),
+//TODO not sure how to convert these
+// @NamedQuery(
+// name = NamedQueryNames.PERMISSION_BY_USER,
+// query = "SELECT x "
+// + "FROM org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermission x "
+// + "WHERE (u.roles.contains(role) AND u.username == :username) "
+// + "VARIABLES org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser u"),
+ @NamedQuery(
+ name = NamedQueryNames.PERMISSION_BY_FEATURE,
+ query = "SELECT x "
+ + "FROM org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermission x "
+ + "WHERE x.featureType = :featureType "
+ + " AND x.featureFqn = :featureFqn"),
+ @NamedQuery(
+ name = NamedQueryNames.PERMISSION_BY_ROLE_RULE_FEATURE_FQN,
+ query = "SELECT x "
+ + "FROM org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermission x "
+ + "WHERE x.role = :role "
+ + " AND x.rule = :rule "
+ + " AND x.featureType = :featureType "
+ + " AND x.featureFqn = :featureFqn "),
+ @NamedQuery(
+ name = NamedQueryNames.PERMISSION_BY_ROLE_RULE_FEATURE,
+ query = "SELECT x "
+ + "FROM org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermission x "
+ + "WHERE x.role = :role "
+ + " AND x.rule = :rule "
+ + " AND x.featureType = :featureType "),
+})
+@EntityListeners(JpaEntityInjectionPointResolver.class)
@DomainObject(
objectType = "isissecurity.ApplicationPermission"
)
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermissionRepository.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermissionRepository.java
index 378d569..4a92601 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermissionRepository.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/permission/ApplicationPermissionRepository.java
@@ -49,6 +49,7 @@ import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureType;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionValue;
+import org.apache.isis.extensions.secman.jpa.dom.constants.NamedQueryNames;
import org.apache.isis.extensions.secman.jpa.dom.role.ApplicationRole;
import org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser;
@@ -80,7 +81,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
public List<ApplicationPermission> findByRole(@NonNull final ApplicationRole role) {
return repository.allMatches(
- Query.named(ApplicationPermission.class, "findByRole")
+ Query.named(ApplicationPermission.class, NamedQueryNames.PERMISSION_BY_ROLE)
.withParameter("role", role));
}
@@ -97,7 +98,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
private List<ApplicationPermission> findByUser(final String username) {
return repository.allMatches(
- Query.named(ApplicationPermission.class, "findByUser")
+ Query.named(ApplicationPermission.class, NamedQueryNames.PERMISSION_BY_USER)
.withParameter("username", username));
}
@@ -161,7 +162,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
final ApplicationPermissionRule rule,
final ApplicationFeatureType type) {
return repository.allMatches(Query.named(
- ApplicationPermission.class, "findByRoleAndRuleAndFeatureType")
+ ApplicationPermission.class, NamedQueryNames.PERMISSION_BY_ROLE_RULE_FEATURE)
.withParameter("role", role)
.withParameter("rule", rule)
.withParameter("featureType", type))
@@ -191,7 +192,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
return repository
.uniqueMatch(Query.named(
- ApplicationPermission.class, "findByRoleAndRuleAndFeature")
+ ApplicationPermission.class, NamedQueryNames.PERMISSION_BY_ROLE_RULE_FEATURE_FQN)
.withParameter("role", role)
.withParameter("rule", rule)
.withParameter("featureType", type)
@@ -211,7 +212,7 @@ implements org.apache.isis.extensions.secman.api.permission.ApplicationPermissio
public Collection<ApplicationPermission> findByFeature(final ApplicationFeatureId featureId) {
return repository.allMatches(
Query.named(
- ApplicationPermission.class, "findByFeature")
+ ApplicationPermission.class, NamedQueryNames.PERMISSION_BY_FEATURE)
.withParameter("featureType", featureId.getType())
.withParameter("featureFqn", featureId.getFullyQualifiedName()))
.stream()
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRole.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRole.java
index 6d78d30..bbaab08 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRole.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRole.java
@@ -26,9 +26,14 @@ import java.util.TreeSet;
import javax.inject.Inject;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
import org.apache.isis.applib.annotation.BookmarkPolicy;
import org.apache.isis.applib.annotation.Bounding;
@@ -48,38 +53,38 @@ import org.apache.isis.applib.util.ObjectContracts;
import org.apache.isis.applib.util.ToString;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRule;
+import org.apache.isis.extensions.secman.jpa.dom.constants.NamedQueryNames;
import org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermission;
import org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermissionRepository;
import org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser;
+import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPointResolver;
import lombok.Getter;
import lombok.Setter;
-//@javax.jdo.annotations.PersistenceCapable(
-// identityType = IdentityType.DATASTORE,
-// schema = "isisExtensionsSecman",
-// table = "ApplicationRole")
-//@javax.jdo.annotations.Inheritance(
-// strategy = InheritanceStrategy.NEW_TABLE)
-//@javax.jdo.annotations.DatastoreIdentity(
-// strategy = IdGeneratorStrategy.NATIVE, column = "id")
-//@javax.jdo.annotations.Uniques({
-// @javax.jdo.annotations.Unique(
-// name = "ApplicationRole_name_UNQ", members = { "name" })
-//})
-//@javax.jdo.annotations.Queries({
-// @javax.jdo.annotations.Query(
-// name = "findByName", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.role.ApplicationRole "
-// + "WHERE name == :name"),
-// @javax.jdo.annotations.Query(
-// name = "findByNameContaining", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.role.ApplicationRole "
-// + "WHERE name.matches(:nameRegex) ")
-//})
@Entity
+@Table(
+ schema = "isisExtensionsSecman",
+ name = "ApplicationRole",
+ uniqueConstraints =
+ @UniqueConstraint(
+ name = "ApplicationRole_name_UNQ",
+ columnNames={"name"})
+)
+@NamedQueries({
+ @NamedQuery(
+ name = NamedQueryNames.ROLE_BY_NAME,
+ query = "SELECT x "
+ + "FROM org.apache.isis.extensions.secman.jpa.dom.role.ApplicationRole x "
+ + "WHERE x.name = :name"),
+//TODO not sure how to convert these
+// @NamedQuery(
+// name = NamedQueryNames.ROLE_BY_NAME_CONTAINING,
+// query = "SELECT x "
+// + "FROM org.apache.isis.extensions.secman.jpa.dom.role.ApplicationRole x "
+// + "WHERE x.name.matches(:nameRegex)"),
+})
+@EntityListeners(JpaEntityInjectionPointResolver.class)
@DomainObject(
bounding = Bounding.BOUNDED,
// bounded = true,
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRoleRepository.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRoleRepository.java
index 624d212..35f3c5a 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRoleRepository.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/role/ApplicationRoleRepository.java
@@ -35,6 +35,7 @@ import org.apache.isis.applib.services.repository.RepositoryService;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.extensions.secman.api.SecurityModuleConfig;
+import org.apache.isis.extensions.secman.jpa.dom.constants.NamedQueryNames;
import org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser;
import org.apache.isis.extensions.secman.model.dom.permission.ApplicationPermission_delete;
@@ -68,7 +69,7 @@ implements org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository<
if(name == null) {
return Optional.empty();
}
- return repository.uniqueMatch(Query.named(ApplicationRole.class, "findByName")
+ return repository.uniqueMatch(Query.named(ApplicationRole.class, NamedQueryNames.ROLE_BY_NAME)
.withParameter("name", name));
}
@@ -78,7 +79,7 @@ implements org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository<
if(search != null && search.length() > 0) {
String nameRegex = String.format("(?i).*%s.*", search.replace("*", ".*").replace("?", "."));
return repository.allMatches(
- Query.named(ApplicationRole.class, "findByNameContaining")
+ Query.named(ApplicationRole.class, NamedQueryNames.ROLE_BY_NAME_CONTAINING)
.withParameter("nameRegex", nameRegex))
.stream()
.collect(_Sets.toUnmodifiableSorted());
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/tenancy/ApplicationTenancy.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/tenancy/ApplicationTenancy.java
index f5c83c7..c99eb76 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/tenancy/ApplicationTenancy.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/tenancy/ApplicationTenancy.java
@@ -26,7 +26,11 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
import org.apache.isis.applib.annotation.BookmarkPolicy;
import org.apache.isis.applib.annotation.Collection;
@@ -42,42 +46,38 @@ import org.apache.isis.applib.util.Equality;
import org.apache.isis.applib.util.Hashing;
import org.apache.isis.applib.util.ObjectContracts;
import org.apache.isis.applib.util.ToString;
+import org.apache.isis.extensions.secman.jpa.dom.constants.NamedQueryNames;
import lombok.Getter;
import lombok.Setter;
-//@javax.jdo.annotations.PersistenceCapable(
-// identityType = IdentityType.APPLICATION,
-// schema = "isisExtensionsSecman",
-// table = "ApplicationTenancy")
-//@javax.jdo.annotations.Inheritance(
-// strategy = InheritanceStrategy.NEW_TABLE)
-//@javax.jdo.annotations.DatastoreIdentity(
-// strategy = IdGeneratorStrategy.NATIVE, column = "id")
-//@javax.jdo.annotations.Version(
-// strategy = VersionStrategy.VERSION_NUMBER,
-// column = "version")
-//@javax.jdo.annotations.Uniques({
-// @javax.jdo.annotations.Unique(
-// name = "ApplicationTenancy_name_UNQ", members = { "name" })
-//})
-//@javax.jdo.annotations.Queries( {
-// @javax.jdo.annotations.Query(
-// name = "findByPath", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.tenancy.ApplicationTenancy "
-// + "WHERE path == :path"),
-// @javax.jdo.annotations.Query(
-// name = "findByName", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.tenancy.ApplicationTenancy "
-// + "WHERE name == :name"),
-// @javax.jdo.annotations.Query(
-// name = "findByNameOrPathMatching", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.tenancy.ApplicationTenancy "
-// + "WHERE name.matches(:regex) || path.matches(:regex) ")})
@Entity
+@Table(
+ schema = "isisExtensionsSecman",
+ name = "ApplicationTenancy",
+ uniqueConstraints =
+ @UniqueConstraint(
+ name = "ApplicationTenancy_name_UNQ",
+ columnNames={"name"})
+)
+@NamedQueries({
+ @NamedQuery(
+ name = NamedQueryNames.TENANCY_BY_PATH,
+ query = "SELECT x "
+ + "FROM org.apache.isis.extensions.secman.jpa.dom.tenancy.ApplicationTenancy x "
+ + "WHERE x.path = :path"),
+ @NamedQuery(
+ name = NamedQueryNames.TENANCY_BY_NAME,
+ query = "SELECT x "
+ + "FROM org.apache.isis.extensions.secman.jpa.dom.tenancy.ApplicationTenancy x "
+ + "WHERE x.name = :name"),
+//TODO not sure how to convert these
+// @NamedQuery(
+// name = NamedQueryNames.TENANCY_BY_NAME_OR_PATH_MATCHING,
+// query = "SELECT x "
+// + "FROM org.apache.isis.extensions.secman.jpa.dom.tenancy.ApplicationTenancy x "
+// + "WHERE x.name.matches(:regex) || x.path.matches(:regex)"),
+})
@DomainObject(
objectType = "isissecurity.ApplicationTenancy",
autoCompleteRepository = ApplicationTenancyRepository.class,
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/tenancy/ApplicationTenancyRepository.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/tenancy/ApplicationTenancyRepository.java
index ba02450..6d6faa0 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/tenancy/ApplicationTenancyRepository.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/tenancy/ApplicationTenancyRepository.java
@@ -33,6 +33,7 @@ import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
import org.apache.isis.applib.services.repository.RepositoryService;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.collections._Sets;
+import org.apache.isis.extensions.secman.jpa.dom.constants.NamedQueryNames;
import org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser;
import lombok.NonNull;
@@ -68,7 +69,7 @@ implements org.apache.isis.extensions.secman.api.tenancy.ApplicationTenancyRepos
if (search == null) {
return Collections.emptySortedSet();
}
- return repository.allMatches(Query.named(ApplicationTenancy.class, "findByNameOrPathMatching")
+ return repository.allMatches(Query.named(ApplicationTenancy.class, NamedQueryNames.TENANCY_BY_NAME_OR_PATH_MATCHING)
.withParameter("regex", String.format("(?i).*%s.*", search.replace("*", ".*").replace("?", "."))))
.stream()
.collect(_Sets.toUnmodifiableSorted());
@@ -86,7 +87,7 @@ implements org.apache.isis.extensions.secman.api.tenancy.ApplicationTenancyRepos
}
public ApplicationTenancy findByName(final String name) {
- return repository.uniqueMatch(Query.named(ApplicationTenancy.class, "findByName")
+ return repository.uniqueMatch(Query.named(ApplicationTenancy.class, NamedQueryNames.TENANCY_BY_NAME)
.withParameter("name", name)).orElse(null);
}
@@ -106,7 +107,7 @@ implements org.apache.isis.extensions.secman.api.tenancy.ApplicationTenancyRepos
if (path == null) {
return null;
}
- return repository.uniqueMatch(Query.named(ApplicationTenancy.class, "findByPath")
+ return repository.uniqueMatch(Query.named(ApplicationTenancy.class, NamedQueryNames.TENANCY_BY_PATH)
.withParameter("path", path))
.orElse(null);
}
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/user/ApplicationUser.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/user/ApplicationUser.java
index 0d21e93..f5319d2 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/user/ApplicationUser.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/user/ApplicationUser.java
@@ -26,11 +26,16 @@ import java.util.TreeSet;
import javax.inject.Inject;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
import org.apache.isis.applib.annotation.BookmarkPolicy;
import org.apache.isis.applib.annotation.Collection;
@@ -57,64 +62,61 @@ import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionVal
import org.apache.isis.extensions.secman.api.permission.PermissionsEvaluationService;
import org.apache.isis.extensions.secman.api.user.AccountType;
import org.apache.isis.extensions.secman.api.user.ApplicationUserStatus;
+import org.apache.isis.extensions.secman.jpa.dom.constants.NamedQueryNames;
import org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermission;
import org.apache.isis.extensions.secman.jpa.dom.permission.ApplicationPermissionRepository;
import org.apache.isis.extensions.secman.jpa.dom.role.ApplicationRole;
+import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPointResolver;
import lombok.Getter;
import lombok.Setter;
import lombok.val;
-//@javax.jdo.annotations.PersistenceCapable(
-// identityType = IdentityType.DATASTORE,
-// schema = "isisExtensionsSecman",
-// table = "ApplicationUser")
-//@javax.jdo.annotations.Inheritance(
-// strategy = InheritanceStrategy.NEW_TABLE)
-//@javax.jdo.annotations.DatastoreIdentity(
-// strategy = IdGeneratorStrategy.NATIVE, column = "id")
-//@javax.jdo.annotations.Version(
-// strategy = VersionStrategy.VERSION_NUMBER,
-// column = "version")
-//@javax.jdo.annotations.Uniques({
-// @javax.jdo.annotations.Unique(
-// name = "ApplicationUser_username_UNQ", members = { "username" })
-//})
-//@javax.jdo.annotations.Queries( {
-// @javax.jdo.annotations.Query(
-// name = "findByUsername", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser "
-// + "WHERE username == :username"),
-// @javax.jdo.annotations.Query(
-// name = "findByEmailAddress", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser "
-// + "WHERE emailAddress == :emailAddress"),
-// @javax.jdo.annotations.Query(
-// name = "findByAtPath", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser "
-// + "WHERE atPath == :atPath"),
-// @javax.jdo.annotations.Query(
-// name = "findByName", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser "
-// + "WHERE username.matches(:nameRegex)"
-// + " || familyName.matches(:nameRegex)"
-// + " || givenName.matches(:nameRegex)"
-// + " || knownAs.matches(:nameRegex)"),
-// @javax.jdo.annotations.Query(
-// name = "find", language = "JDOQL",
-// value = "SELECT "
-// + "FROM org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser "
-// + "WHERE username.matches(:regex)"
-// + " || familyName.matches(:regex)"
-// + " || givenName.matches(:regex)"
-// + " || knownAs.matches(:regex)"
-// + " || emailAddress.matches(:regex)")
-//})
@Entity
+@Table(
+ schema = "isisExtensionsSecman",
+ name = "ApplicationUser",
+ uniqueConstraints =
+ @UniqueConstraint(
+ name = "ApplicationUser_username_UNQ",
+ columnNames={"username"})
+)
+@NamedQueries({
+ @NamedQuery(
+ name = NamedQueryNames.USER_BY_USERNAME,
+ query = "SELECT x "
+ + "FROM org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser x "
+ + "WHERE x.username = :username"),
+ @NamedQuery(
+ name = NamedQueryNames.USER_BY_EMAIL,
+ query = "SELECT x "
+ + "FROM org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser x "
+ + "WHERE x.emailAddress = :emailAddress"),
+ @NamedQuery(
+ name = NamedQueryNames.USER_BY_ATPATH,
+ query = "SELECT x "
+ + "FROM org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser x "
+ + "WHERE x.atPath = :atPath"),
+//TODO not sure how to convert these
+// @NamedQuery(
+// name = NamedQueryNames.USER_BY_NAME,
+// query = "SELECT x "
+// + "FROM org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser x "
+// + "WHERE x.username.matches(:nameRegex)"
+// + " || x.familyName.matches(:nameRegex)"
+// + " || x.givenName.matches(:nameRegex)"
+// + " || x.knownAs.matches(:nameRegex)"),
+// @NamedQuery(
+// name = NamedQueryNames.USER_FIND,
+// query = "SELECT x "
+// + "FROM org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser x "
+// + "WHERE x.username.matches(:regex)"
+// + " || x.familyName.matches(:regex)"
+// + " || x.givenName.matches(:regex)"
+// + " || x.knownAs.matches(:regex)"
+// + " || x.emailAddress.matches(:regex)")
+})
+@EntityListeners(JpaEntityInjectionPointResolver.class)
@DomainObject(
objectType = "isissecurity.ApplicationUser",
autoCompleteRepository = ApplicationUserRepository.class,
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/user/ApplicationUserRepository.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/user/ApplicationUserRepository.java
index 0d3f7d9..67a81f6 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/user/ApplicationUserRepository.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/dom/user/ApplicationUserRepository.java
@@ -44,6 +44,7 @@ import org.apache.isis.extensions.secman.api.encryption.PasswordEncryptionServic
import org.apache.isis.extensions.secman.api.events.UserCreatedEvent;
import org.apache.isis.extensions.secman.api.user.AccountType;
import org.apache.isis.extensions.secman.api.user.ApplicationUserStatus;
+import org.apache.isis.extensions.secman.jpa.dom.constants.NamedQueryNames;
import org.apache.isis.extensions.secman.jpa.dom.role.ApplicationRole;
import org.apache.isis.extensions.secman.model.dom.user.ApplicationUser_lock;
import org.apache.isis.extensions.secman.model.dom.user.ApplicationUser_unlock;
@@ -98,7 +99,7 @@ implements org.apache.isis.extensions.secman.api.user.ApplicationUserRepository<
@Override
public Optional<ApplicationUser> findByUsername(final String username) {
- return repository.uniqueMatch(Query.named(ApplicationUser.class, "findByUsername")
+ return repository.uniqueMatch(Query.named(ApplicationUser.class, NamedQueryNames.USER_BY_USERNAME)
.withParameter("username", username));
}
@@ -110,7 +111,7 @@ implements org.apache.isis.extensions.secman.api.user.ApplicationUserRepository<
}
public Optional<ApplicationUser> findByEmailAddress(final String emailAddress) {
- return repository.uniqueMatch(Query.named(ApplicationUser.class, "findByEmailAddress")
+ return repository.uniqueMatch(Query.named(ApplicationUser.class, NamedQueryNames.USER_BY_EMAIL)
.withParameter("emailAddress", emailAddress));
}
@@ -119,7 +120,7 @@ implements org.apache.isis.extensions.secman.api.user.ApplicationUserRepository<
@Override
public Collection<ApplicationUser> find(final String search) {
final String regex = String.format("(?i).*%s.*", search.replace("*", ".*").replace("?", "."));
- return repository.allMatches(Query.named(ApplicationUser.class, "find")
+ return repository.allMatches(Query.named(ApplicationUser.class, NamedQueryNames.USER_FIND)
.withParameter("regex", regex))
.stream()
.collect(_Sets.toUnmodifiableSorted());
@@ -129,7 +130,7 @@ implements org.apache.isis.extensions.secman.api.user.ApplicationUserRepository<
@Override
public Collection<ApplicationUser> findByAtPath(final String atPath) {
- return repository.allMatches(Query.named(ApplicationUser.class, "findByAtPath")
+ return repository.allMatches(Query.named(ApplicationUser.class, NamedQueryNames.USER_BY_ATPATH)
.withParameter("atPath", atPath))
.stream()
.collect(_Sets.toUnmodifiableSorted());