/*
* JBoss, Home of Professional Open Source.
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership. Some portions may be licensed
* to Red Hat, Inc. under one or more contributor license agreements.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*/
package org.teiid.transport;
import java.util.HashMap;
import org.teiid.core.ComponentNotFoundException;
import org.teiid.core.util.ReflectionHelper;
import org.teiid.deployers.VDBRepository;
import org.teiid.net.ConnectionException;
import org.teiid.net.socket.AuthenticationType;
import org.teiid.runtime.RuntimePlugin;
import org.teiid.security.SecurityHelper;
import org.teiid.vdb.runtime.VDBKey;
public abstract class ClientServiceRegistryImpl implements ClientServiceRegistry {
public static class ClientService {
private Object instance;
private String loggingContext;
private ReflectionHelper reflectionHelper;
public ClientService(Object instance, String loggingContext,
ReflectionHelper reflectionHelper) {
this.instance = instance;
this.loggingContext = loggingContext;
this.reflectionHelper = reflectionHelper;
}
public Object getInstance() {
return instance;
}
public String getLoggingContext() {
return loggingContext;
}
public ReflectionHelper getReflectionHelper() {
return reflectionHelper;
}
}
private HashMap<String, ClientService> clientServices = new HashMap<String, ClientService>();
private SecurityHelper securityHelper;
private Type type = Type.JDBC;
private AuthenticationType authenticationType = AuthenticationType.USERPASSWORD;
private VDBRepository vdbRepository;
public ClientServiceRegistryImpl() {
}
public ClientServiceRegistryImpl(Type type) {
this.type = type;
}
public void setAuthenticationType(AuthenticationType authenticationType) {
this.authenticationType = authenticationType;
}
public <T> T getClientService(Class<T> iface) throws ComponentNotFoundException {
ClientService cs = getClientService(iface.getName());
return iface.cast(cs.getInstance());
}
public ClientService getClientService(String iface) throws ComponentNotFoundException {
ClientService cs = clientServices.get(iface);
if (cs == null) {
throw new ComponentNotFoundException(RuntimePlugin.Event.TEIID40070, RuntimePlugin.Util.gs(RuntimePlugin.Event.TEIID40070, type, iface));
}
return cs;
}
public <T> void registerClientService(Class<T> iface, T instance, String loggingContext) {
this.clientServices.put(iface.getName(), new ClientService(instance, loggingContext, new ReflectionHelper(iface)));
}
@Override
public SecurityHelper getSecurityHelper() {
return this.securityHelper;
}
public void setSecurityHelper(SecurityHelper securityHelper) {
this.securityHelper = securityHelper;
}
@Override
public AuthenticationType getAuthenticationType() {
return authenticationType;
}
@Override
public void waitForFinished(VDBKey vdbKey,
int timeOutMillis) throws ConnectionException {
}
@Override
public VDBRepository getVDBRepository() {
return vdbRepository;
}
public void setVDBRepository(VDBRepository vdbRepository) {
this.vdbRepository = vdbRepository;
}
}