/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.runtime; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.eclipse.wst.server.core.IServer; import org.teiid.designer.runtime.spi.ITeiidAdminInfo; import org.teiid.designer.runtime.spi.ITeiidConnectionInfo; import org.teiid.designer.runtime.spi.ITeiidJdbcInfo; import org.teiid.designer.runtime.spi.ITeiidServer; import org.teiid.designer.runtime.spi.ITeiidServerManager; import org.teiid.designer.runtime.version.spi.ITeiidServerVersion; /** * @since 8.0 */ public class TeiidServerFactory { /** * Determine whether the {@link ITeiidServer} should be added * to the {@link TeiidServerManager} after it is created and whether * it should be connected. */ public enum ServerOptions { /** * Add the {@link ITeiidServer} to the {@link TeiidServerManager} */ ADD_TO_REGISTRY, /** * Connect the client to the Teiid Instance */ CONNECT, /** * Do NOT query the {@link TeiidServerManager}'s registry for an existing * {@link ITeiidServer} */ NO_CHECK_SERVER_REGISTRY, /** * Do NOT query whether the parent {@link IServer} is connected */ NO_CHECK_CONNECTION, /** * Server uses secure connections for admin requests */ ADMIN_SECURE_CONNECTION, /** * Server uses secure connections for jdbc requests */ JDBC_SECURE_CONNECTION } /** * @param teiidServer * @param serverManager * @param options */ private void processOptions(ITeiidServer teiidServer, ITeiidServerManager serverManager, ServerOptions[] options) { List<ServerOptions> optionList = Collections.emptyList(); if (options != null) optionList = Arrays.asList(options); if (optionList.contains(ServerOptions.ADMIN_SECURE_CONNECTION)) { teiidServer.getTeiidAdminInfo().setSecure(true); } if (optionList.contains(ServerOptions.JDBC_SECURE_CONNECTION)) { teiidServer.getTeiidJdbcInfo().setSecure(true); } if (optionList.contains(ServerOptions.CONNECT)) { // Connect this Teiid Instance try { teiidServer.connect(); } catch (Exception ex) { DqpPlugin.Util.log(ex); } } if (optionList.contains(ServerOptions.ADD_TO_REGISTRY)) { serverManager.addServer(teiidServer); } } /** * @param serverVersion * @param serverManager * @param parentServer * @param adminPort * @param adminUserName * @param adminPassword * @param jdbcPort * @param jdbcUserName * @param jdbcPassword * @param options * * @return new {@link ITeiidServer} */ public ITeiidServer createTeiidServer(ITeiidServerVersion serverVersion, ITeiidServerManager serverManager, IServer parentServer, String adminPort, String adminUserName, String adminPassword, String jdbcPort, String jdbcUserName, String jdbcPassword, ServerOptions... options) { /* * In some cases we want to return a new Teiid Instance even if its in the registry * Such Teiid Instances should be disposed of and not kept around. */ String adminPWD = adminPassword; String jdbcPWD = jdbcPassword; // Pre-set the host String host = parentServer.getHost(); if (host == null) { host = ITeiidConnectionInfo.DEFAULT_HOST; } ITeiidAdminInfo teiidAdminInfo = new TeiidAdminInfo(host, adminPort, adminUserName, serverManager.getSecureStorageProvider(), adminPWD, false); ITeiidJdbcInfo teiidJdbcInfo = new TeiidJdbcInfo(host, jdbcPort, jdbcUserName, serverManager.getSecureStorageProvider(), jdbcPWD, false); ITeiidServer teiidServer = new TeiidServer(serverVersion, host, teiidAdminInfo, teiidJdbcInfo, serverManager, parentServer, false); processOptions(teiidServer, serverManager, options); return teiidServer; } /** * @param serverVersion * @param teiidAdminInfo * @param teiidJdbcInfo * @param serverManager * @param parentServer * @param options * * @return instance of {@link ITeiidServer} */ public ITeiidServer createTeiidServer(ITeiidServerVersion serverVersion, String host, ITeiidAdminInfo teiidAdminInfo, ITeiidJdbcInfo teiidJdbcInfo, TeiidServerManager serverManager, IServer parentServer, ServerOptions... options) { ITeiidServer teiidServer = new TeiidServer(serverVersion, host, teiidAdminInfo, teiidJdbcInfo, serverManager, parentServer); processOptions(teiidServer, serverManager, options); return teiidServer; } }