/* * 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.connection; import java.util.Properties; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.core.workspace.ModelResource; import org.teiid.designer.datatools.connection.ConnectionInfoProviderFactory; import org.teiid.designer.datatools.connection.IConnectionInfoHelper; import org.teiid.designer.datatools.connection.IConnectionInfoProvider; import org.teiid.designer.runtime.DqpPlugin; import org.teiid.designer.runtime.spi.ITeiidServer; import org.teiid.designer.vdb.connections.VdbSourceConnection; /** * * * @since 8.0 */ public class ModelConnectionMapper { String modelName; Properties properties; private ModelResource modelResource; private IConnectionInfoProvider connectionInfoProvider; /** * ModelConnectionFactoryMapper * * @param modelName * @param properties */ public ModelConnectionMapper( String modelName, Properties properties ) { CoreArgCheck.isNotEmpty(modelName); CoreArgCheck.isNotEmpty(properties); this.modelName = modelName; this.properties = (Properties)properties.clone(); String profileID = this.properties.getProperty(IConnectionInfoHelper.CONNECTION_PROFILE_NAMESPACE + IConnectionInfoHelper.PROFILE_ID_KEY); connectionInfoProvider = new ConnectionInfoProviderFactory().getProviderFromProfileID(profileID); } public ModelConnectionMapper( String modelName, Properties properties, IConnectionInfoProvider connectionInfoProvider ) { this(connectionInfoProvider); CoreArgCheck.isNotEmpty(modelName); CoreArgCheck.isNotEmpty(properties); this.modelName = modelName; this.properties = (Properties)properties.clone(); } public ModelConnectionMapper( ModelResource modelResource ) { CoreArgCheck.isNotNull(modelResource, "modelResource"); //$NON-NLS-1$ this.modelResource = modelResource; try { connectionInfoProvider = new ConnectionInfoProviderFactory().getProvider(this.modelResource); } catch (Exception e) { } } public ModelConnectionMapper( ModelResource modelResource, IConnectionInfoProvider connectionInfoProvider ) { this(connectionInfoProvider); CoreArgCheck.isNotNull(modelResource, "modelResource"); //$NON-NLS-1$ this.modelResource = modelResource; } private ModelConnectionMapper( IConnectionInfoProvider connectionInfoProvider ) { CoreArgCheck.isNotNull(connectionInfoProvider, "connectionInfoProvider"); //$NON-NLS-1$ this.connectionInfoProvider = connectionInfoProvider; } /** * @return modelName */ public String getModelName() { return modelName; } /** * @return properties */ public Properties getProperties() { return properties; } private IConnectionInfoProvider getConnectionInfoProvider() throws Exception { if (null == connectionInfoProvider) { if (modelResource != null) { connectionInfoProvider = new ConnectionInfoProviderFactory().getProvider(this.modelResource); } else if (properties != null) { connectionInfoProvider = new ConnectionInfoProviderFactory().getProvider(properties); } else { throw new Exception(DqpPlugin.Util.getString("ModelConnectionoMapper.cant.create.ConnectionInfoProvider")); //$NON-NLS-1$ } } return connectionInfoProvider; } public VdbSourceConnection getVdbSourceConnection( ITeiidServer teiidServer, String workspaceUuid ) throws Exception { if (teiidServer == null || ! teiidServer.isConnected()) { return null; } VdbSourceConnection sourceConnection = null; String translatorName = null; String jndiName = null; String dsTypeName = null; IConnectionInfoProvider provider = getConnectionInfoProvider(); Properties sourceProps = provider.getConnectionProperties(modelResource); jndiName = provider.generateUniqueConnectionJndiName(modelResource, workspaceUuid); // Insure this name exists as data source on server dsTypeName = provider.findMatchingDataSourceTypeName(modelResource); teiidServer.getOrCreateDataSource(modelResource.getItemName(), jndiName, dsTypeName, sourceProps); // Select a translator type; translatorName = provider.getTranslatorName(modelResource); sourceConnection = new VdbSourceConnection(modelName, translatorName, jndiName); sourceConnection = new VdbSourceConnection(modelName, translatorName, jndiName); return sourceConnection; } }