/*
* The contents of this file are subject to the terms of the Common Development and
* Distribution License (the License). You may not use this file except in compliance with the
* License.
*
* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
* specific language governing permission and limitations under the License.
*
* When distributing Covered Software, include this CDDL Header Notice in each file and include
* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
* Header, with the fields enclosed by brackets [] replaced by your own identifying
* information: "Portions copyright [year] [name of copyright owner]".
*
* Copyright 2015 ForgeRock AS.
*/
package org.forgerock.openidm.datasource.jdbc.impl;
/**
* A visitor of {@code DataSourceConfig}s.
* <p>
* Classes implementing this interface can perform actions based on the type of
* a config in a type-safe manner. When a visitor is passed to a config's
* accept method, the corresponding visit method associated with the type of the
* config is invoked.
*
* @param <R> The return type of this visitor's methods. Use
* {@link java.lang.Void} for visitors that do not need to return
* results.
* @param <P> The type of the additional parameter to this visitor's methods.
* Use {@link java.lang.Void} for visitors that do not need an
* additional parameter.
*/
interface DataSourceConfigVisitor<R, P> {
/**
* Visit a {@link JndiDataSourceConfig}.
*
* @param config the datasource config
* @return the result of the visitor
*/
R visit(JndiDataSourceConfig config, P parameters);
/**
* Visit a {@link OsgiDataSourceConfig}.
*
* @param config the datasource config
* @return the result of the visitor
*/
R visit(OsgiDataSourceConfig config, P parameters);
/**
* Visit a {@link NonPoolingDataSourceConfig}.
*
* @param config the datasource config
* @return the result of the visitor
*/
R visit(NonPoolingDataSourceConfig config, P parameters);
/**
* Visit a {@link BoneCPDataSourceConfig}.
*
* @param config the datasource config
* @return the result of the visitor
*/
R visit(BoneCPDataSourceConfig config, P parameters);
}