001package com.identityworksllc.iiq.common.connector;
002
003import sailpoint.connector.Connector;
004import sailpoint.connector.ConnectorFactory;
005import sailpoint.tools.GeneralException;
006import sailpoint.tools.Util;
007import sailpoint.object.Application;
008
009import java.util.List;
010
011/**
012 * Workaround for some classloader problems with getRealConnector(). This will
013 * create a temporary fake Application with the given implementation class and
014 * construct that according to the configuration provided.
015 */
016public class ConnectorClassLoaderWorkaround {
017
018    /**
019     * Get a connector by class name. This will create a temporary fake Application.
020     * @param applicationClassName The class name of the connector
021     * @param optionalConnectorClassloader A list of connector-classpath entries to add to the connector classloader
022     * @return The connector
023     * @throws GeneralException if the connector cannot be created
024     */
025    public static Connector getConnector(String applicationClassName, List<String> optionalConnectorClassloader) throws GeneralException {
026        Application tempApplication = new Application();
027        tempApplication.setConnector(applicationClassName);
028        tempApplication.setName(applicationClassName);
029
030        if (!Util.isEmpty(optionalConnectorClassloader)) {
031            tempApplication.setAttribute("connector-classpath", optionalConnectorClassloader);
032        }
033
034        return ConnectorFactory.createConnector(applicationClassName, tempApplication, null);
035    }
036}