/*
* JBoss, Home of Professional Open Source.
* Copyright 2015 Red Hat, Inc., and individual contributors
* as indicated by the @author tags.
*
* Licensed 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.wildfly.security.auth.server.event;
/**
* A class which provides an easy way to handle realm events based on the type of the event. The visitor can accept
* a parameter and return a value. To invoke the appropriate visitor method based on the event type, use the
* {@link RealmEvent#accept(RealmEventVisitor, Object) <P, R> R RealmEvent.accept(RealmEventVisitor<P, R>, P)} method.
*
* @param <P> the visitor's parameter type (may be {@link Void})
* @param <R> the visitor's return type (may be {@link Void})
* @author <a href="mailto:david.lloyd@redhat.com">David M. Lloyd</a>
*/
public abstract class RealmEventVisitor<P, R> {
/**
* Construct a new instance.
*/
protected RealmEventVisitor() {
}
/**
* Handle any unhandled realm event.
*
* @param event the realm event
* @param param the visitor parameter
* @return the visitor return value
*/
public R handleUnknownEvent(final RealmEvent event, final P param) {
return null;
}
/**
* Handle any authentication-related realm event.
*
* @param event the realm event
* @param param the visitor parameter
* @return the visitor return value
*/
public R handleAuthenticationEvent(final RealmAuthenticationEvent event, final P param) {
return handleUnknownEvent(event, param);
}
/**
* Handle an abandoned authentication realm event.
*
* @param event the realm event
* @param param the visitor parameter
* @return the visitor return value
*/
public R handleAbandonedAuthenticationEvent(final RealmAbandonedAuthenticationEvent event, final P param) {
return handleAuthenticationEvent(event, param);
}
/**
* Handle a definite-outcome authentication realm event.
*
* @param event the realm event
* @param param the visitor parameter
* @return the visitor return value
*/
public R handleDefiniteOutcomeAuthenticationEvent(final RealmDefiniteOutcomeAuthenticationEvent event, final P param) {
return handleAuthenticationEvent(event, param);
}
/**
* Handle a successful authentication realm event.
*
* @param event the realm event
* @param param the visitor parameter
* @return the visitor return value
*/
public R handleSuccessfulAuthenticationEvent(final RealmSuccessfulAuthenticationEvent event, final P param) {
return handleDefiniteOutcomeAuthenticationEvent(event, param);
}
/**
* Handle a failed authentication realm event.
*
* @param event the realm event
* @param param the visitor parameter
* @return the visitor return value
*/
public R handleFailedAuthenticationEvent(final RealmFailedAuthenticationEvent event, final P param) {
return handleDefiniteOutcomeAuthenticationEvent(event, param);
}
/**
* Handle any authorization-related realm event.
*
* @param event the realm event
* @param param the visitor parameter
* @return the visitor return value
*/
public R handleAuthorizationEvent(final RealmAuthorizationEvent event, final P param) {
return handleUnknownEvent(event, param);
}
/**
* Handle an identity authorization realm event.
*
* @param event the realm event
* @param param the visitor parameter
* @return the visitor return value
*/
public R handleIdentityAuthorizationEvent(final RealmIdentityAuthorizationEvent event, final P param) {
return handleAuthorizationEvent(event, param);
}
/**
* Handle an identity successful authorization realm event.
*
* @param event the realm event
* @param param the visitor parameter
* @return the visitor return value
*/
public R handleIdentitySuccessfulAuthorizationEvent(final RealmIdentitySuccessfulAuthorizationEvent event, final P param) {
return handleIdentityAuthorizationEvent(event, param);
}
/**
* Handle an identity failed authorization realm event.
*
* @param event the realm event
* @param param the visitor parameter
* @return the visitor return value
*/
public R handleIdentityFailedAuthorizationEvent(final RealmIdentityFailedAuthorizationEvent event, final P param) {
return handleIdentityAuthorizationEvent(event, param);
}
}