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 2020/12/04 15:44:23 UTC
[isis] branch master updated: ISIS-2464: toString,
equals and hashCode for VirtualClock(s)
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 87b3bdc ISIS-2464: toString, equals and hashCode for VirtualClock(s)
87b3bdc is described below
commit 87b3bdcf434fbc0ad6584528caaa01ab4b713d5c
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Dec 4 16:44:08 2020 +0100
ISIS-2464: toString, equals and hashCode for VirtualClock(s)
---
.../org/apache/isis/applib/clock/VirtualClock.java | 2 +-
.../isis/applib/clock/VirtualClock_frozen.java | 31 ++++++++++++++++-
...lClock_frozen.java => VirtualClock_system.java} | 30 ++++++++++++++---
.../isis/applib/clock/VirtualClock_withOffset.java | 31 ++++++++++++++++-
.../isis/applib/services/sudo/SudoService.java | 8 +++--
.../isis/applib/services/user/UserMemento.java | 2 +-
.../authentication/AuthenticationSession.java | 7 ----
.../AuthenticationSessionAbstract.java | 39 ++++++----------------
.../manager/AuthorizationManager.java | 2 +-
.../SimpleSessionEncodabilityTestAbstract.java | 16 ++++++---
.../viewer/resources/UserReprRenderer.java | 2 +-
.../AuthenticatedWebSessionForIsis.java | 2 +-
12 files changed, 117 insertions(+), 55 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java
index 4e2dcc1..6a863f3 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java
@@ -69,7 +69,7 @@ public interface VirtualClock extends Serializable {
* Returns a the system's default ticking clock.
*/
static VirtualClock system() {
- return Instant::now;
+ return new VirtualClock_system();
}
/**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_frozen.java b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_frozen.java
index 7260dad..b01229e 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_frozen.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_frozen.java
@@ -19,11 +19,12 @@
package org.apache.isis.applib.clock;
import java.time.Instant;
+import java.util.Objects;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
-class VirtualClock_frozen implements VirtualClock {
+final class VirtualClock_frozen implements VirtualClock {
private static final long serialVersionUID = -2589204298085221985L;
@@ -33,5 +34,33 @@ class VirtualClock_frozen implements VirtualClock {
public Instant now() {
return frozenInstant;
}
+
+ // -- TO STRING, EQUALS, HASHCODE
+
+ @Override
+ public String toString() {
+ return String.format("%s: %s", this.getClass().getSimpleName(), xmlGregorianCalendar());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj==null) {
+ return false;
+ }
+ // equal if same class and same frozenInstant
+ if(!Objects.equals(this.getClass(), obj.getClass())) {
+ return false;
+ }
+ if(!Objects.equals(this.frozenInstant, ((VirtualClock_frozen)obj).frozenInstant)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ // equal if same class and same frozenInstant
+ return Objects.hash(this.getClass(), frozenInstant);
+ }
}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_frozen.java b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_system.java
similarity index 59%
copy from api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_frozen.java
copy to api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_system.java
index 7260dad..215eb4c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_frozen.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_system.java
@@ -23,15 +23,35 @@ import java.time.Instant;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
-class VirtualClock_frozen implements VirtualClock {
+final class VirtualClock_system implements VirtualClock {
- private static final long serialVersionUID = -2589204298085221985L;
+ private static final long serialVersionUID = 4019699893189814294L;
+
+ @Override
+ public Instant now() {
+ return Instant.now();
+ }
+
+ // -- TO STRING, EQUALS, HASHCODE
- private final Instant frozenInstant;
+ @Override
+ public String toString() {
+ return String.format("%s: %s", this.getClass().getSimpleName(), xmlGregorianCalendar());
+ }
@Override
- public Instant now() {
- return frozenInstant;
+ public boolean equals(Object obj) {
+ if(obj==null) {
+ return false;
+ }
+ // equal if same class
+ return this.getClass().equals(obj.getClass());
+ }
+
+ @Override
+ public int hashCode() {
+ // equal if same class
+ return this.getClass().hashCode();
}
}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_withOffset.java b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_withOffset.java
index 490d00c..9f4df40 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_withOffset.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock_withOffset.java
@@ -19,11 +19,12 @@
package org.apache.isis.applib.clock;
import java.time.Instant;
+import java.util.Objects;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
-class VirtualClock_withOffset implements VirtualClock {
+final class VirtualClock_withOffset implements VirtualClock {
private static final long serialVersionUID = -2589204298085221985L;
@@ -37,5 +38,33 @@ class VirtualClock_withOffset implements VirtualClock {
public Instant now() {
return Instant.now().plusMillis(millisOffset);
}
+
+ // -- TO STRING, EQUALS, HASHCODE
+
+ @Override
+ public String toString() {
+ return String.format("%s: %s", this.getClass().getSimpleName(), xmlGregorianCalendar());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj==null) {
+ return false;
+ }
+ // equal if same class and same millisOffset
+ if(!Objects.equals(this.getClass(), obj.getClass())) {
+ return false;
+ }
+ if(!Objects.equals(this.millisOffset, ((VirtualClock_withOffset)obj).millisOffset)) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ // equal if same class and same millisOffset
+ return Objects.hash(this.getClass(), millisOffset);
+ }
}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java b/api/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java
index 7ef9416..72518eb 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java
@@ -20,6 +20,7 @@ package org.apache.isis.applib.services.sudo;
import java.util.concurrent.Callable;
+import org.apache.isis.applib.services.user.RoleMemento;
import org.apache.isis.applib.services.user.UserMemento;
import org.apache.isis.applib.services.user.UserService;
@@ -38,8 +39,11 @@ public interface SudoService {
* If included in the list of roles, then will disable security checks (can view and use all object members).
*/
// tag::refguide[]
- String ACCESS_ALL_ROLE = // <.>
- SudoService.class.getName() + "#accessAll";
+ RoleMemento ACCESS_ALL_ROLE = // <.>
+ new RoleMemento(
+ SudoService.class.getName() + "#accessAll",
+ "Sudo, can view and use all object members.");
+
// end::refguide[]
/**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
index 9a15048..9157973 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
@@ -178,7 +178,7 @@ public final class UserMemento implements Serializable {
@Override
public int hashCode() {
- return getName().hashCode();
+ return getName().hashCode(); // its good enough to hash on just the user's name
}
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSession.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSession.java
index fa6222f..daa7787 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSession.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSession.java
@@ -44,13 +44,6 @@ public interface AuthenticationSession extends Serializable {
Can<String> getRoles();
/**
- * Whether this user has specified {@code role}
- * @param role
- * @since 2.0
- */
- boolean hasRole(String role);
-
- /**
* A unique code given to this session during authentication.
*
* <p>
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSessionAbstract.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSessionAbstract.java
index a5d098f..feb5d49 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSessionAbstract.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSessionAbstract.java
@@ -38,20 +38,20 @@ implements AuthenticationSession, Serializable {
// -- Constructor, fields
- @Getter(onMethod_ = {@Override}) @NonNull
- private final ExecutionContext executionContext;
+ @Getter(onMethod_ = {@Override})
+ private final @NonNull ExecutionContext executionContext;
- @Getter(onMethod_ = {@Override}) @NonNull
- private final String userName;
+ @Getter(onMethod_ = {@Override})
+ private final @NonNull String userName;
- @Getter(onMethod_ = {@Override}) @NonNull
- private final Can<String> roles;
+ @Getter(onMethod_ = {@Override})
+ private final @NonNull Can<String> roles;
- @Getter(onMethod_ = {@Override}) @NonNull
- private final String validationCode;
+ @Getter(onMethod_ = {@Override})
+ private final @NonNull String validationCode;
- @Getter(onMethod_ = {@Override}) @NonNull
- private final MessageBroker messageBroker;
+ @Getter(onMethod_ = {@Override})
+ private final @NonNull MessageBroker messageBroker;
public AuthenticationSessionAbstract(
@NonNull final ExecutionContext executionEnvironment,
@@ -74,25 +74,6 @@ implements AuthenticationSession, Serializable {
return Objects.equals(userName, getUserName());
}
- // -- Roles
-
- @Override
- public boolean hasRole(String role) {
- return roles.contains(role);
- }
-
- // -- Attributes
-
-// @Override
-// public Object getAttribute(final String attributeName) {
-// return attributeByName.get(attributeName);
-// }
-//
-// @Override
-// public void setAttribute(final String attributeName, final Object attribute) {
-// attributeByName.put(attributeName, attribute);
-// }
-
// -- TO STRING, EQUALS, HASHCODE
private static final ToString<AuthenticationSessionAbstract> toString = ToString
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authorization/manager/AuthorizationManager.java b/core/security/src/main/java/org/apache/isis/core/security/authorization/manager/AuthorizationManager.java
index a4131ec..89e8f71 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authorization/manager/AuthorizationManager.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authorization/manager/AuthorizationManager.java
@@ -107,7 +107,7 @@ public class AuthorizationManager {
if(session==null) {
return false;
}
- return session.hasRole(SudoService.ACCESS_ALL_ROLE);
+ return session.getRoles().contains(SudoService.ACCESS_ALL_ROLE.getName());
}
private boolean anyMatchOnRoles(
diff --git a/core/security/src/test/java/org/apache/isis/security/authentication/standard/SimpleSessionEncodabilityTestAbstract.java b/core/security/src/test/java/org/apache/isis/security/authentication/standard/SimpleSessionEncodabilityTestAbstract.java
index a8ea7dc..660706e 100644
--- a/core/security/src/test/java/org/apache/isis/security/authentication/standard/SimpleSessionEncodabilityTestAbstract.java
+++ b/core/security/src/test/java/org/apache/isis/security/authentication/standard/SimpleSessionEncodabilityTestAbstract.java
@@ -23,18 +23,24 @@ import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import org.apache.isis.core.security.authentication.AuthenticationSessionAbstract;
import org.apache.isis.security.EncodabilityContractTest;
-import org.apache.isis.core.security.authentication.standard.SimpleSession;
public abstract class SimpleSessionEncodabilityTestAbstract extends EncodabilityContractTest {
@Override
protected void assertRoundtripped(final Object decodedEncodable, final Object originalEncodable) {
- final SimpleSession decoded = (SimpleSession) decodedEncodable;
- final SimpleSession original = (SimpleSession) originalEncodable;
+ final AuthenticationSessionAbstract decoded = (AuthenticationSessionAbstract) decodedEncodable;
+ final AuthenticationSessionAbstract original = (AuthenticationSessionAbstract) originalEncodable;
- assertThat(decoded.getUserName(), is(equalTo(original.getUserName())));
- assertThat(decoded.getRoles(), is(equalTo(original.getRoles())));
+ assertThat(decoded.getUser(), is(equalTo(original.getUser()))); // redundant shortcut
+
+ assertThat(decoded.getExecutionContext().getTimeZone(), is(equalTo(original.getExecutionContext().getTimeZone())));
+ assertThat(decoded.getExecutionContext().getLocale(), is(equalTo(original.getExecutionContext().getLocale())));
+ assertThat(decoded.getExecutionContext().getUser(), is(equalTo(original.getExecutionContext().getUser())));
+ assertThat(decoded.getExecutionContext().getClock(), is(equalTo(original.getExecutionContext().getClock())));
+
+ assertThat(decoded.getExecutionContext(), is(equalTo(original.getExecutionContext())));
}
}
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/UserReprRenderer.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/UserReprRenderer.java
index db80745..39f3a44 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/UserReprRenderer.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/UserReprRenderer.java
@@ -38,7 +38,7 @@ public class UserReprRenderer extends ReprRendererAbstract<UserReprRenderer, Aut
representation.mapPut("userName", authenticationSession.getUserName());
final JsonRepresentation roles = JsonRepresentation.newArray();
- authenticationSession.getRoles().stream()
+ authenticationSession.getUser().streamRoleNames()
.forEach(roles::arrayAdd);
representation.mapPut("roles", roles);
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis.java
index 2e50d5d..f5deb1b 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis.java
@@ -203,7 +203,7 @@ implements BreadcrumbModelProvider, BookmarkedPagesModelProvider, HasCommonConte
}
final Roles roles = new Roles();
- getAuthenticationSession().getRoles().stream()
+ getAuthenticationSession().getUser().streamRoleNames()
.forEach(roles::add);
return roles;
}