Use pattern match on instanceof 24/101724/6
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 4 Jul 2022 20:17:37 +0000 (22:17 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 4 Jul 2022 21:43:44 +0000 (23:43 +0200)
Java 17 gives us a nice way to prevent duplicate casts, use it to
simplify our code.

Change-Id: I5e8e0dd110bacc04affba9348c448b2ffcc7ead2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
aaa-encrypt-service/api/src/main/java/org/opendaylight/aaa/encrypt/PKIUtil.java
aaa-shiro/impl/src/main/java/org/opendaylight/aaa/shiro/filters/AuthenticationTokenUtils.java
aaa-shiro/impl/src/main/java/org/opendaylight/aaa/shiro/realm/KeystoneAuthRealm.java
aaa-shiro/impl/src/main/java/org/opendaylight/aaa/shiro/realm/MDSALDynamicAuthorizationFilter.java
aaa-shiro/impl/src/main/java/org/opendaylight/aaa/shiro/realm/MoonRealm.java
aaa-shiro/impl/src/main/java/org/opendaylight/aaa/shiro/realm/TokenAuthRealm.java
aaa-shiro/impl/src/test/java/org/opendaylight/aaa/shiro/realm/MDSALDynamicAuthorizationFilterTest.java
aaa-tokenauthrealm/src/main/java/org/opendaylight/aaa/tokenauthrealm/auth/AuthenticationBuilder.java
aaa-tokenauthrealm/src/main/java/org/opendaylight/aaa/tokenauthrealm/auth/ClaimBuilder.java
aaa-tokenauthrealm/src/main/java/org/opendaylight/aaa/tokenauthrealm/auth/PasswordCredentialBuilder.java
web/impl-osgi/src/main/java/org/opendaylight/aaa/web/osgi/WhiteboardWebServer.java

index acbf6bef42c81d59625bad89442de5f2f26c8f07..128a84d9c20911aa1f5e872d920478078ec58218 100644 (file)
@@ -186,8 +186,8 @@ public class PKIUtil {
 
     public String encodePublicKey(final PublicKey publicKey) throws IOException {
         ByteArrayOutputStream byteOs = new ByteArrayOutputStream();
-        if (publicKey instanceof RSAPublicKey && publicKey.getAlgorithm().equals(KEY_FACTORY_TYPE_RSA)) {
-            RSAPublicKey rsaPublicKey = (RSAPublicKey) publicKey;
+        if (publicKey instanceof RSAPublicKey rsaPublicKey
+            && rsaPublicKey.getAlgorithm().equals(KEY_FACTORY_TYPE_RSA)) {
             DataOutputStream dataOutputStream = new DataOutputStream(byteOs);
             dataOutputStream.writeInt(KEY_TYPE_RSA.getBytes(StandardCharsets.UTF_8).length);
             dataOutputStream.write(KEY_TYPE_RSA.getBytes(StandardCharsets.UTF_8));
@@ -195,8 +195,8 @@ public class PKIUtil {
             dataOutputStream.write(rsaPublicKey.getPublicExponent().toByteArray());
             dataOutputStream.writeInt(rsaPublicKey.getModulus().toByteArray().length);
             dataOutputStream.write(rsaPublicKey.getModulus().toByteArray());
-        } else if (publicKey instanceof DSAPublicKey && publicKey.getAlgorithm().equals(KEY_FACTORY_TYPE_DSA)) {
-            DSAPublicKey dsaPublicKey = (DSAPublicKey) publicKey;
+        } else if (publicKey instanceof DSAPublicKey dsaPublicKey
+            && dsaPublicKey.getAlgorithm().equals(KEY_FACTORY_TYPE_DSA)) {
             DSAParams dsaParams = dsaPublicKey.getParams();
             DataOutputStream dataOutputStream = new DataOutputStream(byteOs);
             dataOutputStream.writeInt(KEY_TYPE_DSA.getBytes(StandardCharsets.UTF_8).length);
@@ -209,8 +209,8 @@ public class PKIUtil {
             dataOutputStream.write(dsaParams.getG().toByteArray());
             dataOutputStream.writeInt(dsaPublicKey.getY().toByteArray().length);
             dataOutputStream.write(dsaPublicKey.getY().toByteArray());
-        } else if (publicKey instanceof BCECPublicKey && publicKey.getAlgorithm().equals(KEY_FACTORY_TYPE_ECDSA)) {
-            BCECPublicKey ecPublicKey = (BCECPublicKey) publicKey;
+        } else if (publicKey instanceof BCECPublicKey ecPublicKey
+            && ecPublicKey.getAlgorithm().equals(KEY_FACTORY_TYPE_ECDSA)) {
             DataOutputStream dataOutputStream = new DataOutputStream(byteOs);
             dataOutputStream.writeInt(KEY_TYPE_ECDSA.getBytes(StandardCharsets.UTF_8).length);
             dataOutputStream.write(KEY_TYPE_ECDSA.getBytes(StandardCharsets.UTF_8));
@@ -248,9 +248,8 @@ public class PKIUtil {
 
             Object privateKey = keyReader.readObject();
             KeyPair keyPair;
-            if (privateKey instanceof PEMEncryptedKeyPair) {
-                PEMKeyPair decryptedKeyPair = ((PEMEncryptedKeyPair) privateKey).decryptKeyPair(decryptionProv);
-                keyPair = converter.getKeyPair(decryptedKeyPair);
+            if (privateKey instanceof PEMEncryptedKeyPair pemPrivateKey) {
+                keyPair = converter.getKeyPair(pemPrivateKey.decryptKeyPair(decryptionProv));
             } else {
                 keyPair = converter.getKeyPair((PEMKeyPair) privateKey);
             }
index fedabde5b30e52a022277be34caee9b33e6a5789..ae0b43a6f75c9851096d4bb7dead71dba5a257cb 100644 (file)
@@ -58,8 +58,7 @@ public final class AuthenticationTokenUtils {
      * @return the username, <code>DEFAULT_USERNAME</code> or <code>DEFAULT_TOKEN</code> depending on input
      */
     public static String extractUsername(final AuthenticationToken token) {
-        if (isUsernamePasswordToken(token)) {
-            final UsernamePasswordToken upt = (UsernamePasswordToken) token;
+        if (token instanceof UsernamePasswordToken upt) {
             return extractField(upt.getUsername(), DEFAULT_USERNAME);
         }
         return DEFAULT_TOKEN;
@@ -76,8 +75,7 @@ public final class AuthenticationTokenUtils {
      * @return the hostname, or <code>DEFAULT_USERNAME</code> depending on input
      */
     public static String extractHostname(final AuthenticationToken token) {
-        if (isUsernamePasswordToken(token)) {
-            final UsernamePasswordToken upt = (UsernamePasswordToken) token;
+        if (token instanceof UsernamePasswordToken upt) {
             return extractField(upt.getHost(), DEFAULT_HOSTNAME);
         }
         return DEFAULT_HOSTNAME;
index 7de57278a83263917843a54787a618195c5355c5..604b5ca9ee720bf5ef3c22610afbcfd35e45e077 100644 (file)
@@ -119,8 +119,8 @@ public class KeystoneAuthRealm extends AuthorizingRealm {
     @Override
     protected AuthorizationInfo doGetAuthorizationInfo(final PrincipalCollection principalCollection) {
         final var primaryPrincipal = getAvailablePrincipal(principalCollection);
-        if (primaryPrincipal instanceof ODLPrincipal) {
-            return new SimpleAuthorizationInfo(((ODLPrincipal) primaryPrincipal).getRoles());
+        if (primaryPrincipal instanceof ODLPrincipal odlPrincipal) {
+            return new SimpleAuthorizationInfo(odlPrincipal.getRoles());
         }
 
         LOG.error("Unsupported principal {}", primaryPrincipal);
@@ -151,26 +151,22 @@ public class KeystoneAuthRealm extends AuthorizingRealm {
     protected AuthenticationInfo doGetAuthenticationInfo(
             final AuthenticationToken authenticationToken,
             final SimpleHttpClient client) {
-
-        final URI theServerUri = getServerUri();
-        final String theDefaultDomain = getDefaultDomain();
-
-        if (!(authenticationToken instanceof UsernamePasswordToken)) {
+        if (!(authenticationToken instanceof UsernamePasswordToken usernamePasswordToken)) {
             LOG.error("Only basic authentication is supported");
             throw new AuthenticationException(FATAL_ERROR_BASIC_AUTH_ONLY);
         }
 
+        final URI theServerUri = getServerUri();
         if (theServerUri == null) {
             LOG.error("Invalid URL to Keystone server");
             throw new AuthenticationException(FATAL_ERROR_INVALID_URL);
         }
 
-        final UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authenticationToken;
         final String qualifiedUser = usernamePasswordToken.getUsername();
         final String password = new String(usernamePasswordToken.getPassword());
         final String[] qualifiedUserArray = qualifiedUser.split(USERNAME_DOMAIN_SEPARATOR, 2);
         final String username = qualifiedUserArray.length > 0 ? qualifiedUserArray[0] : qualifiedUser;
-        final String domain = qualifiedUserArray.length > 1 ? qualifiedUserArray[1] : theDefaultDomain;
+        final String domain = qualifiedUserArray.length > 1 ? qualifiedUserArray[1] : getDefaultDomain();
 
         final KeystoneAuth keystoneAuth = new KeystoneAuth(username, password, domain);
         final SimpleHttpRequest<KeystoneToken> httpRequest = client.requestBuilder(KeystoneToken.class)
index 4f6656e2eb4eb91b8dcdf483f1ee74179820865a..38c6ee8bcebe6e4050c14b5cafff807ebb935a1b 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.aaa.shiro.realm;
 
-import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
@@ -106,10 +105,11 @@ public class MDSALDynamicAuthorizationFilter extends AuthorizationFilter
     @Override
     public boolean isAccessAllowed(final ServletRequest request, final ServletResponse response,
                                    final Object mappedValue) {
-        checkArgument(request instanceof HttpServletRequest, "Expected HttpServletRequest, received {}", request);
+        if (!(request instanceof HttpServletRequest httpServletRequest)) {
+            throw new IllegalArgumentException("Expected HttpServletRequest, received " + request);
+        }
 
         final Subject subject = getSubject(request, response);
-        final HttpServletRequest httpServletRequest = (HttpServletRequest)request;
         final String requestURI = httpServletRequest.getRequestURI();
         LOG.debug("isAccessAllowed for user={} to requestURI={}", subject, requestURI);
 
index 4bd67c3180a335b4e109b1996db36a6e01b1ce07..6814feeec4e022db289dfba30e213ffe4d4f829e 100644 (file)
@@ -67,17 +67,17 @@ public class MoonRealm extends AuthorizingRealm {
     protected AuthenticationInfo doGetAuthenticationInfo(final AuthenticationToken authenticationToken)
             throws AuthenticationException {
         final var principal = authenticationToken.getPrincipal();
-        if (!(principal instanceof String)) {
+        if (!(principal instanceof String stringPrincipal)) {
             throw new AuthenticationException("Non-string principal " + principal);
         }
 
-        if (!(authenticationToken instanceof UsernamePasswordToken)) {
+        if (!(authenticationToken instanceof UsernamePasswordToken userPassToken)) {
             throw new AuthenticationException("Token is not UsernamePasswordToken: " + authenticationToken);
         }
 
-        final var password = new String(((UsernamePasswordToken) authenticationToken).getPassword());
+        final var password = new String(userPassToken.getPassword());
         // FIXME: make the domain name configurable
-        final var moonPrincipal = moonAuthenticate((String) principal, password, MOON_DEFAULT_DOMAIN);
+        final var moonPrincipal = moonAuthenticate(stringPrincipal, password, MOON_DEFAULT_DOMAIN);
         return moonPrincipal == null ? null
             : new SimpleAuthenticationInfo(moonPrincipal, password.toCharArray(), getName());
     }
index bb8048dd9446844b9f65de014ad7f08e8d992372..18733487cb1869f7dffe42f8d8dabff572e71619 100644 (file)
@@ -90,8 +90,8 @@ public class TokenAuthRealm extends AuthorizingRealm {
     @Override
     protected AuthorizationInfo doGetAuthorizationInfo(final PrincipalCollection principalCollection) {
         final var primaryPrincipal = principalCollection.getPrimaryPrincipal();
-        if (primaryPrincipal instanceof ODLPrincipal) {
-            return new SimpleAuthorizationInfo(((ODLPrincipal) primaryPrincipal).getRoles());
+        if (primaryPrincipal instanceof ODLPrincipal odlPrincipal) {
+            return new SimpleAuthorizationInfo(odlPrincipal.getRoles());
         }
 
         LOG.error("Could not decode authorization request: {} is not a known principal type", primaryPrincipal);
index c662fa08c458b893a047c442a18f2c7f3a2cdef5..852326bf7bd775a107a1847bded995e236ef0cf9 100644 (file)
@@ -43,11 +43,11 @@ public class MDSALDynamicAuthorizationFilterTest {
     private static DataBroker mockDataBroker(final Object readData) {
         final ReadTransaction readOnlyTransaction = mock(ReadTransaction.class);
 
-        if (readData instanceof DataObject) {
-            doReturn(immediateFluentFuture(Optional.of((DataObject)readData)))
+        if (readData instanceof DataObject dataObject) {
+            doReturn(immediateFluentFuture(Optional.of(dataObject)))
                     .when(readOnlyTransaction).read(any(), any());
-        } else if (readData instanceof Exception) {
-            doReturn(immediateFailedFluentFuture((Exception)readData)).when(readOnlyTransaction).read(any(), any());
+        } else if (readData instanceof Exception cause) {
+            doReturn(immediateFailedFluentFuture(cause)).when(readOnlyTransaction).read(any(), any());
         } else {
             doReturn(immediateFluentFuture(Optional.empty())).when(readOnlyTransaction).read(any(), any());
         }
index dee4f1b05eaa66ddf89154ca2b12f9f332ea3d52..069a8e08a695853502b39c29397fb745a9e22ae7 100644 (file)
@@ -26,11 +26,11 @@ public class AuthenticationBuilder {
     private long expiration = 0L;
     private final Claim claim;
 
-    public AuthenticationBuilder(Claim claim) {
+    public AuthenticationBuilder(final Claim claim) {
         this.claim = claim;
     }
 
-    public AuthenticationBuilder setExpiration(long expiration) {
+    public AuthenticationBuilder setExpiration(final long expiration) {
         this.expiration = expiration;
         return this;
     }
@@ -45,7 +45,7 @@ public class AuthenticationBuilder {
         long expiration = 0L;
         Claim claim;
 
-        private ImmutableAuthentication(AuthenticationBuilder base) {
+        private ImmutableAuthentication(final AuthenticationBuilder base) {
             if (base.claim == null) {
                 throw new IllegalStateException("The Claim is null.");
             }
@@ -88,20 +88,14 @@ public class AuthenticationBuilder {
         }
 
         @Override
-        public boolean equals(Object object) {
-            if (this == object) {
-                return true;
-            }
-            if (!(object instanceof Authentication)) {
-                return false;
-            }
-            Authentication authentication = (Authentication) object;
-            return expiration == authentication.expiration()
-                    && Objects.equals(claim.roles(), authentication.roles())
-                    && Objects.equals(claim.domain(), authentication.domain())
-                    && Objects.equals(claim.userId(), authentication.userId())
-                    && Objects.equals(claim.user(), authentication.user())
-                    && Objects.equals(claim.clientId(), authentication.clientId());
+        public boolean equals(final Object obj) {
+            return this == obj || obj instanceof Authentication other
+                && expiration == other.expiration()
+                && Objects.equals(claim.roles(), other.roles())
+                && Objects.equals(claim.domain(), other.domain())
+                && Objects.equals(claim.userId(), other.userId())
+                && Objects.equals(claim.user(), other.user())
+                && Objects.equals(claim.clientId(), other.clientId());
         }
 
         @Override
index 37edb47c6218c9d53d2fa0002c870e5601acc5a8..362efa8cfed42091044696ccdca9b57a36d49b1c 100644 (file)
@@ -31,7 +31,7 @@ public class ClaimBuilder {
     public ClaimBuilder() {
     }
 
-    public ClaimBuilder(Claim claim) {
+    public ClaimBuilder(final Claim claim) {
         clientId = claim.clientId();
         userId = claim.userId();
         user = claim.user();
@@ -39,34 +39,34 @@ public class ClaimBuilder {
         roles.addAll(claim.roles());
     }
 
-    public ClaimBuilder setClientId(String clientId) {
+    public ClaimBuilder setClientId(final String clientId) {
         this.clientId = Strings.nullToEmpty(clientId).trim();
         return this;
     }
 
-    public ClaimBuilder setUserId(String userId) {
+    public ClaimBuilder setUserId(final String userId) {
         this.userId = Strings.nullToEmpty(userId).trim();
         return this;
     }
 
-    public ClaimBuilder setUser(String userName) {
+    public ClaimBuilder setUser(final String userName) {
         user = Strings.nullToEmpty(userName).trim();
         return this;
     }
 
-    public ClaimBuilder setDomain(String domain) {
+    public ClaimBuilder setDomain(final String domain) {
         this.domain = Strings.nullToEmpty(domain).trim();
         return this;
     }
 
-    public ClaimBuilder addRoles(Set<String> theRoles) {
+    public ClaimBuilder addRoles(final Set<String> theRoles) {
         for (String role : theRoles) {
             addRole(role);
         }
         return this;
     }
 
-    public ClaimBuilder addRole(String role) {
+    public ClaimBuilder addRole(final String role) {
         roles.add(Strings.nullToEmpty(role).trim());
         return this;
     }
@@ -84,7 +84,7 @@ public class ClaimBuilder {
         protected String domain;
         protected ImmutableSet<String> roles;
 
-        protected ImmutableClaim(ClaimBuilder base) {
+        protected ImmutableClaim(final ClaimBuilder base) {
             clientId = base.clientId;
             userId = base.userId;
             user = base.user;
@@ -123,19 +123,13 @@ public class ClaimBuilder {
         }
 
         @Override
-        public boolean equals(Object object) {
-            if (this == object) {
-                return true;
-            }
-            if (!(object instanceof Claim)) {
-                return false;
-            }
-            Claim claim = (Claim) object;
-            return Objects.equals(roles, claim.roles())
-                    && Objects.equals(domain, claim.domain())
-                    && Objects.equals(userId, claim.userId())
-                    && Objects.equals(user, claim.user())
-                    && Objects.equals(clientId, claim.clientId());
+        public boolean equals(final Object obj) {
+            return this == obj || obj instanceof Claim other
+                && Objects.equals(roles, other.roles())
+                && Objects.equals(domain, other.domain())
+                && Objects.equals(userId, other.userId())
+                && Objects.equals(user, other.user())
+                && Objects.equals(clientId, other.clientId());
         }
 
         @Override
index 0d2996dc8295199b76f4bc3a34adaf6339f5e805..340a627db7a4cb25a1ac0ea6eb975bd852d74150 100644 (file)
@@ -18,17 +18,17 @@ import org.opendaylight.aaa.api.PasswordCredentials;
 public class PasswordCredentialBuilder {
     private final MutablePasswordCredentials pc = new MutablePasswordCredentials();
 
-    public PasswordCredentialBuilder setUserName(String username) {
+    public PasswordCredentialBuilder setUserName(final String username) {
         pc.username = username;
         return this;
     }
 
-    public PasswordCredentialBuilder setPassword(String password) {
+    public PasswordCredentialBuilder setPassword(final String password) {
         pc.password = password;
         return this;
     }
 
-    public PasswordCredentialBuilder setDomain(String domain) {
+    public PasswordCredentialBuilder setDomain(final String domain) {
         pc.domain = domain;
         return this;
     }
@@ -59,17 +59,11 @@ public class PasswordCredentialBuilder {
         }
 
         @Override
-        public boolean equals(Object object) {
-            if (this == object) {
-                return true;
-            }
-            if (!(object instanceof PasswordCredentials)) {
-                return false;
-            }
-            PasswordCredentials passwordCredentials = (PasswordCredentials) object;
-            return Objects.equals(username, passwordCredentials.username())
-                    && Objects.equals(password, passwordCredentials.password())
-                    && Objects.equals(domain, passwordCredentials.domain());
+        public boolean equals(final Object obj) {
+            return this == obj || obj instanceof PasswordCredentials other
+                && Objects.equals(username, other.username())
+                && Objects.equals(password, other.password())
+                && Objects.equals(domain, other.domain());
         }
 
         @Override
index a1b3f1626709ec71404e7b85a2ef2c3712765a83..141a6825daf5e6507a02b61d391c58d876412b8e 100644 (file)
@@ -75,10 +75,10 @@ public final class WhiteboardWebServer implements WebServer {
     @Override
     public String getBaseURL() {
         final var endpoint = serviceRuntime.getProperty(HttpServiceRuntimeConstants.HTTP_SERVICE_ENDPOINT);
-        if (endpoint instanceof String) {
-            return (String) endpoint;
-        } else if (endpoint instanceof String[]) {
-            return getBaseURL(Arrays.asList((String[]) endpoint));
+        if (endpoint instanceof String str) {
+            return str;
+        } else if (endpoint instanceof String[] endpoints) {
+            return getBaseURL(Arrays.asList(endpoints));
         } else if (endpoint instanceof Collection) {
             // Safe as per OSGi Compendium R7 section 140.15.3.1
             @SuppressWarnings("unchecked")