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 2019/07/17 06:36:11 UTC

[isis] branch v2 updated: ISIS-2151 add missing serialVersionUIDs, remove/replace deprecations

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/v2 by this push:
     new 65142ab  ISIS-2151 add missing serialVersionUIDs, remove/replace deprecations
65142ab is described below

commit 65142abb89e3538ab153182f077ebeae0fb508fc
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jul 17 08:36:01 2019 +0200

    ISIS-2151 add missing serialVersionUIDs, remove/replace deprecations
---
 .../api/permission/ApplicationPermissionValue.java | 281 +++++++++++----------
 .../jdo/app/feature/ApplicationClassAction.java    |  15 +-
 .../app/feature/ApplicationClassCollection.java    |  15 +-
 .../jdo/app/feature/ApplicationClassMember.java    |  12 +-
 .../jdo/app/feature/ApplicationClassProperty.java  |  21 +-
 .../app/feature/ApplicationFeatureViewModel.java   |  34 ++-
 .../secman/jdo/app/feature/ApplicationPackage.java |  13 +-
 .../app/feature/ApplicationPermission_feature.java |  28 +-
 .../user/ApplicationUser_filterPermissions.java    |   4 +-
 .../jdo/app/user/ApplicationUser_permissions.java  |   4 +-
 .../jdo/app/user/UserPermissionViewModel.java      |  11 +-
 .../jdo/dom/permission/ApplicationPermission.java  |  56 ++--
 .../dom/permission/ApplicationPermissionMenu.java  |   6 +-
 .../jdo/dom/permission/ApplicationPermissions.java | 205 ---------------
 .../secman/jdo/dom/role/ApplicationRole.java       |  45 ++--
 .../jdo/dom/tenancy/ApplicationTenancies.java      | 151 -----------
 .../secman/jdo/dom/tenancy/ApplicationTenancy.java |  51 +++-
 .../jdo/dom/tenancy/ApplicationTenancyMenu.java    |   6 +-
 .../tenancy/ApplicationTenancyPathEvaluator.java   |  61 -----
 .../secman/jdo/dom/user/ApplicationUser.java       |  25 +-
 .../secman/jdo/dom/user/HasUsername_open.java      |  22 +-
 .../ApplicationTenancyEvaluatorUsingPaths.java     | 150 -----------
 .../seed/scripts/AbstractTenancyFixtureScript.java |   5 +-
 23 files changed, 360 insertions(+), 861 deletions(-)

diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValue.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValue.java
index 79acca8..2fac4c7 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValue.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValue.java
@@ -24,6 +24,7 @@ import java.util.List;
 
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.util.ObjectContracts;
+import org.apache.isis.applib.util.ToString;
 import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
 
 /**
@@ -36,146 +37,154 @@ import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
  * </p>
  */
 public class ApplicationPermissionValue implements Comparable<ApplicationPermissionValue>, Serializable {
-	
+
 	private static final long serialVersionUID = 1L;
-	
+
 	// -- constructor
-    public ApplicationPermissionValue(
-            final ApplicationFeatureId featureId,
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode) {
-        this.featureId = featureId;
-        this.rule = rule;
-        this.mode = mode;
-    }
-    
-
-    // -- featureId
-    private final ApplicationFeatureId featureId;
-    @Programmatic
-    public ApplicationFeatureId getFeatureId() {
-        return featureId;
-    }
-    
-
-    // -- rule
-    private final ApplicationPermissionRule rule;
-    @Programmatic
-    public ApplicationPermissionRule getRule() {
-        return rule;
-    }
-    
-
-    // -- mode
-    private final ApplicationPermissionMode mode;
-    @Programmatic
-    public ApplicationPermissionMode getMode() {
-        return mode;
-    }
-    
-
-    // -- implies, refutes
-    @Programmatic
-    public boolean implies(final ApplicationFeatureId featureId, final ApplicationPermissionMode mode) {
-        if(getRule() != ApplicationPermissionRule.ALLOW) {
-            // only allow rules can imply
-            return false;
-        }
-        if(getMode() == ApplicationPermissionMode.VIEWING && mode == ApplicationPermissionMode.CHANGING) {
-            // an "allow viewing" permission does not imply ability to change
-            return false;
-        }
-
-        // determine if this permission is on the path (ie the feature or one of its parents)
-        return onPathOf(featureId);
-    }
-
-    @Programmatic
-    public boolean refutes(final ApplicationFeatureId featureId, final ApplicationPermissionMode mode) {
-        if(getRule() != ApplicationPermissionRule.VETO) {
-            // only veto rules can refute
-            return false;
-        }
-        if(getMode() == ApplicationPermissionMode.CHANGING && mode == ApplicationPermissionMode.VIEWING) {
-            // an "veto changing" permission does not refute ability to view
-            return false;
-        }
-        // determine if this permission is on the path (ie the feature or one of its parents)
-        return onPathOf(featureId);
-    }
-
-    private boolean onPathOf(final ApplicationFeatureId featureId) {
-
-        final List<ApplicationFeatureId> pathIds = featureId.getPathIds();
-        for (final ApplicationFeatureId pathId : pathIds) {
-            if(getFeatureId().equals(pathId)) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    
-
-    // -- Comparators
-    public static final class Comparators {
-        private Comparators(){}
-        public static Comparator<ApplicationPermissionValue> natural() {
-            return new ApplicationPermissionValueComparator();
-        }
-
-        static class ApplicationPermissionValueComparator implements Comparator<ApplicationPermissionValue>, Serializable {
+	public ApplicationPermissionValue(
+			final ApplicationFeatureId featureId,
+			final ApplicationPermissionRule rule,
+			final ApplicationPermissionMode mode) {
+		this.featureId = featureId;
+		this.rule = rule;
+		this.mode = mode;
+	}
+
+
+	// -- featureId
+	private final ApplicationFeatureId featureId;
+	@Programmatic
+	public ApplicationFeatureId getFeatureId() {
+		return featureId;
+	}
+
+
+	// -- rule
+	private final ApplicationPermissionRule rule;
+	@Programmatic
+	public ApplicationPermissionRule getRule() {
+		return rule;
+	}
+
+
+	// -- mode
+	private final ApplicationPermissionMode mode;
+	@Programmatic
+	public ApplicationPermissionMode getMode() {
+		return mode;
+	}
+
+
+	// -- implies, refutes
+	@Programmatic
+	public boolean implies(final ApplicationFeatureId featureId, final ApplicationPermissionMode mode) {
+		if(getRule() != ApplicationPermissionRule.ALLOW) {
+			// only allow rules can imply
+			return false;
+		}
+		if(getMode() == ApplicationPermissionMode.VIEWING && mode == ApplicationPermissionMode.CHANGING) {
+			// an "allow viewing" permission does not imply ability to change
+			return false;
+		}
+
+		// determine if this permission is on the path (ie the feature or one of its parents)
+		return onPathOf(featureId);
+	}
+
+	@Programmatic
+	public boolean refutes(final ApplicationFeatureId featureId, final ApplicationPermissionMode mode) {
+		if(getRule() != ApplicationPermissionRule.VETO) {
+			// only veto rules can refute
+			return false;
+		}
+		if(getMode() == ApplicationPermissionMode.CHANGING && mode == ApplicationPermissionMode.VIEWING) {
+			// an "veto changing" permission does not refute ability to view
+			return false;
+		}
+		// determine if this permission is on the path (ie the feature or one of its parents)
+		return onPathOf(featureId);
+	}
+
+	private boolean onPathOf(final ApplicationFeatureId featureId) {
+
+		final List<ApplicationFeatureId> pathIds = featureId.getPathIds();
+		for (final ApplicationFeatureId pathId : pathIds) {
+			if(getFeatureId().equals(pathId)) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+
+
+
+	// -- Comparators
+	public static final class Comparators {
+		private Comparators(){}
+		public static Comparator<ApplicationPermissionValue> natural() {
+			return new ApplicationPermissionValueComparator();
+		}
+
+		static class ApplicationPermissionValueComparator implements Comparator<ApplicationPermissionValue>, Serializable {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-            public int compare(final ApplicationPermissionValue o1, final ApplicationPermissionValue o2) {
-                return o1.compareTo(o2);
-            }
-        }
-    }
-    
-
-    // -- equals, hashCode, compareTo, toString
-
-    private final static String propertyNames = "rule, mode, featureId";
-
-    @Override
-    public int compareTo(final ApplicationPermissionValue o) {
-        return ObjectContracts.compare(this, o, propertyNames);
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        // not using because trying to be efficient.  Premature optimization?
-        // return ObjectContracts.equals(this, obj, propertyNames);
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final ApplicationPermissionValue that = (ApplicationPermissionValue) o;
-
-        if (featureId != null ? !featureId.equals(that.featureId) : that.featureId != null) return false;
-        if (mode != that.mode) return false;
-        if (rule != that.rule) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        // not using because trying to be efficient.  Premature optimization?
-        // return ObjectContracts.hashCode(this, propertyNames);
-        int result = featureId != null ? featureId.hashCode() : 0;
-        result = 31 * result + (rule != null ? rule.hashCode() : 0);
-        result = 31 * result + (mode != null ? mode.hashCode() : 0);
-        return result;
-    }
-
-    @Override
-    public String toString() {
-            return ObjectContracts.toString(this, propertyNames);
-    }
-
-    
+			public int compare(final ApplicationPermissionValue o1, final ApplicationPermissionValue o2) {
+				return o1.compareTo(o2);
+			}
+		}
+	}
+
+
+	// -- CONTRACT
+
+	private final static Comparator<ApplicationPermissionValue> comparator =
+			Comparator.comparing(ApplicationPermissionValue::getRule)
+			.thenComparing(ApplicationPermissionValue::getMode)
+			.thenComparing(ApplicationPermissionValue::getFeatureId);
+
+	private final static ToString<ApplicationPermissionValue> toString =
+			ObjectContracts.toString("name", ApplicationPermissionValue::getRule)
+			.thenToString("mode", ApplicationPermissionValue::getMode)
+			.thenToString("featureId", ApplicationPermissionValue::getFeatureId);
+
+
+	@Override
+	public int compareTo(final ApplicationPermissionValue o) {
+		return comparator.compare(this, o);
+	}
+
+	@Override
+	public boolean equals(final Object o) {
+		// not using because trying to be efficient.  Premature optimization?
+		// return ObjectContracts.equals(this, obj, propertyNames);
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+
+		final ApplicationPermissionValue that = (ApplicationPermissionValue) o;
+
+		if (featureId != null ? !featureId.equals(that.featureId) : that.featureId != null) return false;
+		if (mode != that.mode) return false;
+		if (rule != that.rule) return false;
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		// not using because trying to be efficient.  Premature optimization?
+		// return ObjectContracts.hashCode(this, propertyNames);
+		int result = featureId != null ? featureId.hashCode() : 0;
+		result = 31 * result + (rule != null ? rule.hashCode() : 0);
+		result = 31 * result + (mode != null ? mode.hashCode() : 0);
+		return result;
+	}
+
+	@Override
+	public String toString() {
+		return toString.toString(this);
+	}
+
 
 }
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassAction.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassAction.java
index 719175c..a288ce1 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassAction.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassAction.java
@@ -31,11 +31,14 @@ import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
 @ViewModelLayout(paged=100)
 public class ApplicationClassAction extends ApplicationClassMember {
 
-    public static abstract class PropertyDomainEvent<T> extends ApplicationClassMember.PropertyDomainEvent<ApplicationClassAction, T> {}
+    public static abstract class PropertyDomainEvent<T> extends ApplicationClassMember.PropertyDomainEvent<ApplicationClassAction, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class CollectionDomainEvent<T> extends ApplicationClassMember.CollectionDomainEvent<ApplicationClassAction, T> {}
+    public static abstract class CollectionDomainEvent<T> extends ApplicationClassMember.CollectionDomainEvent<ApplicationClassAction, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class ActionDomainEvent extends ApplicationClassMember.ActionDomainEvent<ApplicationClassAction> {}
+    public static abstract class ActionDomainEvent extends ApplicationClassMember.ActionDomainEvent<ApplicationClassAction> {
+		private static final long serialVersionUID = 1L;}
 
     
 
@@ -53,7 +56,8 @@ public class ApplicationClassAction extends ApplicationClassMember {
 
     // -- returnTypeName (property)
 
-    public static class ReturnTypeDomainEvent extends PropertyDomainEvent<String> {}
+    public static class ReturnTypeDomainEvent extends PropertyDomainEvent<String> {
+		private static final long serialVersionUID = 1L;}
 
     @Property(
             domainEvent = ReturnTypeDomainEvent.class
@@ -67,7 +71,8 @@ public class ApplicationClassAction extends ApplicationClassMember {
     
 
     // -- actionSemantics (property)
-    public static class ActionSemanticsDomainEvent extends PropertyDomainEvent<SemanticsOf> {}
+    public static class ActionSemanticsDomainEvent extends PropertyDomainEvent<SemanticsOf> {
+		private static final long serialVersionUID = 1L;}
 
     @Property(
             domainEvent = ActionSemanticsDomainEvent.class
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassCollection.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassCollection.java
index 232135e..7b8b138 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassCollection.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassCollection.java
@@ -30,11 +30,14 @@ import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
 @ViewModelLayout(paged=100)
 public class ApplicationClassCollection extends ApplicationClassMember {
 
-    public static abstract class PropertyDomainEvent<T> extends ApplicationClassMember.PropertyDomainEvent<ApplicationClassCollection, T> {}
+    public static abstract class PropertyDomainEvent<T> extends ApplicationClassMember.PropertyDomainEvent<ApplicationClassCollection, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class CollectionDomainEvent<T> extends ApplicationClassMember.CollectionDomainEvent<ApplicationClassCollection, T> {}
+    public static abstract class CollectionDomainEvent<T> extends ApplicationClassMember.CollectionDomainEvent<ApplicationClassCollection, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class ActionDomainEvent extends ApplicationClassMember.ActionDomainEvent<ApplicationClassCollection> {}
+    public static abstract class ActionDomainEvent extends ApplicationClassMember.ActionDomainEvent<ApplicationClassCollection> {
+		private static final long serialVersionUID = 1L;}
 
     
 
@@ -51,7 +54,8 @@ public class ApplicationClassCollection extends ApplicationClassMember {
 
     // -- returnType
 
-    public static class ElementTypeDomainEvent extends PropertyDomainEvent<String> {}
+    public static class ElementTypeDomainEvent extends PropertyDomainEvent<String> {
+		private static final long serialVersionUID = 1L;}
 
     @Property(
             domainEvent = ElementTypeDomainEvent.class
@@ -64,7 +68,8 @@ public class ApplicationClassCollection extends ApplicationClassMember {
 
     // -- derived
 
-    public static class DerivedDomainEvent extends PropertyDomainEvent<Boolean> {}
+    public static class DerivedDomainEvent extends PropertyDomainEvent<Boolean> {
+		private static final long serialVersionUID = 1L;}
 
     @Property(
             domainEvent = DerivedDomainEvent.class
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassMember.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassMember.java
index f97ea69..bc6dea2 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassMember.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassMember.java
@@ -33,11 +33,14 @@ import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
 )
 public abstract class ApplicationClassMember extends ApplicationFeatureViewModel {
 
-    public static abstract class PropertyDomainEvent<S extends ApplicationClassMember, T> extends ApplicationFeatureViewModel.PropertyDomainEvent<ApplicationClassMember, T> {}
+    public static abstract class PropertyDomainEvent<S extends ApplicationClassMember, T> extends ApplicationFeatureViewModel.PropertyDomainEvent<ApplicationClassMember, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class CollectionDomainEvent<S extends ApplicationClassMember, T> extends ApplicationFeatureViewModel.CollectionDomainEvent<S, T> {}
+    public static abstract class CollectionDomainEvent<S extends ApplicationClassMember, T> extends ApplicationFeatureViewModel.CollectionDomainEvent<S, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class ActionDomainEvent<S extends ApplicationClassMember> extends ApplicationFeatureViewModel.ActionDomainEvent<S> {}
+    public static abstract class ActionDomainEvent<S extends ApplicationClassMember> extends ApplicationFeatureViewModel.ActionDomainEvent<S> {
+		private static final long serialVersionUID = 1L;}
 
     
 
@@ -52,7 +55,8 @@ public abstract class ApplicationClassMember extends ApplicationFeatureViewModel
 
     // -- memberName (properties)
 
-    public static class MemberNameDomainEvent extends PropertyDomainEvent<ApplicationClassMember, String> {}
+    public static class MemberNameDomainEvent extends PropertyDomainEvent<ApplicationClassMember, String> {
+		private static final long serialVersionUID = 1L;}
 
     @Property(
             domainEvent = MemberNameDomainEvent.class
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassProperty.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassProperty.java
index fe5eedf..ac9bc9b 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassProperty.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationClassProperty.java
@@ -31,11 +31,14 @@ import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
 @ViewModelLayout(paged=100)
 public class ApplicationClassProperty extends ApplicationClassMember {
 
-    public static abstract class PropertyDomainEvent<T> extends ApplicationClassMember.PropertyDomainEvent<ApplicationClassProperty, T> {}
+    public static abstract class PropertyDomainEvent<T> extends ApplicationClassMember.PropertyDomainEvent<ApplicationClassProperty, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class CollectionDomainEvent<T> extends ApplicationClassMember.CollectionDomainEvent<ApplicationClassProperty, T> {}
+    public static abstract class CollectionDomainEvent<T> extends ApplicationClassMember.CollectionDomainEvent<ApplicationClassProperty, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class ActionDomainEvent extends ApplicationClassMember.ActionDomainEvent<ApplicationClassProperty> {}
+    public static abstract class ActionDomainEvent extends ApplicationClassMember.ActionDomainEvent<ApplicationClassProperty> {
+		private static final long serialVersionUID = 1L;}
 
     
 
@@ -50,7 +53,8 @@ public class ApplicationClassProperty extends ApplicationClassMember {
 
     // -- returnType
 
-    public static class ReturnTypeDomainEvent extends PropertyDomainEvent<String> {}
+    public static class ReturnTypeDomainEvent extends PropertyDomainEvent<String> {
+		private static final long serialVersionUID = 1L;}
 
     @Property(
             domainEvent = ReturnTypeDomainEvent.class
@@ -63,7 +67,8 @@ public class ApplicationClassProperty extends ApplicationClassMember {
 
     // -- derived
 
-    public static class DerivedDomainEvent extends PropertyDomainEvent<Boolean> {}
+    public static class DerivedDomainEvent extends PropertyDomainEvent<Boolean> {
+		private static final long serialVersionUID = 1L;}
 
     @Property(
             domainEvent = DerivedDomainEvent.class
@@ -76,7 +81,8 @@ public class ApplicationClassProperty extends ApplicationClassMember {
 
 
     // -- maxLength
-    public static class MaxLengthDomainEvent extends PropertyDomainEvent<Integer> {}
+    public static class MaxLengthDomainEvent extends PropertyDomainEvent<Integer> {
+		private static final long serialVersionUID = 1L;}
 
     @Property(
             domainEvent = MaxLengthDomainEvent.class,
@@ -95,7 +101,8 @@ public class ApplicationClassProperty extends ApplicationClassMember {
 
 
     // -- typicalLength
-    public static class TypicalLengthDomainEvent extends PropertyDomainEvent<Integer> {}
+    public static class TypicalLengthDomainEvent extends PropertyDomainEvent<Integer> {
+		private static final long serialVersionUID = 1L;}
 
     @Property(
             domainEvent = TypicalLengthDomainEvent.class,
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationFeatureViewModel.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationFeatureViewModel.java
index 61c7004..2863908 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationFeatureViewModel.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationFeatureViewModel.java
@@ -34,7 +34,10 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.repository.RepositoryService;
+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.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.extensions.secman.api.SecurityModule;
@@ -305,24 +308,33 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
 				.apply(getFeatureId().getParentPackageId());
 	}
 
-	
+
 	// -- equals, hashCode, toString
 
-	private final static String propertyNames = "featureId";
+
+	private final static Equality<ApplicationFeatureViewModel> equality =
+			ObjectContracts.checkEquals(ApplicationFeatureViewModel::getFeatureId);
+
+	private final static Hashing<ApplicationFeatureViewModel> hashing =
+			ObjectContracts.hashing(ApplicationFeatureViewModel::getFeatureId);
+
+	private final static ToString<ApplicationFeatureViewModel> toString =
+			ObjectContracts.toString("featureId", ApplicationFeatureViewModel::getFeatureId);
+
 
 	@Override
 	public boolean equals(final Object obj) {
-		return ObjectContracts.equals(this, obj, propertyNames);
+		return equality.equals(this, obj);
 	}
 
 	@Override
 	public int hashCode() {
-		return ObjectContracts.hashCode(this, propertyNames);
+		return hashing.hashCode(this);
 	}
 
 	@Override
 	public String toString() {
-		return ObjectContracts.toString(this, propertyNames);
+		return toString.toString(this);
 	}
 
 
@@ -341,10 +353,10 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
 		public static <T extends ApplicationFeatureViewModel> Function<ApplicationFeatureId, T> asViewModelForId(
 				final ApplicationFeatureRepositoryDefault applicationFeatureRepository, 
 				final FactoryService factoryService) {
-			
+
 			return (ApplicationFeatureId input) -> 
-				_Casts.uncheckedCast(ApplicationFeatureViewModel
-						.newViewModel(input, applicationFeatureRepository, factoryService));
+			_Casts.uncheckedCast(ApplicationFeatureViewModel
+					.newViewModel(input, applicationFeatureRepository, factoryService));
 
 		}
 		public static <T extends ApplicationFeatureViewModel> Function<ApplicationFeature, T> asViewModel(
@@ -352,13 +364,13 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
 				final FactoryService factoryService) {
 
 			return (ApplicationFeature input) ->
-				_Casts.uncheckedCast(ApplicationFeatureViewModel
-						.newViewModel(input.getFeatureId(), applicationFeatureRepository, factoryService));
+			_Casts.uncheckedCast(ApplicationFeatureViewModel
+					.newViewModel(input.getFeatureId(), applicationFeatureRepository, factoryService));
 		}
 	}
 
 	// -- DEPENDENCIES
-	
+
 	@Inject RepositoryService repository;
 	@Inject FactoryService factory;
 	@Inject ApplicationFeatureRepositoryDefault applicationFeatureRepository;
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationPackage.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationPackage.java
index b94905b..d7ebab8 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationPackage.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationPackage.java
@@ -29,18 +29,20 @@ import org.apache.isis.applib.annotation.ViewModelLayout;
 import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureType;
 
-@SuppressWarnings("UnusedDeclaration")
 @DomainObject(
         objectType = "isissecurity.ApplicationPackage"
 )
 @ViewModelLayout(paged=100)
 public class ApplicationPackage extends ApplicationFeatureViewModel {
 
-    public static abstract class PropertyDomainEvent<T> extends ApplicationFeatureViewModel.PropertyDomainEvent<ApplicationClass, T> {}
+    public static abstract class PropertyDomainEvent<T> extends ApplicationFeatureViewModel.PropertyDomainEvent<ApplicationClass, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class CollectionDomainEvent<T> extends ApplicationFeatureViewModel.CollectionDomainEvent<ApplicationClass, T> {}
+    public static abstract class CollectionDomainEvent<T> extends ApplicationFeatureViewModel.CollectionDomainEvent<ApplicationClass, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class ActionDomainEvent extends ApplicationFeatureViewModel.ActionDomainEvent<ApplicationClass> {}
+    public static abstract class ActionDomainEvent extends ApplicationFeatureViewModel.ActionDomainEvent<ApplicationClass> {
+		private static final long serialVersionUID = 1L;}
 
     
 
@@ -56,7 +58,8 @@ public class ApplicationPackage extends ApplicationFeatureViewModel {
 
     // -- contents (collection, for packages only)
 
-    public static class ContentsDomainEvent extends CollectionDomainEvent<ApplicationPackage> {}
+    public static class ContentsDomainEvent extends CollectionDomainEvent<ApplicationPackage> {
+		private static final long serialVersionUID = 1L;}
 
     @Collection(
             domainEvent = ContentsDomainEvent.class
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationPermission_feature.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationPermission_feature.java
index 844336b..8ef1120 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationPermission_feature.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/feature/ApplicationPermission_feature.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.extensions.secman.jdo.app.feature;
 
+import javax.inject.Inject;
+
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Contributed;
@@ -34,19 +36,15 @@ import org.apache.isis.extensions.secman.jdo.dom.permission.ApplicationPermissio
 import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault;
 
-@Mixin
+import lombok.RequiredArgsConstructor;
+
+@Mixin @RequiredArgsConstructor
 public class ApplicationPermission_feature {
 
     public static class ActionDomainEvent extends SecurityModule.ActionDomainEvent<ApplicationPermission_feature> {
 		private static final long serialVersionUID = 1L;}
 
-
-    // -- constructor
-    private final ApplicationPermission permission;
-    public ApplicationPermission_feature(final ApplicationPermission permission) {
-        this.permission = permission;
-    }
-    
+    final ApplicationPermission holder;
 
     @Action(
             semantics = SemanticsOf.SAFE,
@@ -73,16 +71,8 @@ public class ApplicationPermission_feature {
         return ApplicationFeatureId.newFeature(permission.getFeatureType(), permission.getFeatureFqn());
     }
 
-    @javax.inject.Inject
-    RepositoryService repository;
-    
-    @javax.inject.Inject
-    FactoryService factory;
-
-    @javax.inject.Inject
-    ApplicationFeatureRepositoryDefault applicationFeatureRepository;
-    
-    
-
+    @Inject RepositoryService repository;
+    @Inject FactoryService factory;
+    @Inject ApplicationFeatureRepositoryDefault applicationFeatureRepository;
 
 }
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/ApplicationUser_filterPermissions.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/ApplicationUser_filterPermissions.java
index 8dc2b5b..d27930a 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/ApplicationUser_filterPermissions.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/ApplicationUser_filterPermissions.java
@@ -52,7 +52,7 @@ public class ApplicationUser_filterPermissions {
         private static final long serialVersionUID = 1L;
     }
 
-    private final ApplicationUser user; // holder
+    private final ApplicationUser holder;
     
 
     // -- filterPermissions (action)
@@ -108,7 +108,7 @@ public class ApplicationUser_filterPermissions {
     List<UserPermissionViewModel> asViewModels(final Collection<ApplicationFeature> features) {
         return _Lists.map(
                         features,
-                        UserPermissionViewModel.Functions.asViewModel(user, factory));
+                        UserPermissionViewModel.Functions.asViewModel(holder, factory));
     }
 
     @Inject RepositoryService repository;
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/ApplicationUser_permissions.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/ApplicationUser_permissions.java
index 11f7610..be6f4e5 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/ApplicationUser_permissions.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/ApplicationUser_permissions.java
@@ -47,7 +47,7 @@ public class ApplicationUser_permissions {
     public static class ActionDomainEvent extends SecurityModule.ActionDomainEvent<ApplicationUser_permissions> {
 		private static final long serialVersionUID = 1L;}
 
-    private final ApplicationUser user; // holder
+    private final ApplicationUser holder;
 
     @Action(
         semantics = SemanticsOf.SAFE,
@@ -69,7 +69,7 @@ public class ApplicationUser_permissions {
     List<UserPermissionViewModel> asViewModels(final Collection<ApplicationFeature> features) {
         return _Lists.map(
                         features,
-                        UserPermissionViewModel.Functions.asViewModel(user, factory));
+                        UserPermissionViewModel.Functions.asViewModel(holder, factory));
     }
 
     @Inject RepositoryService repository;
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/UserPermissionViewModel.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/UserPermissionViewModel.java
index 49ffdca..b002fba 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/UserPermissionViewModel.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/app/user/UserPermissionViewModel.java
@@ -39,6 +39,7 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.util.ObjectContracts;
+import org.apache.isis.applib.util.ToString;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.extensions.secman.api.SecurityModule;
@@ -380,13 +381,15 @@ public class UserPermissionViewModel implements ViewModel {
 
     // -- toString
 
-    private final static String propertyNames = "user, featureId";
-
+    private final static ToString<UserPermissionViewModel> toString = 
+    		ObjectContracts
+    		.toString("user", UserPermissionViewModel::getUser)
+    		.thenToString("featureId", UserPermissionViewModel::getFeatureId);
+    
     @Override
     public String toString() {
-        return ObjectContracts.toString(this, propertyNames);
+        return toString.toString(this);
     }
-    
 
     // -- Functions
 
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
index cf6cdf7..32cefae 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
@@ -22,6 +22,7 @@ import java.util.Comparator;
 import java.util.Objects;
 import java.util.function.Function;
 
+import javax.inject.Inject;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.InheritanceStrategy;
@@ -150,11 +151,14 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
 
     // -- domain events
 
-    public static abstract class PropertyDomainEvent<T> extends SecurityModule.PropertyDomainEvent<ApplicationPermission, T> {}
+    public static abstract class PropertyDomainEvent<T> extends SecurityModule.PropertyDomainEvent<ApplicationPermission, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class CollectionDomainEvent<T> extends SecurityModule.CollectionDomainEvent<ApplicationPermission, T> {}
+    public static abstract class CollectionDomainEvent<T> extends SecurityModule.CollectionDomainEvent<ApplicationPermission, T> {
+		private static final long serialVersionUID = 1L;}
 
-    public static abstract class ActionDomainEvent extends SecurityModule.ActionDomainEvent<ApplicationPermission> {}
+    public static abstract class ActionDomainEvent extends SecurityModule.ActionDomainEvent<ApplicationPermission> {
+		private static final long serialVersionUID = 1L;}
 
     
 
@@ -195,7 +199,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
 
     // -- role (property)
 
-    public static class RoleDomainEvent extends PropertyDomainEvent<ApplicationRole> {}
+    public static class RoleDomainEvent extends PropertyDomainEvent<ApplicationRole> {
+		private static final long serialVersionUID = 1L;}
 
 
     @javax.jdo.annotations.Column(name = "roleId", allowsNull="false")
@@ -213,7 +218,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
     
 
     // -- updateRole (action)
-    public static class UpdateRoleDomainEvent extends ActionDomainEvent {}
+    public static class UpdateRoleDomainEvent extends ActionDomainEvent {
+		private static final long serialVersionUID = 1L;}
 
     @Action(
             domainEvent = UpdateRoleDomainEvent.class,
@@ -232,7 +238,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
     
 
     // -- rule (property)
-    public static class RuleDomainEvent extends PropertyDomainEvent<ApplicationPermissionRule> {}
+    public static class RuleDomainEvent extends PropertyDomainEvent<ApplicationPermissionRule> {
+		private static final long serialVersionUID = 1L;}
 
 
     @javax.jdo.annotations.Column(allowsNull="false")
@@ -247,7 +254,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
     
 
     // -- allow (action)
-    public static class AllowDomainEvent extends ActionDomainEvent {}
+    public static class AllowDomainEvent extends ActionDomainEvent {
+		private static final long serialVersionUID = 1L;}
 
     @Action(
             domainEvent = AllowDomainEvent.class,
@@ -265,7 +273,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
     
 
     // -- veto (action)
-    public static class VetoDomainEvent extends ActionDomainEvent {}
+    public static class VetoDomainEvent extends ActionDomainEvent {
+		private static final long serialVersionUID = 1L;}
 
     @Action(
             domainEvent = VetoDomainEvent.class,
@@ -283,7 +292,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
     
 
     // -- mode (property)
-    public static class ModeDomainEvent extends PropertyDomainEvent<ApplicationPermissionMode> {}
+    public static class ModeDomainEvent extends PropertyDomainEvent<ApplicationPermissionMode> {
+		private static final long serialVersionUID = 1L;}
 
 
     @javax.jdo.annotations.Column(allowsNull="false")
@@ -299,7 +309,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
 
     // -- viewing(action)
 
-    public static class ViewingDomainEvent extends ActionDomainEvent {}
+    public static class ViewingDomainEvent extends ActionDomainEvent {
+		private static final long serialVersionUID = 1L;}
 
     @Action(
             domainEvent = ViewingDomainEvent.class,
@@ -318,7 +329,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
 
     // -- changing (action)
 
-    public static class ChangingDomainEvent extends ActionDomainEvent {}
+    public static class ChangingDomainEvent extends ActionDomainEvent {
+		private static final long serialVersionUID = 1L;}
 
     @Action(
             domainEvent = ChangingDomainEvent.class,
@@ -353,7 +365,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
 
     // region > type (derived, memberType of associated feature)
 
-    public static class TypeDomainEvent extends PropertyDomainEvent<String> {}
+    public static class TypeDomainEvent extends PropertyDomainEvent<String> {
+		private static final long serialVersionUID = 1L;}
 
     /**
      * Combines {@link #getFeatureType() feature type} and member type.
@@ -402,7 +415,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
 
     // -- featureFqn
 
-    public static class FeatureFqnDomainEvent extends PropertyDomainEvent<String> {}
+    public static class FeatureFqnDomainEvent extends PropertyDomainEvent<String> {
+		private static final long serialVersionUID = 1L;}
 
     /**
      * The {@link ApplicationFeatureId#getFullyQualifiedName() fully qualified name}
@@ -429,7 +443,8 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
     
 
     // -- delete (action)
-    public static class DeleteDomainEvent extends ActionDomainEvent {}
+    public static class DeleteDomainEvent extends ActionDomainEvent {
+		private static final long serialVersionUID = 1L;}
 
     @Action(
             semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE,
@@ -444,8 +459,6 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
 
     // -- CONTRACT
     
-    private final static String propertyNames = "role, featureType, featureFqn, mode";
-    
     private final static ObjectContract<ApplicationPermission> contract	= 
     		ObjectContracts.contract(ApplicationPermission.class)
     		.thenUse("role", ApplicationPermission::getRole)
@@ -497,14 +510,7 @@ public class ApplicationPermission implements Comparable<ApplicationPermission>
 
     }
     
-
-    //region  > services (injected)
-    @javax.inject.Inject
-    RepositoryService repository;
-    
-    @javax.inject.Inject
-    ApplicationFeatureRepositoryDefault applicationFeatureRepository;
-
-    
+    @Inject RepositoryService repository;
+    @Inject ApplicationFeatureRepositoryDefault applicationFeatureRepository;
 
 }
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissionMenu.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissionMenu.java
index 8f8eb09..fdb0a06 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissionMenu.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissionMenu.java
@@ -42,13 +42,13 @@ import org.apache.isis.extensions.secman.api.SecurityModule;
 public class ApplicationPermissionMenu {
 
         // -- domain event classes
-        public static abstract class PropertyDomainEvent<T> extends SecurityModule.PropertyDomainEvent<ApplicationPermissions, T> {
+        public static abstract class PropertyDomainEvent<T> extends SecurityModule.PropertyDomainEvent<ApplicationPermissionMenu, T> {
 			private static final long serialVersionUID = 1L;}
 
-        public static abstract class CollectionDomainEvent<T> extends SecurityModule.CollectionDomainEvent<ApplicationPermissions, T> {
+        public static abstract class CollectionDomainEvent<T> extends SecurityModule.CollectionDomainEvent<ApplicationPermissionMenu, T> {
 			private static final long serialVersionUID = 1L;}
 
-        public static abstract class ActionDomainEvent extends SecurityModule.ActionDomainEvent<ApplicationPermissions> {
+        public static abstract class ActionDomainEvent extends SecurityModule.ActionDomainEvent<ApplicationPermissionMenu> {
 			private static final long serialVersionUID = 1L;}
         
 
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissions.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissions.java
deleted file mode 100644
index 549eca9..0000000
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermissions.java
+++ /dev/null
@@ -1,205 +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.isis.extensions.secman.jdo.dom.permission;
-
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.annotation.RestrictTo;
-import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.extensions.secman.api.SecurityModule;
-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.jdo.dom.role.ApplicationRole;
-import org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser;
-import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureType;
-
-/**
- * @deprecated - use {@link ApplicationPermissionRepository} or {@link ApplicationPermissionMenu}.
- */
-@Deprecated
-@DomainService(nature = NatureOfService.DOMAIN)
-public class ApplicationPermissions {
-
-    // -- domain event classes
-
-    public static abstract class PropertyDomainEvent<T> extends SecurityModule.PropertyDomainEvent<ApplicationPermissions, T> {}
-
-    public static abstract class CollectionDomainEvent<T> extends SecurityModule.CollectionDomainEvent<ApplicationPermissions, T> {}
-
-    public static abstract class ActionDomainEvent extends SecurityModule.ActionDomainEvent<ApplicationPermissions> {}
-    
-
-    // -- iconName
-
-    public String iconName() {
-        return "applicationPermission";
-    }
-
-    
-
-    // -- findByRole (programmatic)
-
-    /**
-     * @deprecated - use {@link ApplicationPermissionRepository#findByRoleCached(ApplicationRole)} or {@link ApplicationPermissionRepository#findByRole(ApplicationRole)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    public List<ApplicationPermission> findByRole(final ApplicationRole role) {
-        return applicationPermissionRepository.findByRole(role);
-    }
-    
-
-    // -- findByUser (programmatic)
-
-    /**
-     * @deprecated - use {@link ApplicationPermissionRepository#findByUserCached(ApplicationUser)} or {@link ApplicationPermissionRepository#findByUser(ApplicationUser)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    public List<ApplicationPermission> findByUser(final ApplicationUser user) {
-        return applicationPermissionRepository.findByUser(user);
-    }
-
-    
-
-    // -- findByUserAndPermissionValue (programmatic)
-    /**
-     * @deprecated - use {@link ApplicationPermissionRepository#findByUserAndPermissionValue(String, ApplicationPermissionValue)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    public ApplicationPermission findByUserAndPermissionValue(final String username, final ApplicationPermissionValue permissionValue) {
-        return applicationPermissionRepository.findByUserAndPermissionValue(username, permissionValue);
-    }
-    
-
-    // -- findByRoleAndRuleAndFeatureType (programmatic)
-
-    /**
-     * @deprecated - use {@link ApplicationPermissionRepository#findByRoleAndRuleAndFeatureTypeCached(ApplicationRole, ApplicationPermissionRule, ApplicationFeatureType)} or {@link ApplicationPermissionRepository#findByRoleAndRuleAndFeatureType(ApplicationRole, ApplicationPermissionRule, ApplicationFeatureType)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    public List<ApplicationPermission> findByRoleAndRuleAndFeatureType(
-            final ApplicationRole role, final ApplicationPermissionRule rule,
-            final ApplicationFeatureType type) {
-        return applicationPermissionRepository.findByRoleAndRuleAndFeatureType(role, rule, type);
-    }
-    
-
-    // -- findByRoleAndRuleAndFeature (programmatic)
-
-    /**
-     * @deprecated - use {@link ApplicationPermissionRepository#findByRoleAndRuleAndFeatureCached(ApplicationRole, ApplicationPermissionRule, ApplicationFeatureType, String)} or {@link ApplicationPermissionRepository#findByRoleAndRuleAndFeature(ApplicationRole, ApplicationPermissionRule, ApplicationFeatureType, String)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    public ApplicationPermission findByRoleAndRuleAndFeature(final ApplicationRole role, final ApplicationPermissionRule rule, final ApplicationFeatureType type, final String featureFqn) {
-        return applicationPermissionRepository.findByRoleAndRuleAndFeature(role, rule, type, featureFqn);
-    }
-    
-
-    // -- findByFeature (programmatic)
-
-    /**
-     * @deprecated - use {@link ApplicationPermissionRepository#findByFeatureCached(ApplicationFeatureId)} or {@link ApplicationPermissionRepository#findByFeature(ApplicationFeatureId)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    public List<ApplicationPermission> findByFeature(final ApplicationFeatureId featureId) {
-        return applicationPermissionRepository.findByFeature(featureId);
-    }
-    
-
-    // -- newPermission (programmatic)
-
-    /**
-     * @deprecated - use {@link ApplicationPermissionRepository#newPermission(ApplicationRole, ApplicationPermissionRule, ApplicationPermissionMode, ApplicationFeatureType, String)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    public ApplicationPermission newPermission(
-            final ApplicationRole role,
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final ApplicationFeatureType featureType,
-            final String featureFqn) {
-        return applicationPermissionRepository.newPermission(role, rule, mode, featureType, featureFqn);
-    }
-
-    /**
-     * @deprecated - use {@link ApplicationPermissionRepository#newPermissionNoCheck(ApplicationRole, ApplicationPermissionRule, ApplicationPermissionMode, ApplicationFeatureType, String)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    public ApplicationPermission newPermissionNoCheck(
-            final ApplicationRole role,
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final ApplicationFeatureType featureType,
-            final String featureFqn) {
-        return applicationPermissionRepository.newPermissionNoCheck(role, rule, mode, featureType, featureFqn);
-    }
-
-    /**
-     * @deprecated - use {@link ApplicationPermissionRepository#newPermission(ApplicationRole, ApplicationPermissionRule, ApplicationPermissionMode, String, String, String)} instead.
-     */
-    @Deprecated
-    @Programmatic
-    public ApplicationPermission newPermission(
-            final ApplicationRole role,
-            final ApplicationPermissionRule rule,
-            final ApplicationPermissionMode mode,
-            final String featurePackage,
-            final String featureClassName,
-            final String featureMemberName) {
-        return applicationPermissionRepository.newPermission(role, rule, mode, featurePackage, featureClassName, featureMemberName);
-    }
-    
-
-    // -- allPermission (action)
-    public static class AllPermissionsDomainEvent extends ActionDomainEvent {}
-
-    /**
-     * @deprecated - use {@link ApplicationPermissionMenu#allPermissions()}
-     */
-    @Deprecated
-    @Action(
-            domainEvent=AllPermissionsDomainEvent.class,
-            semantics = SemanticsOf.SAFE,
-            restrictTo = RestrictTo.PROTOTYPING
-    )
-    public List<ApplicationPermission> allPermissions() {
-        return applicationPermissionRepository.allPermissions();
-    }
-    
-
-    //region  > injected
-    @Inject
-    ApplicationPermissionRepository applicationPermissionRepository;
-    
-}
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java
index b3854ea..22195b6 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java
@@ -18,10 +18,12 @@
  */
 package org.apache.isis.extensions.secman.jdo.dom.role;
 
+import java.util.Comparator;
 import java.util.List;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import javax.inject.Inject;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.InheritanceStrategy;
@@ -47,7 +49,10 @@ import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.types.DescriptionType;
+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.commons.internal.collections._Lists;
 import org.apache.isis.extensions.secman.api.SecurityModule;
 import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode;
@@ -686,41 +691,45 @@ implements org.apache.isis.extensions.secman.api.role.ApplicationRole, Comparabl
     
 
     // -- equals, hashCode, compareTo, toString
-    private final static String propertyNames = "name";
+    
+    private final static Comparator<ApplicationRole> comparator =
+     		Comparator.comparing(ApplicationRole::getName);
+    
+	private final static Equality<ApplicationRole> equality =
+			ObjectContracts.checkEquals(ApplicationRole::getName);
+
+	private final static Hashing<ApplicationRole> hashing =
+			ObjectContracts.hashing(ApplicationRole::getName);
+
+	private final static ToString<ApplicationRole> toString =
+			ObjectContracts.toString("name", ApplicationRole::getName);
+	
 
     @Override
     public int compareTo(final ApplicationRole o) {
-        return ObjectContracts.compare(this, o, propertyNames);
+    	return comparator.compare(this, o);
     }
 
     @Override
     public boolean equals(final Object obj) {
-        return ObjectContracts.equals(this, obj, propertyNames);
+    	return equality.equals(this, obj);
     }
 
     @Override
     public int hashCode() {
-        return ObjectContracts.hashCode(this, propertyNames);
+        return hashing.hashCode(this);
     }
 
     @Override
     public String toString() {
-        return ObjectContracts.toString(this, propertyNames);
+        return toString.toString(this);
     }
-
     
-
-    //region  >  (injected)
-    @javax.inject.Inject
-    RepositoryService repository;
-    @javax.inject.Inject
-    ApplicationFeatureRepository applicationFeatureRepository;
-    @javax.inject.Inject
-    ApplicationPermissionRepository applicationPermissionRepository;
-    @javax.inject.Inject
-    ApplicationUserRepository applicationUserRepository;
-    @javax.inject.Inject
-    ApplicationRoleRepository applicationRoleRepository;
+    @Inject RepositoryService repository;
+    @Inject ApplicationFeatureRepository applicationFeatureRepository;
+    @Inject ApplicationPermissionRepository applicationPermissionRepository;
+    @Inject ApplicationUserRepository applicationUserRepository;
+    @Inject ApplicationRoleRepository applicationRoleRepository;
     
 
 }
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancies.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancies.java
deleted file mode 100644
index c5b32f5..0000000
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancies.java
+++ /dev/null
@@ -1,151 +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.isis.extensions.secman.jdo.dom.tenancy;
-
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Optionality;
-import org.apache.isis.applib.annotation.Parameter;
-import org.apache.isis.applib.annotation.ParameterLayout;
-import org.apache.isis.applib.annotation.RestrictTo;
-import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.extensions.secman.api.SecurityModule;
-
-/**
- * @deprecated - replaced by {@link ApplicationTenancyMenu}
- */
-@Deprecated
-@DomainService(nature = NatureOfService.DOMAIN)
-public class ApplicationTenancies {
-
-    // -- domain event classes
-    public static abstract class PropertyDomainEvent<T> extends SecurityModule.PropertyDomainEvent<ApplicationTenancies, T> {}
-
-    public static abstract class CollectionDomainEvent<T> extends SecurityModule.CollectionDomainEvent<ApplicationTenancies, T> {}
-
-    public static abstract class ActionDomainEvent extends SecurityModule.ActionDomainEvent<ApplicationTenancies> {}
-    
-
-    // -- iconName
-    public String iconName() {
-        return "applicationTenancy";
-    }
-    
-
-    // -- findTenancyByName
-    public static class FindTenancyByNameDomainEvent extends ActionDomainEvent {
-    }
-
-    /**
-     * @deprecated - use {@link ApplicationTenancyMenu#findTenancies(String)} instead.
-     */
-    @Deprecated
-    @Action(
-            domainEvent = FindTenancyByNameDomainEvent.class,
-            semantics = SemanticsOf.SAFE,
-            hidden = Where.EVERYWHERE // since deprecated
-    )
-    public ApplicationTenancy findTenancyByName(
-            @Parameter(maxLength = ApplicationTenancy.MAX_LENGTH_NAME)
-            @ParameterLayout(named = "Name", typicalLength = ApplicationTenancy.TYPICAL_LENGTH_NAME)
-            final String name) {
-        return applicationTenancyRepository.findByName(name);
-    }
-    
-
-    // -- findTenancyByPath
-
-    public static class FindTenancyByPathDomainEvent extends ActionDomainEvent {}
-
-    /**
-     * @deprecated - use {@link ApplicationTenancyMenu#findTenancies(String)} instead.
-     */
-    @Deprecated
-    @Action(
-            domainEvent = FindTenancyByPathDomainEvent.class,
-            semantics = SemanticsOf.SAFE,
-            hidden = Where.EVERYWHERE // since deprecated
-    )
-    public ApplicationTenancy findTenancyByPath(
-            @Parameter(maxLength = ApplicationTenancy.MAX_LENGTH_PATH)
-            @ParameterLayout(named = "Path")
-            final String path) {
-        return applicationTenancyRepository.findByPath(path);
-    }
-    
-
-    // -- newTenancy
-    public static class NewTenancyDomainEvent extends ActionDomainEvent {
-    }
-
-    /**
-     * @deprecated - use {@link ApplicationTenancyMenu#newTenancy(String, String, ApplicationTenancy)} instead.
-     */
-    @Action(
-            domainEvent = NewTenancyDomainEvent.class,
-            semantics = SemanticsOf.IDEMPOTENT,
-            hidden = Where.EVERYWHERE
-    )
-    public ApplicationTenancy newTenancy(
-            @Parameter(maxLength = ApplicationTenancy.MAX_LENGTH_NAME)
-            @ParameterLayout(named = "Name", typicalLength = ApplicationTenancy.TYPICAL_LENGTH_NAME)
-            final String name,
-            @Parameter(maxLength = ApplicationTenancy.MAX_LENGTH_PATH)
-            @ParameterLayout(named = "Path")
-            final String path,
-            @Parameter(optionality = Optionality.OPTIONAL)
-            @ParameterLayout(named = "Parent")
-            final ApplicationTenancy parent) {
-        return applicationTenancyRepository.newTenancy(name, path, parent);
-    }
-    
-
-    // -- allTenancies
-    public static class AllTenanciesDomainEvent extends ActionDomainEvent {
-    }
-
-    /**
-     * @deprecated - use {@link ApplicationTenancyMenu#allTenancies()} instead.
-     */
-    @Action(
-            domainEvent = AllTenanciesDomainEvent.class,
-            semantics = SemanticsOf.SAFE,
-            restrictTo = RestrictTo.PROTOTYPING,
-            hidden = Where.EVERYWHERE
-    )
-    @MemberOrder(sequence = "100.30.4")
-    public List<ApplicationTenancy> allTenancies() {
-        return applicationTenancyRepository.allTenancies();
-    }
-    
-
-
-    // -- injected
-    @Inject
-    ApplicationTenancyRepository applicationTenancyRepository;
-    
-
-}
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancy.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancy.java
index 74c03df..bfc6e39 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancy.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancy.java
@@ -18,10 +18,12 @@
  */
 package org.apache.isis.extensions.secman.jdo.dom.tenancy;
 
+import java.util.Comparator;
 import java.util.List;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import javax.inject.Inject;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.InheritanceStrategy;
@@ -46,7 +48,10 @@ import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.repository.RepositoryService;
+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.commons.internal.collections._Lists;
 import org.apache.isis.extensions.secman.api.SecurityModule;
 import org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser;
@@ -346,7 +351,8 @@ public class ApplicationTenancy implements Comparable<ApplicationTenancy> {
 
     // -- removeChild (action)
 
-    public static class RemoveChildDomainEvent extends ActionDomainEvent {}
+    public static class RemoveChildDomainEvent extends ActionDomainEvent {
+		private static final long serialVersionUID = 1L;}
 
     @Action(
             domainEvent = RemoveChildDomainEvent.class,
@@ -384,28 +390,45 @@ public class ApplicationTenancy implements Comparable<ApplicationTenancy> {
     }
     
 
-    // -- compareTo
+    // -- CONTRACT
+    
+	private final static Equality<ApplicationTenancy> equality =
+			ObjectContracts.checkEquals(ApplicationTenancy::getPath);
+
+	private final static Hashing<ApplicationTenancy> hashing =
+			ObjectContracts.hashing(ApplicationTenancy::getPath);
+
+	private final static ToString<ApplicationTenancy> toString =
+			ObjectContracts.toString("path", ApplicationTenancy::getPath)
+			.thenToString("name", ApplicationTenancy::getName);
+	
+	 private final static Comparator<ApplicationTenancy> comparator =
+		 		Comparator.comparing(ApplicationTenancy::getPath);
 
 
     @Override
+    public boolean equals(final Object other) {
+        return equality.equals(this, other);
+    }
+
+    @Override
+    public int hashCode() {
+    	return hashing.hashCode(this);
+    }
+
+    @Override
     public String toString() {
-        return ObjectContracts.toString(this, "path,name");
+        return toString.toString(this);
     }
 
     @Override
     public int compareTo(final ApplicationTenancy o) {
-        return ObjectContracts.compare(this, o, "path");
+        return comparator.compare(this, o);
     }
     
-
-    //region  >  (injected)
-    @javax.inject.Inject
-    ApplicationUserRepository applicationUserRepository;
-    @javax.inject.Inject
-    ApplicationTenancyRepository applicationTenancyRepository;
-    @javax.inject.Inject
-    FactoryService factoryService;
-    @javax.inject.Inject
-    RepositoryService repository;
+    @Inject ApplicationUserRepository applicationUserRepository;
+    @Inject ApplicationTenancyRepository applicationTenancyRepository;
+    @Inject FactoryService factoryService;
+    @Inject RepositoryService repository;
     
 }
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancyMenu.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancyMenu.java
index 34869f2..ad6431f 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancyMenu.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancyMenu.java
@@ -46,13 +46,13 @@ import org.apache.isis.extensions.secman.api.SecurityModule;
 public class ApplicationTenancyMenu {
 
     // -- domain event classes
-    public static abstract class PropertyDomainEvent<T> extends SecurityModule.PropertyDomainEvent<ApplicationTenancies, T> {
+    public static abstract class PropertyDomainEvent<T> extends SecurityModule.PropertyDomainEvent<ApplicationTenancyMenu, T> {
 		private static final long serialVersionUID = 1L;}
 
-    public static abstract class CollectionDomainEvent<T> extends SecurityModule.CollectionDomainEvent<ApplicationTenancies, T> {
+    public static abstract class CollectionDomainEvent<T> extends SecurityModule.CollectionDomainEvent<ApplicationTenancyMenu, T> {
 		private static final long serialVersionUID = 1L;}
 
-    public static abstract class ActionDomainEvent extends SecurityModule.ActionDomainEvent<ApplicationTenancies> {
+    public static abstract class ActionDomainEvent extends SecurityModule.ActionDomainEvent<ApplicationTenancyMenu> {
 		private static final long serialVersionUID = 1L;}
     
 
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancyPathEvaluator.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancyPathEvaluator.java
deleted file mode 100644
index 3a039ca..0000000
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancyPathEvaluator.java
+++ /dev/null
@@ -1,61 +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.isis.extensions.secman.jdo.dom.tenancy;
-
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser;
-
-/**
- * Optional SPI interface to be implemented by a domain service, providing an alternative mechanism for evaluating the
- * application tenancy of the object being interacted with (the "what") and optionally also the tenancy of the user
- * making the call (the "who").
- *
- * @see #handles(Class)
- * @see #applicationTenancyPathFor(Object)
- *
- * @deprecated - replaced by {@link ApplicationTenancyEvaluator}.
- */
-@Deprecated
-public interface ApplicationTenancyPathEvaluator {
-
-    /**
-     * Whether this evaluator can determine the tenancy of the specified domain entity (such as <tt>ToDoItem</tt>)
-     * being interacted with (the "what").
-     *
-     * <p>
-     *     This method is also called to determine if the evaluator is also able to determine the tenancy of the
-     *     security module's own {@link org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser}, ie the "who" is
-     *     doing the interacting.  If the evaluator does not handle the class, then the fallback behaviour is
-     *     to invoke {@link ApplicationUser#getAtPath()} getAtPath} on the {@link ApplicationUser} and use the
-     *     path from that.
-     * </p>
-     */
-    @Programmatic
-    boolean handles(Class<?> cls);
-
-    /**
-     * Return the tenancy path for the target domain object being interacted with, either the "what" (a domain entity
-     * such as <tt>ToDoItem</tt>, say) and optionally the "who", ie the security module's own
-     * {@link org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser}.  This latter depends on the result of the
-     * earlier call to {@link #handles(Class)}.
-     */
-    @Programmatic
-    String applicationTenancyPathFor(final Object domainObject);
-
-}
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java
index bc7deb1..82081ed 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java
@@ -23,6 +23,7 @@ import java.util.Objects;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import javax.inject.Inject;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.InheritanceStrategy;
@@ -998,28 +999,18 @@ public class ApplicationUser implements Comparable<ApplicationUser>, HasUsername
         return contract.toString(this);
     }
 
-    
-
-    //region  >  (injected)
-    @javax.inject.Inject
-    ApplicationRoleRepository applicationRoleRepository;
-    @javax.inject.Inject
-    ApplicationUserRepository applicationUserRepository;
-    @javax.inject.Inject
-    ApplicationPermissionRepository applicationPermissionRepository;
-    @javax.inject.Inject
-    PasswordEncryptionService passwordEncryptionService;
-    @javax.inject.Inject
-    RepositoryService repository;
-    @javax.inject.Inject
-    UserService userService;
+    @Inject ApplicationRoleRepository applicationRoleRepository;
+    @Inject ApplicationUserRepository applicationUserRepository;
+    @Inject ApplicationPermissionRepository applicationPermissionRepository;
+    @Inject PasswordEncryptionService passwordEncryptionService;
+    @Inject RepositoryService repository;
+    @Inject UserService userService;
     /**
      * Optional service, if configured then is used to evaluate permissions within
      * {@link org.apache.isis.extensions.secman.api.permission.ApplicationPermissionValueSet#evaluate(ApplicationFeatureId, ApplicationPermissionMode)}
      * else will fallback to a {@link org.apache.isis.extensions.secman.api.permission.PermissionsEvaluationService#DEFAULT default}
      * implementation.
      */
-    @javax.inject.Inject
-    PermissionsEvaluationService permissionsEvaluationService;
+    @Inject PermissionsEvaluationService permissionsEvaluationService;
     
 }
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/HasUsername_open.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/HasUsername_open.java
index e4ab535..b4a3db6 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/HasUsername_open.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/HasUsername_open.java
@@ -30,17 +30,15 @@ import org.apache.isis.applib.services.HasUsername;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.extensions.secman.api.SecurityModule;
 
-@Mixin(method = "exec")
-public class HasUsername_open {
-
-    private final HasUsername hasUsername;
+import lombok.RequiredArgsConstructor;
 
-    public HasUsername_open(final HasUsername hasUsername) {
-        this.hasUsername = hasUsername;
-    }
+@Mixin(method = "exec") @RequiredArgsConstructor
+public class HasUsername_open {
 
+    private final HasUsername holder;
 
-    public static class ActionDomainEvent extends SecurityModule.ActionDomainEvent<HasUsername_open> {}
+    public static class ActionDomainEvent extends SecurityModule.ActionDomainEvent<HasUsername_open> {
+		private static final long serialVersionUID = 1L;}
 
     @Action(
             semantics = SemanticsOf.SAFE,
@@ -51,17 +49,17 @@ public class HasUsername_open {
     )
     @MemberOrder(name = "User", sequence = "1") // associate with a 'User' property (if any)
     public ApplicationUser exec() {
-        if (hasUsername == null || hasUsername.getUsername() == null) {
+        if (holder == null || holder.getUsername() == null) {
             return null;
         }
-        return applicationUserRepository.findByUsername(hasUsername.getUsername());
+        return applicationUserRepository.findByUsername(holder.getUsername());
     }
     public boolean hideExec() {
-        return hasUsername instanceof ApplicationUser;
+        return holder instanceof ApplicationUser;
     }
 
     public TranslatableString disableExec() {
-        if (hasUsername == null || hasUsername.getUsername() == null) {
+        if (holder == null || holder.getUsername() == null) {
             return TranslatableString.tr("No username");
         }
         return null;
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/facets/ApplicationTenancyEvaluatorUsingPaths.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/facets/ApplicationTenancyEvaluatorUsingPaths.java
deleted file mode 100644
index e10737f..0000000
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/facets/ApplicationTenancyEvaluatorUsingPaths.java
+++ /dev/null
@@ -1,150 +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.isis.extensions.secman.jdo.facets;
-
-import java.util.concurrent.Callable;
-
-import javax.inject.Inject;
-
-import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
-import org.apache.isis.extensions.secman.jdo.dom.tenancy.ApplicationTenancyEvaluator;
-import org.apache.isis.extensions.secman.jdo.dom.tenancy.ApplicationTenancyPathEvaluator;
-import org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUser;
-
-class ApplicationTenancyEvaluatorUsingPaths implements ApplicationTenancyEvaluator {
-
-    private final ApplicationTenancyPathEvaluator evaluator;
-    ApplicationTenancyEvaluatorUsingPaths(final ApplicationTenancyPathEvaluator pathEvaluator) {
-        this.evaluator = pathEvaluator;
-    }
-
-    @Override
-    public boolean handles(Class<?> cls) {
-        return evaluator.handles(cls);
-    }
-
-    @Override
-    public String hides(Object domainObject, ApplicationUser applicationUser) {
-
-        // eg /x/y
-        String objectTenancyPath = applicationTenancyPathForCached(domainObject);
-        if (objectTenancyPath == null) {
-            return null;
-        }
-
-        // eg /x  or /x/y/z
-        String userTenancyPath = userTenancyPathForCached(applicationUser);
-        if (userTenancyPath == null) {
-            return "User has no tenancy";
-        }
-
-        if (objectVisibleToUser(objectTenancyPath, userTenancyPath)) {
-            return null;
-        }
-
-        // it's ok to return this info, because it isn't actually rendered (helpful if debugging)
-        return String.format(
-                "User with tenancy '%s' is not permitted to view object with tenancy '%s'",
-                userTenancyPath,
-                objectTenancyPath);
-    }
-
-    @Override
-    public String disables(Object domainObject, ApplicationUser applicationUser) {
-
-        // eg /x/y
-        String objectTenancyPath = applicationTenancyPathForCached(domainObject);
-        if (objectTenancyPath == null) {
-            return null;
-        }
-
-        // eg /x  or /x/y/z
-        String userTenancyPath = userTenancyPathForCached(applicationUser);
-        if (userTenancyPath == null) {
-            return "User has no tenancy";
-        }
-
-        if (objectEnabledForUser(objectTenancyPath, userTenancyPath)) {
-            return null;
-        }
-
-        return String.format(
-                "User with tenancy '%s' is not permitted to edit object with tenancy '%s'",
-                userTenancyPath,
-                objectTenancyPath);
-    }
-
-    /**
-     * Protected visibility so can be overridden if required, eg using wildcard matches.
-     */
-    protected boolean objectVisibleToUser(String objectTenancyPath, String userTenancyPath) {
-        // if in "same hierarchy"
-        return objectTenancyPath.startsWith(userTenancyPath) ||
-                userTenancyPath.startsWith(objectTenancyPath);
-    }
-
-
-    /**
-     * Protected visibility so can be overridden if required, eg using wildcard matches
-     */
-    protected boolean objectEnabledForUser(String objectTenancyPath, String userTenancyPath) {
-        // if user's tenancy "above" object's tenancy in the hierarchy
-        return objectTenancyPath.startsWith(userTenancyPath);
-    }
-
-    /**
-     * Per {@link #applicationTenancyPathFor(Object)}, with result cached for the remainder of the request using the {@link QueryResultsCache}.
-     */
-    protected String applicationTenancyPathForCached(final Object domainObject) {
-        return queryResultsCache.execute(new Callable<String>() {
-            @Override
-            public String call() throws Exception {
-                return applicationTenancyPathFor(domainObject);
-            }
-        }, TenantedAuthorizationFacetDefault.class, "applicationTenancyPathFor", domainObject);
-    }
-
-    protected String applicationTenancyPathFor(final Object domainObject) {
-        return evaluator.applicationTenancyPathFor(domainObject);
-    }
-
-    /**
-     * Per {@link #userTenancyPathFor(ApplicationUser)}, with result cached for the remainder of the request using the {@link QueryResultsCache}.
-     */
-    protected String userTenancyPathForCached(final ApplicationUser applicationUser) {
-        return queryResultsCache.execute(new Callable<String>() {
-            @Override
-            public String call() throws Exception {
-                return userTenancyPathFor(applicationUser);
-            }
-        }, TenantedAuthorizationFacetDefault.class, "userTenancyPathFor", applicationUser);
-    }
-
-    protected String userTenancyPathFor(final ApplicationUser applicationUser) {
-        if (evaluator.handles(applicationUser.getClass())) {
-            return evaluator.applicationTenancyPathFor(applicationUser);
-        }
-        return applicationUser.getAtPath();
-    }
-
-
-    @Inject
-    QueryResultsCache queryResultsCache;
-
-}
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractTenancyFixtureScript.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractTenancyFixtureScript.java
index 9c8e6b5..02524d2 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractTenancyFixtureScript.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractTenancyFixtureScript.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.extensions.secman.jdo.seed.scripts;
 
+import javax.inject.Inject;
+
 import org.apache.isis.extensions.fixtures.legacy.fixturescripts.FixtureScript;
 import org.apache.isis.extensions.secman.jdo.dom.tenancy.ApplicationTenancy;
 import org.apache.isis.extensions.secman.jdo.dom.tenancy.ApplicationTenancyRepository;
@@ -46,7 +48,6 @@ public abstract class AbstractTenancyFixtureScript extends FixtureScript {
         return applicationTenancy;
     }
 
-    @javax.inject.Inject
-    private ApplicationTenancyRepository applicationTenancyRepository;
+    @Inject private ApplicationTenancyRepository applicationTenancyRepository;
 
 }